5.5.2.4.3. PCI 设备 BAR 目标协议
本节介绍如何从ASL访问PCI设备的控制寄存器。每个PCI设备都有一个与其关联的地址空间,称为“配置空间”。在偏移量 0x10 到偏移量 0x27 处,有多达六个基址寄存器 (BAR)。这些 BAR 包含PCI设备的一系列控制寄存器(在 I/O 或内存空间中)的基地址。由于即插即用OS可能随时更改这些 BAR 的值,ASL无法使用 I/O 或内存操作区域确定性地读取和写入这些 BAR。此外,即插即用OS会自动将与这些 BAR 关联的 I/O 和内存区域的所有权分配给与PCI设备关联的设备驱动程序。 ACPI、OS(也必须是即插即用操作系统)不允许ASL读取和写入本机设备驱动程序拥有的区域。
如果平台使用PCI、BAR目标操作区域,ACPI、OS将不会加载关联PCI功能的本机设备驱动程序。例如,如果PCI函数中的任何 BAR 与PCI、BAR目标操作区域关联,则OS将假定PCI函数完全受ACPI系统固件控制。不会加载任何驱动程序。因此,PCI功能可用作ACPI系统固件执行的某些任务(热插拔PCI等)的平台控制器。
5.5.2.4.3.1. 声明PCI BAR 目标操作区域
PCIBAR 包含PCI设备控制寄存器所在的 I/O 或内存区域的基地址。每个BAR都实现了一个协议,用于确定这些控制寄存器是否位于 I/O 或内存空间内以及PCI设备解码的地址空间大小。 (更多详情请参见PCI规格。)
PCI BAR 通过提供 BAR 在 PCI 器件的 PCI 配置空间内的偏移量来声明目标操作区域。 BAR 确定对设备的实际访问是通过 I/O 还是内存周期发生,而不是通过操作区域的声明发生。该区域的长度也被类似地暗示。
在术语OperationRegion(PBAR, PciBarTarget, 0x10, 0x4) 中,偏移量是BAR 在设备配置空间内的偏移量。这是使用设备中第一个BAR的操作区域的示例。
5.5.2.4.3.2. PCI 标头类型和 PCI BAR 目标操作区域
PCI BAR 目标操作区域只能在 PCI 标头类型为 0 的 PCI 设备范围内声明。 PCI 具有其他标头类型的设备是桥。 PCI桥梁的控制超出了ASL的范围。