PCI/PCIe配置空間

簡介

一個PCI/PCIe設(shè)備的配置空間是給其他設(shè)備/RC暴露的接口,可以通過配置空間查看設(shè)備的一些能力集、狀態(tài)等,也可以下發(fā)寫配置命令來控制設(shè)備打開某些功能(設(shè)備必須支持才可以)

對于傳統(tǒng)PCI設(shè)備的配置空間使用256個字節(jié)的大小,而PCIe在PCI的基礎(chǔ)上擴展到了4K的大小,如下圖所示


設(shè)備配置空間劃分

也即PCIe完成兼容PCI的配置空間,都包含前256字節(jié),只有0xFF之后的空間是PCIe設(shè)備獨有的

PCI/PCIe公共配置空間頭

公共配置空間頭共占用64個字節(jié),如下圖:


配置空間頭信息

PCI/PCIe設(shè)備能力集

PCI/PCIe兼容能力集

PCI/PCIe設(shè)備能力集存放在配置空間頭之后的空間中(0x40開始的空間),但是每類設(shè)備、或者不同廠家的設(shè)備支持的能力集、存放的順序不一樣,怎么找到設(shè)備具體包含哪些能力以及都存放在什么位置呢?

規(guī)范中是通過一個鏈表來實現(xiàn)的,表頭就存放在配置空間頭信息的0x34位置(Capabilities Pointer),這個表頭就指向第一個能力所在的位置,每一個能力集都的Capability Header包含兩個內(nèi)容:

  • 當(dāng)前能力ID,bit[7:0]表示
  • 指向下一個能力的位置,bit[15:8]表示

注意:

  1. 此鏈表只能表示前256字節(jié)內(nèi)部存放的能力集;256~4K的空間內(nèi)存放PCIe擴展的能力集,具體的查找方式見下一節(jié)
    2.最后一個能力的“批向下一個能力的位置”為0表示此能力為鏈表中最后一個

以PM Cap為例,能力定義如下


PM能力前兩個字節(jié)說明

一個實際的SSD磁盤的公共配置空間如下圖所示:


一個SSD的前256字節(jié)配置空間

先讀取0x34的值為0x40,表示第一個能力的位置,讀取0x40的值表示當(dāng)前能力的ID;讀取0x41的值表示下一個能力的位置。。。

從圖中看此SSD的基本能力集如下:


基本能力集信息

PCIe擴展能力集

如果是PCIe設(shè)備的話,還會有PCIe規(guī)范定義的擴展能力集,開始位置固定在0x100為第一個擴展能力,也是通過一個鏈表來表示(與基本能力集不在同一個鏈表),Capability Header中包含三個內(nèi)容:

  • Capability ID,bit[15:0]表示
  • version,bit[19:16]表示
  • next Capability,bit[31:20]表示

以AER為例,Capability Header如下圖


AER Capability Header

一個實際的SSD磁盤的配置空間如下圖所示(4K太大,只截取到0x200):


前0x200字節(jié)的配置空間數(shù)據(jù)

讀取0x100地址的前4字節(jié)為0x16820001,拆分之后為id=0x1,vs=0x2,next=0x168

從圖中看此SSD的擴展能力集如下圖所示:


一個SSD的擴展能力集

Capability Struct

每個能力在配置空間中存放的位置找到之后就要以根據(jù)此Capability定義的結(jié)構(gòu)訪問對應(yīng)每個字段值即可,主要參考PCIe規(guī)范的第7章內(nèi)容

在系統(tǒng)啟動,或者可熱插入設(shè)備插入時,對此設(shè)備進行枚舉的過程中就可以按此方法訪問設(shè)備的配置空間所提供的能力集

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • PCIe 配置 1.BDF 和pci 總線一樣,pcie 通過8bit Bus number, 5bit Devi...
    1哥閱讀 2,566評論 0 1
  • 怎樣訪問pcie整個4k的配置空間 - blfbuaa - 博客園 (cnblogs.com)[https://w...
    薛東弗斯閱讀 316評論 0 0
  • 每個PCIe設(shè)備,有這么一段空間,Host軟件可以讀取它獲得該設(shè)備的一些信息,也可以通過它來配置該設(shè)備,這段空間就...
    小學(xué)究鑫鑫閱讀 795評論 0 0
  • PCIE 性能 下表列舉了各代PCIE的性能,可見 PCIE總的傳輸速率 = lane數(shù) * 單lane帶寬 PC...
    6d372579d253閱讀 10,121評論 0 1
  • [https://www.zhihu.com/topic/20054793] PCI/PCIe軟件界面 1。配置空...
    小學(xué)究鑫鑫閱讀 1,150評論 0 0

友情鏈接更多精彩內(nèi)容