ACPI 中文文档ACPI 中文文档
首页
第 1 章
第 2 章
第 3 章
第 4 章
第 5 章
第 6 章
第 7 章
第 8 章
第 9 章
第 10 章
第 11 章
第 12 章
第 13 章
第 14 章
第 15 章
第 16 章
第 17 章
第 18 章
第 19 章
第 20 章
第 21 章
附录 A
首页
第 1 章
第 2 章
第 3 章
第 4 章
第 5 章
第 6 章
第 7 章
第 8 章
第 9 章
第 10 章
第 11 章
第 12 章
第 13 章
第 14 章
第 15 章
第 16 章
第 17 章
第 18 章
第 19 章
第 20 章
第 21 章
附录 A
  • 第 6 章

    • 总览
    • 6.1. 设备标识对象
    • 6.2. 设备配置对象
      • 6.2.1. _CDM(时钟域)
      • 6.2.2. _CRS(当前资源设置)
      • 6.2.3. _DIS(禁用)
      • 6.2.4. _DMA(直接内存访问)
      • 6.2.5. _DSD(设备特定数据)
      • 6.2.6. _FIX(固定寄存器资源提供程序)
      • 6.2.7. _GSB(全局系统中断基址)
      • 6.2.8. _HPP(热插拔参数)
      • 6.2.9. _HPX(热插拔参数扩展)
      • 6.2.10. _MAT(多个 APIC 表条目)
      • 6.2.11. _OSC(操作系统能力)
      • 6.2.12. _PRS(可能的资源设置)
      • 6.2.13. _PRT(PCI 路由表)
      • 6.2.14. _PXM(邻近性)
      • 6.2.15. _SLI(系统局部性信息)
      • 6.2.16. _SRS(设置资源设置)
      • 6.2.17. _CCA(缓存一致性属性)
      • 6.2.18. _HMA(异构内存属性)
    • 6.3. 设备插入、移除和状态对象
    • 6.4. ACPI 的资源数据类型
      • 6.4.1. 资源描述符的 ASL 宏
      • 6.4.2. 小型资源数据类型
      • 6.4.3. 大型资源数据类型
        • 6.4.3.1. 24 位内存范围描述符
        • 6.4.3.2. 厂商定义描述符,类型 1
        • 6.4.3.3. 32 位内存范围描述符
        • 6.4.3.4. 32 位固定内存范围描述符
        • 6.4.3.5. 地址空间资源描述符
        • 6.4.3.6. 扩展中断描述符
        • 6.4.3.7. 通用寄存器描述符
        • 6.4.3.8. 连接描述符
        • 6.4.3.9. 引脚功能描述符
        • 6.4.3.10. 引脚配置描述符
        • 6.4.3.11. 引脚组描述符
        • 6.4.3.12. 引脚组功能描述符
        • 6.4.3.13. 引脚组配置描述符
    • 6.5. 其他对象和控制方法

6.2.9. _HPX(热插拔参数扩展)

此可选对象向负责配置 PCI、PCI-X 或 PCI Express Function 的 OSPM PCI 驱动程序组件提供平台特定信息。所传达的信息适用于从包含 _HPX 对象的作用域开始向下的整个层次结构。如果在下游遇到另一个 _HPX 对象,则较低层级对象传达的设置适用于从该作用域开始向下的范围。

OSPM 使用 _HPX 返回的信息来确定如何配置热插入到系统中的 PCI Function,配置在系统初始启动期间未由平台固件配置的 Function,以及在 Function 丢失配置空间设置的任何时候对其进行配置(例如,OSPM 发出次级总线复位/Function 级复位,或触发下游端口容错)。_HPX 对象放置在需要此行为的 PCI 兼容总线的作用域内,例如带有热插拔插槽的总线。它返回一个单一 package,其中包含一个或多个子 package,每个子 package 包含一条设置记录。每条此类设置记录包含一个设置类型(INTEGER)、一个修订版本号(INTEGER)以及特定于类型/版本的内容。

_HPX 对象返回的数据格式是可扩展的。设置类型和修订版本号决定设置记录的格式。OSPM 会忽略其不理解的类型的设置记录。具有较高修订版本号的设置记录会取代较低版本号的记录,不过 _HPX 方法可以同时返回二者,OSPM 应使用其所理解的最高修订版本号的那一个。Type 3 记录可以具有多个相同版本或不同版本的记录(请参阅 PCI Express 描述符设置记录内容中的 Revision 字段)。在所有 Type 3 记录中,OSPM 应确定其所理解的最高修订版本号,并使用所有具有该版本的 Type 3 记录。

