看板 million
作者 標題 [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
回列表(←)
分享