GPIO(General Purpose I/O),其接腳可以供使用者由程式控制自由使用,PIN 腳依現實考量可作為GPI、GPO、GPIO。
因此,GPIO 的 PIN,我們要注意的是用途、in/out、還有電位的high/low,可以透過HW線路圖幫助了解。而這些狀態,我們可以透過 register 去了解控制。
特定 GPIO 可以發 GPIO event,像是 SCI、SMI,例如我們 notebook lid 的動作,透過 LID 的線傳到 EC,EC 再送一個 GPIO EVENT 給南橋,然後處理。
電位的改變有 edge 和 level。edge 的電會一直持續,當電位改變的時候,狀態也跟著改變,例如 high 到 low 為 1,則 low 到 high 為0。
level 則是當電位在低的時候,表 low,高的時候表 high。PIN是吃不同電的,這點我們要注意。
接下來說 routing,為什麼要 routing 呢?一個南橋下接了一大堆 device,符合 PCI 規格的 device
都有 ABCD 四根 PIN 可以發中斷(如果是 single function,就只有 int A),而我們所知的 8259,扣掉master和slave連接的一根,真的能用的只有十五根,甚至有些已經在早期分配給固定的 device,根本不夠用,為了分配剩下的 IRQ,所以我們就做了 routing 的動作。也就是說,本來要透過硬體直接連接 PIN,但是因為不夠用,INTEL 多做了幾支 PIN,PCI DEVICES就連接到這些 PIN,用軟體模擬的方式分配,解決不夠用的問題,我們把這樣的機制稱為 PIRQ Route Controller。
IRQ 的值,我們可以在 PCI SPE OFFSET 3C 的地方看到,另外我們有一根 serial IRQ,透過電位形狀來分辨不同的中斷。
在作業系統驅動程式支援 IRQ 共享的狀態下,從早期的 PIC 只支援 15 IRQ,現在的 APIC 可以支援的 215 個。
Routing 的實作方面,可以去看_PRT這個 control method。
沒有留言:
張貼留言