_HPX 可以返回多种类型或记录设置(每个设置位于单个子 package 中)。OSPM 负责检测 Function 的类型并应用适当的设置。OSPM 还负责检测 PCI Express Function 的设备/端口类型并应用所提供的适当设置。例如,Type 2 记录中的次级不可纠正错误严重性和次级不可纠正错误屏蔽设置仅适用于设备/端口类型为 1000b 的 PCI Express 到 PCI-X/PCI Bridge。类似地,AER 设置仅适用于支持可选 AER capability 的热插拔 PCI Express 设备。

参数:

无

返回值:

一个可变长度的 Package,其中包含 Packages 列表,每个都包含如下所述的一条 PCI、PCI-X、PCI Express 或 PCI Express 描述符记录设置

_HPX 对象取代 _HPP 对象。如果 _HPP 和 _HPX 对象同时存在于某个设备的作用域内,OSPM 将只计算 _HPX 对象。

注意

当 OSPM 已取得相应特性的原生控制权时,OSPM 可以覆盖 _HPX 对象的 Type2 记录(PCI Express 设置)或 Type3 记录(PCI Express 描述符设置)所提供的设置。例如,如果 OSPM 已取得 AER 的所有权(通过 _OSC),则 OSPM 可以覆盖 _HPX 返回的与 AER 相关的设置。

注意

由于错误状态寄存器不会驱动错误信号,因此不要求 OSPM 作为 _HPX 处理的一部分清除错误状态寄存器。

注意

除 _HPX 之外,还有其他机制可向负责配置 PCI、PCI-X 或 PCI Express Function 的 OSPM PCI 驱动程序组件提供平台特定信息(例如,PCI Firmware Specification 中定义的用于延迟容限报告的 _DSM 定义)。对于任何给定寄存器或特性,系统固件只应通过这些机制中的一种提供平台特定信息(即,如果通过用于延迟容限报告的 _DSM 定义提供了延迟容限报告信息,则 _HPX 不应再提供与延迟容限报告相关的信息,反之亦然)。否则将导致 OSPM 出现未定义行为。

6.2.9.1. PCI 设置记录(Type 0)

PCI 设置记录包含设置类型 0、当前版本 1,以及特定于类型/版本的内容:缓存行大小、延迟定时器、SERR 启用值和 PERR 启用值。

表 6.8 PCI 设置记录内容

字段对象类型定义
标头
- TypeInteger0x00:Type 0(PCI)设置记录。
- RevisionInteger0x01:版本 1,定义了下面的字段集。
Cache-line sizeInteger以 DWORD 数量表示的缓存行大小。
Latency timerInteger以 PCI 时钟周期数表示的延迟定时器值。
Enable SERRInteger当设置为 1 时,表示必须执行操作以在命令寄存器中启用 SERR。
Enable PERRInteger当设置为 1 时,表示必须执行操作以在命令寄存器中启用 PERR。

如果热插拔设备在层次结构中包含桥,则上述设置适用于热插拔桥的主侧(命令寄存器)。桥的次侧设置(Bridge Control Register)假定由桥驱动程序提供。

Type 0 记录适用于热插拔 PCI、PCI-X 和 PCI Express 设备。OSPM 将忽略 Type 0 记录中提供但不适用的设置(例如,Cache-line size 和 Latency timer 不适用于 PCI Express)。

6.2.9.2. PCI-X 设置记录(Type 1)

PCI-X 设置记录包含设置类型 1、当前版本 1,以及特定于类型/版本的内容:在为 PCI-X 总线和/或设备配置 PCI-X 命令寄存器时使用的最大内存读取字节计数设置、平均最大未完成拆分事务设置以及总最大未完成拆分事务设置。

表 6.9 PCI-X 设置记录内容

字段对象类型定义
标头
- TypeInteger0x01:Type 1(PCI-X)设置记录。
- RevisionInteger0x01:版本 1,定义了下面的字段集。
Maximum memory read byte countInteger报告的最大内存读取字节计数:值 0:最大字节计数 512 值 1:最大字节计数 1024 值 2:最大字节计数 2048 值 3:最大字节计数 4096
Average maximum outstanding split transactionsInteger定义如下值:值 0:最大未完成拆分事务 1 值 1:最大未完成拆分事务 2 值 2:最大未完成拆分事务 3 值 3:最大未完成拆分事务 4 值 4:最大未完成拆分事务 8 值 5:最大未完成拆分事务 12 值 6:最大未完成拆分事务 16 值 7:最大未完成拆分事务 32
Total maximum outstanding split transactionsInteger参见平均最大未完成拆分事务的定义。

