Interrupt in Linux(硬件篇)—— 硬件知識1

第三章 你應該知道的硬件知識

3.1 APICPIC共存下的系統

PIC徹底走進歷史的日子已經不遠,Windows已經開始叫囂要放棄對PIC系統的支持,新的架構也徹底和PICbyebye(例如我們偉大的IA64^_^)。當然,PIC還會繼續在單片機、嵌入式領域發揮餘熱,這就不是我們所能理會的了。但目前PICAPIC共存的情況還普遍存在,MP specPICAPIC共存的平臺規定了三種模式:PIC modeVirtual Wire ModeSymmetric I/O Mode

筆者:Symmetric這個單詞打着甚爲麻煩,下文把Symmetric I/O Mode稱爲APIC mode

三種模式中,PIC modeVirtual Wire Mode互斥存在,所謂有你沒它。APIC mode是所有MP平臺最終進入的模式。Spec規定,爲了PC/AT compatibility,系統在RESET後首先進入PIC mode或者Virtual Wire mode,操作系統(或BIOS)在適當時候切換入APIC mode

3.1.1 PIC mode

IMCRInterrupt Mode Configuration Register,中斷模式配置寄存器,控制當前系統的中斷模式——PIC?還是APIC?當系統RESET後,該寄存器清0,系統默認進入PIC模式。此時BSPBoot Startup Processor,多處理器系統中第一個啓動的CPU)的NMIINTR腳爲硬連線,直接從外部接入,不經過APIC。下圖顯示了這個結構:

080428212131.gif

3-1 PIC模式中斷連接圖

注意圖中的虛線,PIC模式下,外部中斷通過PIC直接到達BSPINTR腳,而NMI直接連接BSPNMI腳。

IMCR1,可將系統切換至APIC模式。此時外部中斷直接通過APIC到達CPUNMI則連接LAPICLINT1腳。

題外話 —— IMCR的訪問

MP spec規定,I/O端口22h23h用於支持IMCR寄存器。對22h端口寫70h可選中IMCR,此時對23h端口讀/寫即可。此外,如果PIC mode沒有實現,IMCR則可能沒有實現。MP tableMP feature information字節的IMCRP bit報告平臺是否有ICMR

筆者:IMCRPIC mode可能已被埋入了歷史的黃土。筆者查閱了ICH9ICH即南橋)的spec,沒有找到該寄存器的描述。Google了一下,除了mp spec其它地方都沒提到它。竊以爲,此物已死。

3.1.2 Virtual Wire Mode

顧名思義,該模式有一條虛導線。這條虛導線就是APIC——LAPICIOAPIC。除此之外,該模式和PIC模式沒有大的區別。

IOAPIC用作虛導線情況如下:

080428212218.gif

3-2 Virtual Wire Mode —— IOAPIC

如圖虛線,外部中斷通過PIC連接的IOAPIC管腳,最終到達BSP。當然,連接PIC的這個管腳需要被配置成ExtINT模式。

筆者:specIOAPIC用作Virtual Wire的描述只有寥寥數語。根據前面介紹IOAPIC的內容,我們來猜測一下IOAPIC是什麼樣的。首先,IOAPICPRT表已經配置好了,不然無法向LAPIC發中斷消息。其次由於外部中斷即連接PIC又連接IOAPIC,爲了避免出現中斷復接的情況,IOAPIC中除了連接PIC的管腳,其它的都應該被mask。連接PIC的管腳delivery mode配置成ExtINT。再來猜猜PIC是什麼樣的。圖中沒有話出,但PICINTA腳肯定是連到了BSP的,因爲對於配置成ExtINT的中斷消息,CPU要通過INTA腳應答PIC,並接收中斷的vector …… 以上純屬個人猜測

LAPIC用作Virtual Wire的情況:

080428212235.gif

3-3 Virtual Wire Mode —— LAPIC

還是看圖中虛線,這次PIC接的是BSPLINT0腳,當然,該管腳也要配置成ExtINT模式。

筆者:MP spec沒說如何從Virtual Wire Mode切換到APIC模式。我們再猜測一下,重新配置模式爲ExtINTLAPICIOAPIC)的管腳,將PIC的所有管腳mask掉?

3.1.3 APIC mode

沒什麼好說的,直接看圖:

080428212256.gif

3-4 APIC mode

一個要求,進入APIC模式後要將PIC的所有管腳mask掉。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章