天天看點

PCI、PCIe、PCI BIOS概念介紹

現在看到,有的網卡的名字叫 Realtek PCIe GBE xxxx Controller 類似;想想以前折騰機箱的時候肯定聽過PCI的名字;下面來看一下PCI和PCIe的概念;以及相關的BIOS操作,作為一名程式員可以了解;

一 PCI總線

PCI是Peripheral Component Interconnect(外設部件互連标準)的縮寫,它是目前個人電腦中使用最為廣泛的接口,幾乎所有的主機闆産品上都帶有這種插槽。PCI插槽也是主機闆帶有最多數量的插槽類型,在目前流行的桌上型電腦主機闆上,ATX結構的主機闆一般帶有5~6個PCI插槽,而小一點的MATX主機闆也都帶有2~3個PCI插槽。

PCI總線結構

PCI總線是一種樹型結構,并且獨立于CPU總線,可以和CPU總線并行操作。PCI總線上可以挂接PCI裝置和PCI橋片,PCI總線上隻允許有一個PCI主裝置,其他的均為PCI 從裝置,而且讀寫操作隻能在主從裝置之間進行,從裝置之間的資料交換需要通過主裝置中轉。

PCI總線取代了早先的ISA總線。

總線裝置

在PCI總線中有三類裝置,PCI主裝置、PCI從裝置和橋裝置。其中PCI從裝置隻能被動地接收來自HOST主橋,或者其他PCI裝置的讀寫請求;而PCI主裝置可以通過總線仲裁獲得PCI總線的使用權,主動地向其他PCI裝置或者主存儲器發起存儲器讀寫請求。而橋裝置的主要作用是管理下遊的PCI總線,并轉發上下遊總線之間的總線事務。

二 PCIe

PCI-Express(peripheral component interconnect express)是一種高速串行計算機擴充總線标準,它原來的名稱為“3GIO”,是由英特爾在2001年提出的,旨在替代舊的PCI,PCI-X和AGP總線标準。

PCIe比以前的标準有許多改進,包括更高的最大系統總線吞吐量,更低的I/O引腳數量和更小的實體尺寸,更好的總線裝置性能縮放,更詳細的錯誤檢測和報告機制(進階錯誤報告,AER)和本機熱插拔功能。 PCIe标準的更新版本為I/O虛拟化提供了硬體支援。

在總線協定方面,PCI Express通信封裝在資料包中。打包和解包資料和狀态消息流量的工作由PCI Express端口的事務層處理,電信号和總線協定的根本差異需要使用不同的機械外形尺寸和擴充連接配接器(是以,需要新的主機闆和新的擴充卡闆); PCI插槽和PCI Express插槽不可互換。

在軟體級别,PCI Express保留與PCI的向後相容性; 傳統的PCI系統軟體可以檢測和配置較新的PCI Express裝置,而無需顯式支援PCI Express标準,但是新的PCI Express功能無法通路。

三 PCI裝置初始化

系統初始化時掃描PCI總線上的各個PCI裝置(包括網卡),為這些裝置配置設定總線位址,并建立起其卡上位址和總線位址的映射,那映射是怎麼建立起來的?

每個PCI裝置上都有用來建立映射的配置寄存器組(配置空間),系統初始化時通過這組寄存器來為裝置"配置"總線位址,那CPU怎麼通路這組寄存器呢?

PCI标準規定配置寄存器組最大256 byte,其中開頭64 byte是标準的(對每個PCI裝置都一樣),所有PCI裝置的配置寄存器組都使用相同的位址(卡上位址或偏移量);

系統在IO位址空間預留了八個位元組(0xCF8~0xCFF),其中前四個位元組做位址寄存器,後四個位元組做資料寄存器,當CPU通路某個裝置的某個配置寄存器時,首先通過I/O指令向位址寄存器寫入目标位址(包括總線号、裝置号、功能号、寄存器位址的綜合位址),然後通過I/O指令讀寫資料寄存器;

探測PCI裝置

配置寄存器組中的Header Type為0表示普通PCI裝置、為1表示PCI橋,PCI橋根據功能又分為Host-PCI橋、PCI-PCI橋、PCI-ISA橋、PCI-CardBus橋等;

每個PCI總線都挂在一個PCI橋下,其中0号總線挂在Host-PCI橋下(CPU通過Host-PCI橋連到0号總線),所有總線組成一顆總線樹;

直接探測

探測PCI裝置有BIOS探測和直接探測兩種方式,兩者都是從Host-PCI橋開始深度優先搜尋總線樹上的所有裝置;

四 PCI BIOS

    通過執行INT 1AH指令可以調用16位的PCI BIOS,也可以直接在實體寄存器位置000FFE6EH調用PCI BIOS。32位BIOS的調用要通過一個遠端調用來實作。在這兩種情況下,調用這都必須首先将需要的請求參數裝入處理器的寄存器組。在入口AH寄存器必須包含PCI的功能ID:B1H,AL寄存器必須包含PCI下級功能識别器。

1 PCI BIOS的存在性

入口參數:AH=B1H AL=01H 

出口參數:

    EDX:傳回值為“PCI”。字元“P”存放在DL;字元“C”存放在DH;字元“I”存放在EL;EH中方一個空格符

    AH:存在狀态。如果EDX設定适當,則00H表示存在PCI BIOS。

    AL:硬體機制

    BL:接口版本

    CL:系統中最後一個PCI局部中線的号碼

    CF:狀态标志。為1表示沒有PCI BIOS,為0表示存在PCI BIOS。

2 PCI裝置檢測

入口參數:

    AH=B1H AL=02H  

    CX=裝置識别号,從0 - 65535 

    DX=供應商識别代碼,從0 - 65534 

    SI=索引号,0-N

出口參數:     

    BH=總線号      

    BL=高5位為裝置号,低3位為功能号

    AH=傳回3種不同的代碼。00H表示檢測成功,86H表示未發現要檢測的裝置,83H表示入口參數中的供應商代碼無效

    CF=狀态标志。為1表示檢測錯誤,為0表示檢測成功。

3 PCI分類代碼檢測

入口參數:     

    AH=B1H     AL=03H

     ECX=低三個位元組為分類代碼     

    SI=索引号,0 - N

出口參數:

    BH=總線号,0-255

    BL=高5位為裝置号,低3位為功能号

    AH=00H表示檢測成功,86H表示未發現要檢測的裝置

    CF=1表示檢測錯誤,0表示檢測成功

    如果在該功能調用中,使索引号從1開始以1位增量遞增,直到AH中的傳回碼為86H為止,便可檢測出具有相同分類代碼的所有裝置。

其他BIOS功能調用包括:

    特殊周期的産生

    讀配置位元組

    讀配置字

    讀配置雙字

    寫配置位元組

    寫配置字

    寫配置雙字

繼續閱讀