为简化起见,OSPM 可以将“平均最大未完成拆分事务”值用作每个 PCI-X 设备的 PCI-X 命令寄存器中的“最大未完成拆分事务”寄存器值。另一种选择是使用更复杂的策略以及“总最大未完成拆分事务值”来获得更高的性能。在这种情况下,OS 将检查每个直接连接到主桥的 PCI-X 设备,确定每个设备所支持的未完成拆分事务数量,并相应地配置每个设备。目标是确保并发未完成拆分事务的总数不超过“总最大未完成拆分事务值”:该整数表示主桥能够支持的并发未完成拆分事务数量(最小值为 1)。

此对象并未涉及提供用于配置桥设备中寄存器的附加信息,无论这些寄存器是体系结构定义的、规范定义的,还是设备专用寄存器。预期桥驱动程序应是处理这两个问题的适当实现机制。然而,此类桥驱动程序应能够访问 _HPX 对象返回的数据,以用于优化其关于如何配置该桥的决策。桥的配置既依赖于系统特定信息(例如 _HPX 对象提供的信息),也依赖于桥特定信息。

6.2.9.3. PCI Express 设置记录(类型 2)

PCI Express 设置记录包含设置类型 2、当前修订版本 1,以及类型/修订版本特定内容(如下表所列的控制寄存器),用于在为 PCI Express 设备配置高级错误报告扩展能力结构或 PCI Express 能力结构中的寄存器时使用。

类型 2 设置记录允许支持原生热插拔的、可识别 PCI Express 的 OS 配置热插入 PCI Express 设备的指定寄存器。对于已通过 _OSC 获取原生热插拔控制权、但不支持或不拥有 AER 寄存器集控制权的可识别 PCI Express 的 OS,必须使用 _HPX 对象的类型 2 记录返回的数据值来为热添加的 PCI Express 设备编程 AER 寄存器。然而,由于类型 2 记录还包含除 AER 之外具有其他功能的寄存器位,OSPM 必须忽略此设置记录中不适用的值。

为了支持保留位的 PCIe RsvdP 语义,为每个寄存器提供两个值:“AND 掩码”和“OR 掩码”。固件认为是 RsvdP 的每一位,应在“AND 掩码”中设置为 1,并在“OR 掩码”中设置为 0。固件打算配置为 0 的每一位,应在“AND 掩码”和“OR 掩码”中都设置为 0。固件打算配置为 1 的每一位,应在“AND 掩码”和“OR 掩码”中都设置为 1。

在配置给定寄存器时,OSPM 使用以下算法:

  1. 读取寄存器的当前值,其中包含寄存器的默认值。

  2. 使用下表中的“AND 掩码”执行按位 AND 运算。

  3. 使用下表中的“OR 掩码”执行按位 OR 运算。

  4. 如果认为有必要,则覆盖任意位的计算设置。例如,如果 OSPM 知道某一位具有固件认为是 RsvdP 的体系结构定义含义,则 OSPM 可以选择覆盖该位的计算设置。注意,对于固件认为是 RsvdP 的每一位,固件会将“AND 值”设置为 1,并将“OR 值”设置为 0。

  5. 将最终结果值写回寄存器。

请注意,下表中每个字段的大小与相应 PCI Express 寄存器的大小一致。

表 6.10 PCI Express 设置记录内容

字段对象类型定义
Header
- TypeInteger0x02:类型 2(PCI Express)设置记录。
- RevisionInteger0x01:修订版本 1,定义了以下字段集合。
不可纠正错误屏蔽寄存器 AND 掩码Integer位 [31:0] 包含上述 OSPM 算法中要使用的“AND 掩码”。
不可纠正错误严重性寄存器 OR 掩码Integer位 [31:0] 包含上述 OSPM 算法中要使用的“OR 掩码”。
不可纠正错误严重性寄存器 AND 掩码Integer位 [31:0] 包含上述 OSPM 算法中要使用的“AND 掩码”。
不可纠正错误严重性寄存器 OR 掩码Integer位 [31:0] 包含上述 OSPM 算法中要使用的“OR 掩码”。
可纠正错误屏蔽寄存器 AND 掩码Integer位 [31:0] 包含上述 OSPM 算法中要使用的“AND 掩码”。
可纠正错误屏蔽寄存器 OR 掩码Integer位 [31:0] 包含上述 OSPM 算法中要使用的“OR 掩码”。
高级错误能力和控制寄存器 AND 掩码Integer位 [31:0] 包含上述 OSPM 算法中要使用的“AND 掩码”。
高级错误能力和控制寄存器 OR 掩码Integer位 [31:0] 包含上述 OSPM 算法中要使用的“OR 掩码”。
设备控制寄存器 AND 掩码Integer位 [15 :0] 包含上述 OSPM 算法中要使用的“AND 掩码”。
设备控制寄存器 OR 掩码Integer位 [15:0] 包含上述 OSPM 算法中要使用的“OR 掩码”。
链路控制寄存器 AND 掩码Integer位 [15 :0] 包含上述 OSPM 算法中要使用的“AND 掩码”。
链路控制寄存器 OR 掩码Integer位 [15 :0] 包含上述 OSPM 算法中要使用的“OR 掩码”。
次级不可纠正错误严重性寄存器 AND 掩码Integer位 [31 :0] 包含上述 OSPM 算法中要使用的“AND 掩码”
次级不可纠正错误严重性寄存器 OR 掩码Integer位 [31 :0] 包含上述 OSPM 算法中要使用的“OR 掩码”
次级不可纠正错误屏蔽寄存器 AND 掩码Integer位 [31 :0] 包含上述 OSPM 算法中要使用的“AND 掩码”
次级不可纠正错误屏蔽寄存器 OR 掩码Integer位 [31 :0] 包含上述 OSPM 算法中要使用的“OR 掩码”

