PCIe配置空间与ECAM

时间:2018-06-25 10:46:00

标签: pci pci-e memory-mapping

PCIe ECAM是否与仅映射到内存而非I / O的“ PCI兼容配置寄存器”完全相同?

在我看来,PCIe使用与传统PCI相同的配置机制:[1]

| 31 | 30 - 24 | 23 - 16 | 15 - 11 | 10 - 8 | 7 - 2 | 1 - 0 | | Enable | Reserved | Bus Nr | Device Nr | Function Nr | Register Nr | 00 |

但是在PCIe中,您可以使用保留的字节来寻址功能的更多寄存器。 这是正确的吗?

在7.2.1节[2]中,ECAM定义为:

| 27 - 20 | 19 - 15 | 14 - 12 | 11 - 8 | 7 - 2 | 1 - 0 | | Bus Nr | Dev Nr | Function Nr | Ext. Register Nr | Register Nr | Byte Enable |

它看起来与常规配置非常相似。 仅保留位被移到它们在PCIe中扩展的寄存器号。 但是我可以像以前那样使用它们吗?仅在内存空间而不是IO空间中寻址它们?

[1] https://wiki.osdev.o/PCI#Configuration_Space_Access_Mechanism_.231 PCI Express基本规范,修订版4.0版本1.0中的[2]

1 个答案:

答案 0 :(得分:1)

您在比较中混合了苹果和橙子。第一次地址解码由PC-AT体系结构系统(*)上的主机桥组件提供。这是使用英特尔处理器的I / O地址空间与PCI总线配置空间机制接口的一种方式。它也可以 在PCIe系统上使用,因为 PCIe主机桥组件为PCIe设备提供了相同的接口。但是,主机桥下方的所有实现在PCI和PCIe之间完全不同。

同时,您显示的第二种解码方案只能在内存映射的块中使用,PCIe通过该块来访问其扩展的配置空间。并且只有在该块以与系统有关的方式映射到物理地址空间之后。

因此,尽管它们具有相似的功能,但是不能以相同的方式使用它们。您可以:

  1. 使用第一种机制访问任何PCI或PCIe设备的配置空间的前256个字节,但是您必须使用第一个寻址方案OR
  2. 使用第二种机制(包括前256个字节)访问任何PCIe设备的整个扩展配置空间,但是随后您必须使用第二种寻址方案。

(*)“通过0xCF8 / 0xCFC到PCI总线配置的I / O空间接口”实际上是Intel / PC-AT体系结构的一部分。其他系统架构(例如MIPS)没有单独的I / O地址空间,为它们设计的主机桥具有不同的机制来生成PCIe配置空间访问(或者它们直接使用内存映射机制)。