配置空间寄存器映射到内存空间还是IO空间?

Ste*_*eve 1 hardware x86

我读到每个PCI设备功能都有一组称为配置空间的寄存器,这个配置空间有256字节长。您可以使用以下两个端口映射的 I/O 地址来访问这些寄存器:

CONFIG_ADDRESS 0x3f8
CONFIG_DATA 0x3fc
Run Code Online (Sandbox Code Playgroud)

我的问题是,configuration space寄存器是否也映射到内存空间或IO空间?或者访问它们的唯一方法是通过0x3f80x3fc

小智 5

PCI 配置地址空间确实是每个设备 256 字节。对于 PCIe,它已扩展到每个设备 2K 寄存器,而旧格式的寄存器没有用于地址位的空间。

PCIe 强制要求增强配置访问机制,该机制必须是 PC 兼容 x86 上的“用于访问设备配置寄存器的平坦内存映射地址空间”。MCFG ACPI 表提供配置寄存器映射的基地址,并在 PCI 固件规范中进行了描述。

实际上,固件会选择较大的地址空间块(通常需要 256M 来映射所有可能的 256 条总线),并相应地配置北桥。Intel 提供了非核心 CPU 的公共处理器数据表,您可以在其中查找详细信息。

为了向后兼容,初始配置访问或对传统 (<= 255) 配置寄存器的访问可以通过 CONFIG_A/D io 端口执行。