6.2.9.4. PCI Express 描述符设置记录(类型 3)

PCI Express 描述符设置记录包含设置类型 3、当前修订版本 1,以及类型/修订版本特定内容(如下表所列的控制寄存器),用于在 PCI Express 功能中配置寄存器时使用。单个 _HPX 对象中可以包含多个 PCI Express 描述符设置记录,这些记录可以具有相同或不同的修订版本。每个 PCI Express 描述符设置记录应至少包含一个,并且可以包含多个,在 PCI Express 寄存器描述符中定义的 PCI Express 寄存器描述符。

类型 3 设置记录允许可识别 PCI Express 的 OS 配置 PCI Express 功能的指示寄存器。对于不支持或不拥有此记录中某个寄存器控制权的可识别 PCI Express 的 OS,必须使用 _HPX 对象的类型 3 记录返回的数据值,对已丢失其配置空间设置的 PCI Express 功能的该寄存器进行编程(例如,热添加设备、在系统初始启动期间未由平台固件配置的设备、通过 Secondary Bus Reset/Function Level Reset 复位的设备/功能、触发了 Downstream Port Containment,等等)。

为了支持保留位的 PCIe RsvdP 语义,对于由写入寄存器偏移指示的每个寄存器,提供两个值:写入 AND 掩码和写入 OR 掩码。固件认为是 RsvdP 的每一位,应在写入 AND 掩码中设置为 1,并在写入 OR 掩码中设置为 0。固件打算配置为 0 的每一位,应在写入 AND 掩码和写入 OR 掩码中都设置为 0。固件打算配置为 1 的每一位,应在写入 AND 掩码和写入 OR 掩码中都设置为 1。

对于 _HPX 方法作用域内每个已丢失其配置空间设置的 PCI Express 功能(例如,热添加设备、在系统初始启动期间未由平台固件配置的设备、通过 Secondary Bus Reset/Function Level Reset 复位的设备/功能、触发了 Downstream Port Containment,等等),OSPM 按顺序评估每个 PCI Express 寄存器描述符,从第一个 PCI Express 寄存器描述符开始,继续到第 N 个 PCI Express 寄存器描述符,如“PCI Express 描述符设置记录内容”中所示,使用以下算法:

  1. 验证该 PCI Express 寄存器描述符是否适用于该 PCI Express 功能。

    1. 从 PCI Express 功能的 PCI Express 能力寄存器中读取其设备类型/端口。

    2. 从下文的 PCI Express 寄存器描述符中的设备/端口类型读取与该 PCI Express 功能的设备端口/类型对应的位。

如果设置为 0b,则该 PCI Express 寄存器描述符不适用于该 PCI Express 功能,OSPM 将移动到 _HPX 方法作用域中的下一个功能;如果没有更多功能,则移动到下一个 PCI Express 寄存器描述符。

如果设置为 1b,则继续下一步。

 3. 确定该 PCI Express 功能是非 SR-IOV 功能、SR-IOV 物理功能,还是 SR-IOV 虚拟功能。

 4. 从下文的 PCI Express 寄存器描述符中的功能类型读取与该 PCI Express 功能类型对应的位。

如果设置为 0b,则该 PCI Express 寄存器描述符不适用于该 PCI Express 功能,OSPM 将移动到 _HPX 方法作用域中的下一个功能;如果没有更多功能,则移动到下一个 PCI Express 寄存器描述符。

