PCI Express 基礎
PCI-e?是一種高速串行計算機擴展總線標準,是常用的 PC IO 接口。
PCI-e 初始化可以分為以下幾步:
1. 獲得 PCI-e 設備配置空間
2. 為設備加載相應的驅動程序
3. 由驅動程序完成硬件配置
獲取 ECAM 基址
ECAM (Enhanced Configuration Address Mapping) 基址由固件或橋設備提供
ACPI 體系計算機的?ECAM 基址 (Base address of enhanced configuration mechanism) 儲存在 MCFG 中


獲取 ECAM 基址的具體方式:
1.系統(tǒng)在初始化時,先獲取 RSDP (Root System Description Ptr)
不同平臺擁獲取 RSDP 實現(xiàn)方法不同,具體見 ACPI_Spec 的 5.2.5 Root System Description Pointer (RSDP) 章節(jié)

2.根據(jù) RSDP 找到 RSDT ( Root System Decription ) 或 XSDT ( Extend System Decription )
XSDT 目的是取代 RSDT 而并非 RSDT 的拓展。所以,所以這里就只提 XSDT。
固件加載 boot*.efi 后,會將 SystemTable 傳入主函數(shù)。詳細的內(nèi)容后續(xù)會補充在 UEFI 引導編寫教程的相關章節(jié)。
EDK2 規(guī)范中指明的 XSDT 位置 :
SystemTable -> XSDT -> MCFG
通過 圖 APCI MCFG Table 構建結構體,即可導出ECAM基址 (Base address of enhanced configuration mechanism)
讀取 PCI-e 配置空間內(nèi)容:
ECAM 基址由固件決定,所占用空間不得低于?n*32MB(n表示總線數(shù))。通常情況 可修改 ECAM?大小為 64MB、128MB、256MB。
Base address of enhanced configuration mechanism 表示的即前文提及的 ECAM 基址
ECAM 訪問 PCI-e 配置空間的方式如下,
BaseAddress[63:27] 基址
BaseAddress[27:20] 映射 總線號
BaseAddress[19:15] 映射 設備號
BaseAddress[14:12] 映射 功能號
BaseAddress[11:8]?拓展尋址器
BaseAddress[7:2]?尋址器
BaseAddress[1:0] 字節(jié)取值器(注意RW屬性)
拓展尋址器、尋址器與字節(jié)取值器 與其它部分組成完整地址,用于指針取值。
在 IO 過程中?拓展尋址器、尋址器與字節(jié)取值器 并不發(fā)揮功能。
對于用戶,訪問的方式是,將總線號,設備號,功能號整合與基址相加。
如圖:

MCFG 中的 Base Adress 即 Base Adress of Enhanced?configuration mechanism,
構建 00:00:01?設備的編號,0x800 (0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_0000_1000_0000_0000)
得到該設備的增強配置空間基址,即?Base Adress &?0x800
得到的 E000 0800H 便是該設備的配置空間基址
經(jīng)過測試,該內(nèi)存段與軟件提供的配置空間內(nèi)容相符合。
圖片來自網(wǎng)絡,侵刪