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]
答案 0 :(得分:1)
您在比较中混合了苹果和橙子。第一次地址解码由PC-AT体系结构系统(*)上的主机桥组件提供。这是使用英特尔处理器的I / O地址空间与PCI总线配置空间机制接口的一种方式。它也可以 在PCIe系统上使用,因为 PCIe主机桥组件为PCIe设备提供了相同的接口。但是,主机桥下方的所有实现在PCI和PCIe之间完全不同。
同时,您显示的第二种解码方案只能在内存映射的块中使用,PCIe通过该块来访问其扩展的配置空间。并且只有在该块以与系统有关的方式映射到物理地址空间之后。
因此,尽管它们具有相似的功能,但是不能以相同的方式使用它们。您可以:
(*)“通过0xCF8 / 0xCFC到PCI总线配置的I / O空间接口”实际上是Intel / PC-AT体系结构的一部分。其他系统架构(例如MIPS)没有单独的I / O地址空间,为它们设计的主机桥具有不同的机制来生成PCIe配置空间访问(或者它们直接使用内存映射机制)。