访问PCIe配置空间using Intel Chipsets
目前用于访问PCIe配置空间寄存器的方法需要追溯到原始的PCI规范。为了发起PCI总线配置周期,Intel实现的PCI规范使用IO空间的CF8h和CFCh来分别作为索引和数据寄存器,这种方法可以访问所有PCI设备的255 bytes配置寄存器。Intel Chipsets目前仍然支持这种访问PCI配置空间的方法。
PCIe规范在PCI规范的基础上,将配置空间扩展到4K bytes,至于为什么扩展到4K,具体可以参考PCIe规范,这些功能都需要配置空间。原来的CF8/CFC方法仍然可以访问所有PCIe设备配置空间的头255 bytes,但是该方法访问不了剩下的(4K-255)配置空间。怎么办呢?Intel提供了另外一种PCIe配置空间访问方法。Intel Chipset通过将配置空间映射到内存地址空间,PCIe配置空间可以像对映射范围内的内存进行read/write一样来访问了。这种映射是由北桥芯片来完成的,但是不同芯片的映射方式也是不同的。
1、CF8h/CFCH Method
Intel Chipsets使用IO空间的CF8h/CFCh地址来访问PCI设备的配置寄存器,该方法同样可以访问PCIe设备的头255配置寄存器。
为了对已知PCI设备发起一个PCI总线配置周期,软件必须执行以下步骤:
-
PCI设备的总线号必须被填写到IO地址CF8h的[23:16] bits
-
PCI设备的设备号必须被填写到IO地址CF8h的[15:11] bits
-
PCI设备的功能号必须被填写到IO地址CF8h的[10:8] bits
-
需要访问的寄存器双字地址必须被填写到IO地址CF8h的[7:2] bits
-
CF8h的最高位为配置位,该位必须设置为1
-
对于写操作,将设备的特定信息组合成一个双字(4bytes)后,写到CFCh地址