1、PCIE 寄存器的總體結構:
PCI的配置寄存器空間為256個位元組大小。PCIE擴充了配置寄存器空間,大小為4096的位元組。PCIE配置寄存器的整體分布如下圖所示:
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiQ3chVEa0V3bT9CX5RXa2Fmcn9CXwczLcVmds92czlGZvwVP9EUTDZ0aRJkSwk0LcxGbpZ2LcBDM08CXlpXazRnbvZ2LcRlMMVDT2EWNvwFdu9mZvwVNrR1TzRGSjZXUYpVd1kmYr50MZV3YyI2cKJDT29GRjBjUIF2LcRHelR3LcJzLctmch1mclRXY39TM5ETO1YDNwEjMxATM3EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
從上圖可見,整個PCIE配置空間被分成了3部分,其中0-FF為PCI相容的配置空間,100-FFF為PCIE擴充的空間。每部分的作用大概如下:
- a、0-3F :這部分的配置空間是标準的PCI配置空間頭,是每個PCI/PCIE裝置都必須遵循的。目前一共有3種标準頭格式,00是PCI DEVICE頭,01是PCI-PCI bridge頭,02是Cardbus bridge頭。頭類型由Header Type寄存器定義。
- b、40-FF :這部分定義PCI擴充功能寄存器。0-3F定義的寄存器是每個PCI裝置都必須實作的,而PCI的一些擴充功能,不是每個裝置都必須實作的,可以根據自己的需要來實作其中一部分特性。重點注意的是這部分寄存器的組織結構,每一個可選的特性被組織成一個标準的Capability Struct,裝置選用的多個Capabilities用連結清單的方式組織起來,稱為Capabilities List。PCIE即在PCI原有的Capabilities當中新增了一種ID,即PCIE Capability Struct。這樣可以實作對老的PCI驅動的相容。
- c、100-FFF:這部分定義PCIE擴充功能寄存器。實作PCIE的可選特性,也是采取Capabilities List結構組織起來的。
2、PCI Capabilities List(40 - FF)的組織方法:
40-FF區域用來實作可選的PCI特性,每個特性對應一個Capability Struct,所有實作的特性用連結清單的方式組織起來,稱為Capabilities List。組織形式如下圖所示:
在标準PCI頭的寄存器中,”status”(06h)寄存器bit4定義了本裝置是否有Capabilities List,”Capabilities Pointer”(34h)寄存器定義了Capabilities List連結清單頭指針。如下圖所示:
需要特别注意注意的是,PCI配置寄存器是不能随意增加的。寄存器需要根據特性組織成Capabilities Struct,對Capabilities Struct是有統一規定的,包括标準特性和自定義特性。
現在協定規定的Capabilities ID有下列特性:
3、PCIE Capabilities List(100 - FFF)的組織方法:
100-FFF區域用來實作PCIE獨有可選的PCI特性,也都是使用Capabilities List的形式來組織的,隻是具體的Capbalities Struct結構有些擴充。
4、執行個體:
以系統A的PCIE配置空間為例來說明Capabilities List的組織方法:
5、參考資料:
- PCI Local Bus Specification Revision 2.3
- PCI Express Base Specification Revision 1.1