如果设置为 1b,则该 PCI Express 寄存器描述符适用于该 PCI Express 功能,OSPM 继续下一步。

  1. 从下文的 PCI Express 寄存器描述符中读取配置空间位置。

    1. 如果配置空间位置为 0,则匹配寄存器偏移和写入寄存器偏移字段的字节偏移量相对于该功能配置空间的偏移 0。

    2. 如果配置空间位置为 1,则匹配寄存器偏移和写入寄存器偏移字段的字节偏移量相对于由 PCIe Capability ID 指示的能力结构的起始偏移。

如果 Capability ID 为 01h(PCI 电源管理能力结构)或 10h(PCI Express 能力结构),则 OSPM 应将该功能的能力结构的能力版本与 PCIe Capability ID 字段进行检查。如果对于给定的 PCIe Capability ID 存在多个 PCI Express 寄存器描述符,且其 PCIe Capability Versions 不同,则 OSPM 应使用该功能所支持的最高 PCIe Capability Version 对应的 PCI Express 寄存器描述符。

可能存在多个与所指示 PCIe Capability ID 匹配的能力结构实例。对于每个此类实例,都继续执行步骤 3。如果未找到由 PCIe Capability ID 指示的能力结构,则回到上述步骤 1,处理 _HPX 方法作用域中的下一个功能;如果没有更多功能,则处理下一个 PCI Express 寄存器描述符。

 3. 如果配置空间位置为 2,则匹配寄存器偏移和写入寄存器偏移字段的字节偏移量相对于由 PCIe Capability ID 和 PCIe Capability Version 指示的扩展能力结构的起始偏移。

如果对于给定的 PCIe Capability ID,存在多个具有不同 PCIe Capability Version 的 PCI Express 寄存器描述符,则 OSPM 应使用该功能所支持的最高 PCIe Capability Version 对应的 PCI Express 寄存器描述符。

可能存在多个与所指示的 PCIe Capability ID 和 PCIe Capability Version 匹配的扩展能力结构实例。对于每个此类实例,继续执行步骤 3。如果未找到由 PCIe Capability ID 和 PCIe Capability Version 指示的扩展能力结构,则返回上面的步骤 1,以处理 _HPX 方法范围内的下一个功能;如果没有更多功能,则处理下一个 PCI Express 寄存器描述符。

 4. 如果 Configuration Space Location 为 3,则 Match Register Offset 和 Write Register Offset 字段的字节偏移量相对于由 PCIe Capability ID、PCIe Capability Version、PCIe Vendor ID、VSEC ID 和 VSEC Rev 指示的扩展能力结构的起始偏移量。

如果对于给定的 PCIe Capability ID,存在多个具有不同 PCIe Capability Version 的 PCI Express 寄存器描述符,则 OSPM 应使用该功能所支持的最高 PCIe Capability Version 对应的 PCI Express 寄存器描述符。

一旦找到与该功能所支持的最高 PCIe Capability Version 的 PCIe Capability ID 相匹配的 PCI Express 寄存器描述符,OSPM 应在这些描述符中使用该功能所支持的最高 VSEC Rev 对应的 PCI Express 寄存器描述符。

可能存在多个与所指示的 PCIe Capability ID、PCIe Capability Version、PCIe Vendor ID、VSEC ID 和 VSEC Rev 匹配的扩展能力结构实例。对于每个此类实例,继续执行步骤 3。如果未找到由 PCIe Capability ID、PCIe Capability Version、PCIe Vendor ID、VSEC ID 和 VSEC Rev 指示的扩展能力结构,则返回上面的步骤 1,以处理 _HPX 方法范围内的下一个功能;如果没有更多功能,则处理下一个 PCI Express 寄存器描述符。

 5. 如果 Configuration Space Location 为 4,则 Match Register Offset 和 Write Register Offset 字段的字节偏移量相对于由 PCIe Capability ID、PCIe Capability Version、PCIe Vendor ID、DVSEC ID 和 DVSEC Rev 指示的扩展能力结构的起始偏移量。

如果对于给定的 PCIe Capability ID,存在多个具有不同 PCIe Capability Version 的 PCI Express 寄存器描述符,则 OSPM 应使用该功能所支持的最高 PCIe Capability Version 对应的 PCI Express 寄存器描述符。

一旦找到与该功能所支持的最高 PCIe Capability Version 的 PCIe Capability ID 相匹配的 PCI Express 寄存器描述符,OSPM 应在这些描述符中使用该功能所支持的最高 DVSEC Rev 对应的 PCI Express 寄存器描述符。

