【我所認知的BIOS】—>PCI SCAN
LightSeed
2009-5-12
1、PCI梗概
Study到現在已經快一年了,目前我自己理解,覺得PCI device在整個計算機的應用中是很重要,及其重要的一個東東。整由於它重要,所以可能一節我還講不完,分幾次把我所理解的PCI相關東東都總結一下。PCI是外設元件互連標準(Peripheral Component Interconnect)那麼我們平時說的PCI device就是符合這個標準的設備。(^.^廢話)這個標準由英代爾(Intel)公司1991年推出的用於定義局部匯流排的標準。此標準允許在電腦內安裝多達10個遵從PCI標準的擴展卡。最早提出的PCI匯流排工作在33MHz頻率之下,傳輸帶寬達到133MB/s(33MHz * 32bit/s),基本上滿足了當時處理器的發展需要。隨著對更高性能的要求,1993年又提出了64bit的PCI匯流排,後來又提出把PCI
2、現實中的PCI
平時我們說XX買了一個不錯的PCI顯卡,YY買了一個PCI to USB的適配器,那麼它們都爲什麽會有個PCI三個字呢?是因為他們都是插在PCI插槽上,普通主板上的PCI插槽如圖1.1
圖1.1
3、PCI設備要運作,我們應該怎麼做?
PCI設備要運作,那麼就需要PCI SCAN。
******************引用
[Why need PCI SCAN]
現在的computer system泰半由許多PCI devices所組成,因此,BIOS POST中另一個重要的
它代表的是: BIOS會掃瞄
Ex. Vendor ID,Device ID, PFA,Option ROM exist orNOT,...etc.
一旦建好此表,以後的
所以, after PCI_SCAN,有兩件事完成了:
1. PCI device initialization;device config registers(Part A) arecorrectly set ...
2. One data structure is built to describe the PCI devices in wholesystem(建在memory中)
這也是屬於kernel code part ^_^ (system
******************引用
以上引用自<</span>小華的部落格>
連接:http://biosengineer.blogspot.com/2007/10/bios-pci-scan-9.html
到這裡可能多半的人都會想到那麼怎麼去scan這些PCIdevice呢?
4、PCIdevice scan
4.1PCI設備的configuration space是什麽
顧名思義,PCI設備的configuration space是用來配置PCI device的。我們平時在BIOS修改的某些寄存器就是修改這個裏面的東東。這個space是嚴格按照PCI spec來做的,查看詳細的說,請參見PCI spec2.3的chapter 6 page 195。圖4.1是配置空間的位置說明,截于PCI spec。
圖4.1PCI配置空間的map
4.2怎麼判斷PCI device存在
掃描PCIdevice一般都是這樣,讀取PCI設備的configuration space中vendor ID
4.3怎麼訪問PCI設備的configuration space
用CF8和CFC兩個端口來訪問,爲了能夠不失真我引用了spec里的原文來說明。“Two DWORD I/O locations are used to generate configurationtransactions for PC-ATcompatible systems. The first DWORD location(CF8h) references a read/write registerthat is namedCONFIG_ADDRESS. The second DWORD address (CFCh) references aread/write register named CONFIG_DATA”從CONFIG_ADDRESS和
4.4 PCI scan的技巧
這裡兩個小技巧:
①
②
4.5 訪問舉例
圖4.1是向CF8端口寫入的地址格式,截圖于spec page 32
圖4.1
以下是一段訪問配置空間的code。
mov eax,80020500h
mov dx, 0cf8h
out dx, eax
mov dx, 0cfch
in eax, dx
以此類推,變可以把PCI device的整個configuration space都讀取出來。效果圖見圖4.2
圖4.2
以上是我對PCI scan的理解。不足之處還望各位指正。