【我所認知的BIOS】—PCI SCAN

news/2024/7/19 6:57:45 标签: transactions, system, function, 64bit, structure, list

【我所認知的BIOS—>PCI SCAN

LightSeed     

2009-5-12     

1PCI梗概

Study到現在已經快一年了,目前我自己理解,覺得PCI device在整個計算機的應用中是很重要,及其重要的一個東東。整由於它重要,所以可能一節我還講不完,分幾次把我所理解的PCI相關東東都總結一下。PCI是外設元件互連標準(Peripheral Component Interconnect)那麼我們平時說的PCI device就是符合這個標準的設備。(^.^廢話)這個標準由英代爾Intel)公司1991年推出的用於定義局部匯流排的標準。此標準允許在電腦內安裝多達10個遵從PCI標準的擴展卡。最早提出的PCI匯流排工作在33MHz頻率之下,傳輸帶寬達到133MB/s(33MHz * 32bit/s),基本上滿足了當時處理器的發展需要。隨著對更高性能的要求,1993年又提出了64bitPCI匯流排,後來又提出把PCI 匯流排的頻率提升到66MHz。目前廣泛採用的是32-bit33MHzPCI 匯流排,64bitPCI插槽更多是應用於伺服器產品。從結構上看,PCI是在CPU和原來的系統匯流排之間插入的一級匯流排,具體由一個橋接電路實現對這一層的管理,並實現上下之間的介面以協調資料的傳送。

2、現實中的PCI

平時我們說XX買了一個不錯的PCI顯卡,YY買了一個PCI to USB的適配器,那麼它們都爲什麽會有個PCI三個字呢?是因為他們都是插在PCI插槽上,普通主板上的PCI插槽如圖1.1

 

1.1 普通的PCI插槽

3PCI設備要運作,我們應該怎麼做?

PCI設備要運作,那麼就需要PCI SCAN

 

******************引用 start**********************

[Why need PCI SCAN]
現在的computer system泰半由許多PCI devices所組成,因此,BIOS POST中另一個重要的
task is : PCI_SCAN !!!

它代表的是: BIOS會掃瞄 whole system,找出所有的PCI devices; initial them and build a linked list of PCI devices.在此list中的每一個node都代表一個PCI device,且含有其
characteristics !

Ex. Vendor ID,Device ID, PFA,Option ROM exist or NOT,...etc.

一旦建好此表,以後的 tasks 隨時都可以參考
!!!

所以, after PCI_SCAN,有兩件事完成了
:
1. PCI device initialization;device config registers(Part A) are correctly set ...
2. One data structure is built to describe the PCI devices in whole system(
建在memory
)

這也是屬於kernel code part ^_^ ( system 一般很少 hang at this stage...)

******************引用 end***********************

 

以上引用自<小華的部落格>

連接:http://biosengineer.blogspot.com/2007/10/bios-pci-scan-9.html

 

到這裡可能多半的人都會想到那麼怎麼去scan這些PCI device呢?

 

4PCI device scan

4.1PCI設備的configuration space是什麽

顧名思義,PCI設備的configuration space是用來配置PCI device的。我們平時在BIOS修改的某些寄存器就是修改這個裏面的東東。這個space是嚴格按照PCI spec來做的,查看詳細的說,請參見PCI spec2.3chapter 6 page 195。圖4.1是配置空間的位置說明,截于PCI spec

 

4.1 PCI配置空間的map

4.2怎麼判斷PCI device存在

掃描PCI device一般都是這樣,讀取PCI設備的configuration spacevendor ID device ID,判斷他們是否為0xFFFF。若是,則說明該PCI device是不存在的。(因為每個PCI device的製造商都會把他們的ID填入這個位置,而且是read only的。)

4.3怎麼訪問PCI設備的configuration space

CF8CFC兩個端口來訪問,爲了能夠不失真我引用了spec里的原文來說明。“Two DWORD I/O locations are used to generate configuration transactions for PC-ATcompatible systems. The first DWORD location (CF8h) references a read/write registerthat is named CONFIG_ADDRESS. The second DWORD address (CFCh) references a read/write register named CONFIG_DATA”從CONFIG_ADDRESS CONFIG_DATA其實就很容易看出了,當我們向CF8端口(CONFIG_ADDRESS)寫入規定的格式地址時,便可以從CFC端口(CONFIG_DATA)讀回相應的數據。

4.4 PCI scan的技巧

這裡兩個小技巧:

list 39.0pt; mso-char-indent-count: 0; mso-list: l0 level1 lfo1;">list: Ignore;">    在讀回的端口,你可以取其中的任何一個byte或者word甚至整個double word