可能存在多个与所指示的 PCIe Capability ID、PCIe Capability Version、PCIe Vendor ID、DVSEC ID 和 DVSEC Rev 匹配的扩展能力结构实例。对于每个此类实例,继续执行步骤 3。如果未找到由 PCIe Capability ID、PCIe Capability Version、PCIe Vendor ID、DVSEC ID 和 DVSEC Rev 指示的扩展能力结构,则返回上面的步骤 1,以处理 _HPX 方法范围内的下一个功能;如果没有更多功能,则处理下一个 PCI Express 寄存器描述符。

  1. 检查 Match Register 以确定是否应更新 Write Register。

    1. 从由 Match Register Offset 指示的寄存器中读取当前值。

    2. 将步骤 3a 的结果与 Match AND Mask 执行按位 AND 运算。

    3. 将步骤 3b 的结果与 Match Value 进行比较。如果两者相等,则继续执行步骤 4;否则返回上面的步骤 1,以处理下一个功能

    4. 在 _HPX 方法的范围内处理下一个功能,或者如果没有更多功能,则处理下一个 PCI Express 寄存器描述符。

  2. 更新 Write Register。

  1. 从由 Write Register Offset 指示的寄存器中读取当前值。

  2. 将步骤 4a 的结果与 Write AND Mask 执行按位 AND 运算。

  3. 将步骤 4b 的结果与 Write OR Mask 执行按位 OR 运算。

  4. 如有必要,可覆盖步骤 4c 计算出的任意位设置。例如,如果 OSPM 知道某一位具有架构定义的含义,而固件认为该位是 RsvdP,则 OSPM 可以选择覆盖该位计算出的设置。请注意,对于固件认为是 RsvdP 的每一位,固件都会将 Write AND Mask 设置为 1,并将 Write OR Mask 设置为 0。

  5. 将步骤 4d 的结果写回由 Write Register Offset 指示的寄存器。

表 6.11 PCI Express 描述符设置记录内容

字段对象类型定义
Header
- TypeInteger0x03:类型 3(PCI Express 描述符)设置记录。
- RevisionInteger0x01:修订版 1,定义了下面的字段集合。
PCI Express Register Descriptor CountInteger此设置记录中的寄存器描述符数量。
First PCI Express Register DescriptorPCI Express Register Descriptor第一个 PCI Express 寄存器描述符 {add link}
Second PCI Express Register DescriptorPCI Express Register Descriptor第二个 PCI Express 寄存器描述符 {add link}
………
Nth PCI Express Register DescriptorPCI Express Register Descriptor第 N 个 PCI Express 寄存器描述符 {add link}

表 6.12 PCI Express 寄存器描述符

