顯示廣告
隱藏 ✕
看板 million
作者 emulators (模擬器)
標題 [note] PCI & PCIE scan 作業做法紀錄
時間 2014年11月11日 Tue. PM 09:52:29


hw: 掃出主機板上的 PCI, PCIE 裝置, 要分辨是否為 PCI-to-PCI bridge,
顯示出 bus no., device no., func. no., device ID, vendor ID
若是 bridge 則顯示出它的 primary bus no., secondary bus no., subordinate bus no.


PCI 基本掃瞄法:

有一種 config_address 的暫存器, 遵循特殊格式.
只要將特定格式填入每個 bit , 就可以用 config_address 的格式內容送去 0xCF8 port (使用 IoWrite32 函式)
之後使用 IoRead32() 從 0xCFC port 讀回該有的 PCI device (讀成一個無號的 32 bit 整數)
config address + hex的address 送去 IoWrite32(), 傳回 IoRead32() 的即是其 config table 中,
device ID & vendor ID 後面的內容.

例: <<待補>>

掃到的裝置 class code 格式: 位於 offset 09h ~ 0Bh
(0Bh, 0Ah, 09h) = hh hh hh 分別代表 (Interface, sub class, base class)

找 (base, sub) = (06h, 04h) 者為 PCI-PCI bridge,
設定其 primary bus number, secondary bus number, subordinate bus number.

問題: subordinate 設為 FFh, 則好像所有去找更下層的都會往該條路徑走.

以 (p,2,s) 表 (primary, secondary, subordinate)
例: bridge1 (p,2,s)=(0,4,FF), 則若有 bridge3 下面有接更深者, 它只會從 bridge1 找下去,
    如 bridge1 與 bridge3 共用同樣 p bus, bridge subordinate = FF, 則往下找只會找 bridge1,
    不會找 bridge3


當一條線上有個 PCI-PCI bridge 時, 若馬上設其 subordinate 為 0xFF,
則所有比它下層的指令都會先往這個 bridge 跑去搜尋, 搶走搜尋優先權.
但如此便與實際情況不符.

--
※ 作者: emulators 時間: 2014-11-11 21:52:29
※ 編輯: emulators 時間: 2014-11-19 10:15:54
※ 看板: million 文章推薦值: 0 目前人氣: 0 累積人氣: 1129 
r)回覆 e)編輯 d)刪除 M)收藏 ^x)轉錄 同主題: =)首篇 [)上篇 ])下篇