list 39.0pt; mso-char-indent-count: 0; mso-list: l0 level1 lfo1;">list: Ignore;">    爲了提高掃描的效率,其實可以先查看header type這個寄存器中的bit7Bit701表示該PCI設備是否是single function的,若single function device那麼這個時候就可以直接scan下一個PCI 設備啦。

4.5 訪問舉例

4.1是向CF8端口寫入的地址格式,截圖于spec page 32

 

4.1

以下是一段訪問配置空間的code

mov eax, 80020500h    ;bus 2, device 0, function 5(这里原本我写错了,是网友goldencrest帮我纠正了过来,谢谢!)

mov dx, 0cf8h

out dx, eax

mov dx, 0cfch

in eax, dx

 

以此類推,變可以把PCI device的整個configuration space都讀取出來。效果圖見圖4.2

 

4.2 ADU顯示出來的PCI configuration space數據截圖

以上是我對PCI scan的理解。不足之處還望各位指正。

 


http://www.niftyadmin.cn/n/959431.html

相关文章

【我所認知的BIOS】—PCI 配置空間拾趣

【我所認知的BIOS】—>PCI 配置空間拾趣 LightSeed 2009-5-13 1、文章結構安排 上一篇有專門對PCI device的configuration space提法。那麼在這一節中我先做一個大體介紹&#xff0c;然後再對於一些特殊的比較有用的register做比較詳細的理解總結。 2、PCI…

退役前的做题记录3

[CERC2017]Gambling Guide 设 \(f_u\) 表示 \(u\) 到 \(n\) 的期望。\(f_n0\)\[f_u1\sum_{v\in suf_v}\frac{min(f_u,f_v)}{d_u}\]\[\rightarrow f_u1\sum_{v\in suf_u,f_v<f_u}\frac{f_v}{d_u}\sum_{v\in suf_u,f_v\ge f_u}\frac{f_u}{d_u}\]\[\rightarrow f_u\sum_{v\in s…

【我所認知的BIOS】—PCI 的中斷(PIC下)

【我所認知的BIOS】—>PCI 的中斷&#xff08;PIC下&#xff09; LightSeed 2009-5-13 1、PCI中斷概述 注&#xff1a;整篇都是討論在PIC&#xff08;8259&#xff09;下的中斷過程。當PCI設備插到主板上後&#xff08;本來南橋裏含有的當然就不用插啦&…

AI与大数据融合时代来临,DTCC2019 精彩内容不能错过!

数据驱动商业变革&#xff0c;创新引领行业未来。 2019年5月8日-5月10日&#xff0c;由IT168旗下ITPUB企业社区平台主办的第十届中国数据库技术大会&#xff08;DTCC 2019&#xff09;&#xff0c;将在北京市新云南大酒店召开。本次大会将以“数据风云&#xff0c;十年变迁”为…

【我所認知的BIOS】—PCI option rom

【我所認知的BIOS】—>PCI option rom By LightSeed 2009-5-22 在這裡添加一句&#xff0c;畢竟什麽東東都是有相應的組織來定義了spec的&#xff0c;那麼不管做什麽動作我們都必須嚴格按照spec規定的動作來&#xff0c;否則你做出來的信號就只有你自己知道了&#xff0…

AWS 推出增强的 Elasticsearch 开源发行版

百度智能云域名服务&#xff0c;.com新用户首购仅需25元 AWS 近日宣布为 Elasticsearch 推出开源发行版 Open Distro for Elasticsearch。 Elasticsearch 是一个分布式、面向文档的搜索和分析引擎&#xff0c;它支持结构化和非结构化查询&#xff0c;并且不需要提前定义模式。…

【我所認知的BIOS】—Decompression

【我所認知的BIOS】—>Decompression By LightSeed 2009-5-22 存在於BIOS的bin檔中的內容大多都是以模組的形式存在的。總所周知存在於裏面的模組都是有被壓縮的。這張我們就來探討一下關於模組的壓縮與解壓過程。這個章節裏同樣是針對於理解Awxxx公司的code。 1、LHA …

java 分布式事物高并发java架构netty中间件

课程目录 (001-004) 并发编程基础篇和中级篇(005) 并发编程高级篇-锁的高级深化(006) 并发编程高级篇-锁的高级深化(007) 并发编程框架篇-Disruptor并发框架(008) SocketIO网络编程基础篇(009) SocketIO网络编程基础篇(010) Netty课程入门网络编程中级篇(011) Netty课程深入网络…