字段对象类型定义
设备/端口类型Integer此字段是 PCI Express Register Descriptor 适用的设备/端口类型位掩码。某一位设置为 1 表示 PCI Express Register Descriptor 适用于对应的设备/端口类型,设置为 0 表示其不适用于对应的设备/端口类型。必须至少设置一位。可以设置多于一位。位 [0]:PCI Express 端点 位 [1]:传统 PCI Express 端点 位 [2]:RCiEP 位 [3]:Root Complex 事件收集器 位 [4]:PCI Express Root Complex 的 Root Port 位 [5]:PCI Express Switch 的上游端口 位 [6]:PCI Express Switch 的下游端口 位 [7]:PCI Express 到 PCI/PCI-X 桥 位 [8]:PCI/PCI-X 到 PCI Express 桥。所有其他位均保留。
功能类型Integer此字段是 PCI Express Register Descriptor 适用的功能类型位掩码。某一位设置为 1 表示 PCI Express Register Descriptor 适用于对应的功能类型,设置为 0 表示其不适用于对应的功能类型。必须至少设置一位。可以设置多于一位。位 [0]:非 SR-IOV 功能 位 [1]:SR-IOV 物理功能 位 [2]:SR-IOV 虚拟功能。所有其他位均保留。
配置空间位置Integer值为 0 表示 Match Register Offset 和 Write Register Offset 字段相对于该功能配置空间偏移 0。值为 1 表示 Match Register Offset 和 Write Register Offset 字段位于 PCIe 配置空间前 256 字节内的能力结构中,并且相对于能力结构偏移 0。值为 2 表示 Match Register Offset 和 Write Register Offset 字段位于 PCI 配置空间前 256 字节之后的扩展能力结构中,并且相对于扩展能力结构偏移 0。值为 3 表示 Match Register Offset 和 Write Register 字段位于 PCI Express 厂商特定扩展能力中,并且相对于厂商特定扩展能力偏移 0。值为 4 表示 Match Register Offset 和 Write Register Offset 字段位于 PCI Express 设计厂商特定扩展能力中,并且相对于设计厂商特定扩展能力偏移 0。所有其他值均保留。
PCIe Capability IDIntegerPCIe Capability ID 表示能力结构(如果 Configuration Space Location 为 1)或扩展能力结构(如果 Configuration Space Location 为 2)的能力 ID,PCI Express Register Descriptor 适用于该结构。此字段仅在 Configuration Space Location 为 1(能力结构)、2(扩展能力结构)、3(厂商特定扩展能力)或 4(设计厂商特定扩展能力)时适用。
PCIe Capability VersionInteger此字段包含能力版本/扩展能力版本的信息,并在以下条件下适用:Configuration Space Location 为 1(能力结构)且 Capability ID 为 01h(PCI 电源管理能力结构);或 Configuration Space Location 为 1(能力结构)且 Capability ID 为 10h(PCI Express 能力结构);或 Configuration Space Location 为 2(扩展能力结构);或 Configuration Space Location 为 3(厂商特定扩展能力);或 Configuration Space Location 为 4(设计厂商特定扩展能力)。位 [4] 表示位 [3:0] 中能力版本/扩展能力版本的适用方式。定义值如下:0b PCI Express Register Descriptor 适用于能力版本等于位 [3:0] 中版本值的能力结构/扩展能力结构。1b PCI Express Register Descriptor 适用于能力版本大于或等于位 [3:0] 中版本值的能力结构/扩展能力结构。位 [3:0] 表示能力结构/扩展能力结构的能力版本。注意,能力结构/扩展能力结构的版本始终为 4 位,PCI 电源管理能力结构除外,其 Version 字段仅为 3 位。对于 PCI 电源管理能力结构,此字段应在位 [2:0] 中包含 Version,且位 [3] 应为 0b。所有其他位均保留。
PCIe Vendor IDInteger如果 Configuration Space Location 为 3(厂商特定扩展能力结构),此字段表示该功能配置空间偏移 0 处 Vendor ID 寄存器中的厂商,PCI Express Register Descriptor 适用于该厂商。如果 Configuration Space Location 为 4(设计厂商特定扩展能力结构),此字段表示设计厂商特定扩展能力结构中偏移 4 处 DVSEC Vendor ID 寄存器中的厂商,PCI Express Register Descriptor 适用于该厂商。此字段仅在 Configuration Space Location 为 3(厂商特定扩展能力结构)或 4(设计厂商特定扩展能力结构)时适用。
VSEC/DVSEC IDInteger如果 Configuration Space Location 为 3(厂商特定扩展能力结构),此字段表示厂商特定扩展能力结构的厂商定义 ID 编号(VSEC ID),PCI Express Register Descriptor 适用于该结构。如果 Configuration Space Location 为 4(设计厂商特定扩展能力结构),此字段表示设计厂商特定扩展能力结构的 DVSEC ID,PCI Express Register Descriptor 适用于该结构。此字段仅在 Configuration Space Location 为 3(厂商特定扩展能力结构)或 4(设计厂商特定扩展能力结构)时适用。
VSEC/DVSEC RevInteger此字段包含 VSEC/DVSEC Rev 的信息,并且仅在 Configuration Space Location 为 3(厂商特定扩展能力结构)或 4(设计厂商特定扩展能力结构)时适用。位 [4] 表示位 [3:0] 中 VSEC/DVSEC Rev 的适用方式。定义值如下:0b PCI Express Register Descriptor 适用于 VSEC/DVSEC Rev 等于位 [3:0] 中修订值的厂商特定扩展能力/设计厂商特定能力。1b PCI Express Register Descriptor 适用于 VSEC/DVSEC Rev 大于或等于位 [3:0] 中修订值的厂商特定扩展能力/设计厂商特定能力。位 [3:0] - 如果 Configuration Space Location 为 3(厂商特定扩展能力结构),此字段表示厂商特定扩展能力结构的 VSEC Rev。如果 Configuration Space Location 为 4(设计厂商特定扩展能力结构),此字段表示设计厂商特定扩展能力结构的 DVSEC 修订版本。所有其他位均保留。
Match Register OffsetInteger在写入之前进行检查的 PCIe 配置空间寄存器的字节偏移。该偏移必须按双字对齐(即位 [1:0] 为 00b)。
Match AND MaskInteger位 0 到 31 包含操作系统引擎在检查期间使用的 AND 掩码。
Match ValueInteger位 0 到 31 包含操作系统引擎在写入之前要比较的值。
Write Register OffsetInteger要修改的 PCIe 配置空间寄存器的字节偏移。该偏移必须按双字对齐(即位 [1:0] 为 00b)。
Write AND MaskInteger位 0 到 31 包含操作系统引擎用于修改要写入由 Write Register Offset 指示的寄存器之值的 AND 掩码。
Write OR MaskInteger位 0 到 31 包含操作系统引擎用于修改要写入由 Write Register Offset 指示的寄存器之值的 OR 掩码。

6.2.9.5. _HPX 示例

Method (_HPX, 0) {
    Return (Package(2){
        Package(6){        // PCI Setting Record
            0x00,          // Type 0
            0x01,          // Revision 1
            0x08,          // CacheLineSize in DWORDS
            0x40,          // LatencyTimer in PCI clocks
            0x01,          // Enable SERR (Boolean)
            0x00           // Enable PERR (Boolean)
        },
        Package(5){        // PCI-X Setting Record
            0x01,          // Type 1
            0x01,          // Revision 1
            0x03,          // Maximum Memory Read Byte Count
            0x04,          // Average Maximum Outstanding Split Transactions
            0x07           // Total Maximum Outstanding Split Transactions
        }
        Package(17){       // PCI Express Descriptor setting Record (Type 3)
            0x03,          // Type 3
            0x01,          // Revision 1
            0x01,          // Number of Register Descriptors
            0x01FF,        // Device/Port Type - All types in PCIe 4.0
            0x03,          // Function Type - All but VFs
            0x01,          // Configuration Space Location - Capability Structure
            0x10,          // PCIe Capability ID - PCI Express Cap Struct
            0x12,          // PCIe Capability Version - Applies to rev 2 and higher
            0x0000,        // PCIe Vendor ID - N/A
            0x00,          // VSEC/DVSEC ID - N/A
            0x00,          // VSEC/DVSEC Rev - N/A
            0x24,          // Match Register Offset - Device Cap 2
            0x00000002,    // Match AND Mask - Check Range B
            0x00000002     // Match Value - CTO Range B supported?
            0x28,          // Write Register Offset - Device Ctrl 2
            0xFFFFFFF0,    // Write AND Mask - Clear CTO Range
            0x00000006     // Write OR Mask - Set CTO range 65 ms to 210 ms
        }
        Package(17){       // PCI Express Descriptor setting Record (Type 3)
            0x03,          // Type 3
            0x01,          // Revision 1
            0x01,          // Number of Register Descriptors
            0x01FF,        // Device/Port Type - All types in PCIe 4.0
            0x03,          // Function Type - All but VFs
            0x01,          // Configuration Space Location - Capability Structure
            0x10,          // PCIe Capability ID - PCI Express Cap Struct
            0x12,          // PCIe Capability Version - Applies to rev 2 and higher
            0x0000,        // PCIe Vendor ID - N/A
            0x00,          // VSEC/DVSEC ID - N/A
            0x00,          // VSEC/DVSEC Rev - N/A
            0x24,          // Match Register Offset - Device Cap 2
            0x00000006,    // Match AND Mask - Check Range B/C
            0x00000004     // Match Value - CTO Range B not supported but C is?
            0x28,          // Write Register Offset - Device Ctrl 2
            0xFFFFFFF0,    // Write AND Mask - Clear CTO Range
            0x00000009     // Write OR Mask - Set CTO range 260 to 900 ms
        }
        Package(17){       // PCI Express Descriptor setting Record (Type 3)
            0x03,          // Type 3
            0x01,          // Revision 1
            0x01,          // Number of Register Descriptors
            0x01FF,        // Device/Port Type - All types in PCIe 4.0
            0x03,          // Function Type - All but VFs
            0x01,          // Configuration Space Location - Capability Structure
            0x10,          // PCIe Capability ID - PCI Express Cap Struct
            0x12,          // PCIe Capability Version - Applies to rev 2 and higher
            0x0000,        // PCIe Vendor ID - N/A
            0x00,          // VSEC/DVSEC ID - N/A
            0x00,          // VSEC/DVSEC Rev - N/A
            0x24,          // Match Register Offset - Device Cap 2
            0x00000016,    // Match AND Mask - Check Range B/C and CTO Disable
            0x00000010     // Match Value - CTO Disable support but no range B/C?
            0x28,          // Write Register Offset - Device Ctrl 2
            0xFFFFFFFF,    // Write AND Mask - Don't mask anything
            0x00000010     // Write OR Mask - Set CTO Disable
        }
    })
}
Prev
6.2.8. _HPP(热插拔参数)
Next
6.2.10. _MAT(多个 APIC 表条目)