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.11. _OSC(操作系统能力)

此可选对象是一个控制方法,OSPM 使用它向平台传达设备驱动程序所提供的特性支持或能力。该对象是设备的子对象,也可以存在于 \_SB 作用域中,在那里它可用于传达平台范围的 OSPM 能力。若受支持,OSPM 会在将设备置于 D0 电源状态后立即调用 _OSC。设备特定对象会在调用 _OSC 之后再求值。这使得从其他对象返回的值可以基于由 _OSC 传达的 OSPM 特性支持/能力信息。OSPM 可以多次求值 _OSC,以向设备指示 OSPM 能力的变化,但这可能会因特定设备要求而受到限制。因此,ACPI-Defined Devices and Device-Specific Objects 或其他适用规范中的 _OSC 用法描述,会说明优先适用的设备特定 _OSC 能力和/或限制条件。

_OSC 使平台能够配置其 ACPI 命名空间表示和对象求值,以匹配 OSPM 的能力。这使得具有新特性的平台注册系统能够支持传统操作系统;这些新特性利用了新的命名空间对象,而如果将其暴露出来,在运行传统操作系统时将不会被求值。_OSC 提供了这样一种能力:当通过动态命名空间重配置可用时,使平台过渡到由原生操作系统支持的新特性和能力。_OSC 还允许具有兼容 ID 的设备在由其原生驱动程序(例如,_HID 匹配的驱动程序)控制时提供超集功能,因为合适的对象可以根据 OSPM 对 _OSC 的求值结果相应地被暴露出来。

参数:(4)

Arg0 - 一个包含 UUID 的 Buffer

Arg1 - 一个包含缓冲区格式修订 ID 的 Integer

Arg2 - 一个包含 Arg3 中条目计数的 Integer

Arg3 - 一个包含 DWORD 能力列表的 Buffer

返回值:

一个包含能力列表的 Buffer

参数信息

Arg0:UUID - 平台将其与修订 ID 结合使用,以确定能力缓冲区的格式。

Arg1:Revision ID - 能力缓冲区格式的修订版本。该修订级别特定于该 UUID。

Arg2:Count - Arg3 中能力缓冲区里的 DWORD 数量

Arg3:Capabilities Buffer - 该缓冲区包含由 Count 指定数量的 DWORD。该缓冲区的第一个 DWORD 包含如下所述的标准位定义。后续的 DWORD 包含特定于 UUID 的位,用于向平台传达 OSPM 支持的能力和特性。Capabilities Buffer 的后续修订版本必须与较早的修订版本向后兼容。位顺序不得更改。

Capabilities Buffer 是设备特定的,因此会在具体设备定义下进行描述。有关 ACPI 设备的任何 _OSC 定义,请参见ACPI-Defined Devices and Device-Specific Objects。Capabilities Buffer 的格式和行为规则也可以由 OEM 和 IHV 为自定义设备指定,其他接口或设备管理机构(例如 PCI SIG)也可以进行指定。

能力缓冲区中的第一个 DWORD 用于返回由 _OSC 定义的错误。该 DWORD 必须始终存在,且不得被使用 _OSC 的唯一接口重新定义/重用。

  • 位 [0] - 查询支持标志。如果置位,则该次 _OSC 调用是 OSPM 发起的查询,用于确定或与平台协商 OSPM 可接管的能力组合。在这种情况下,OSPM 在后续 DWORD 中置位相应位,以指定 OSPM 打算接管的能力。如果清零,则 OSPM 正尝试接管与后续 DWORD 中已置位位对应的能力。OSPM 只能按照平台通过查询结果所指示的内容接管相应能力。

  • 位 [1] - 始终清零(0)。

  • 位 [2] - 始终清零(0)。

  • 位 [3] - 始终清零(0)。

  • 所有其他位 - 保留。

返回值信息

Capabilities Buffer(Buffer)- 平台通过返回一个长度相同的 DWORD 缓冲区来确认能力缓冲区。置位的位表示确认 OSPM 可以接管该能力,清零的位表示平台要么不支持该能力,要么 OSPM 不得假定其具有控制权。

能力缓冲区中的第一个 DWORD 用于返回由 _OSC 定义的错误。该 DWORD 必须始终存在,且不得被使用 _OSC 的唯一接口重新定义/重用。

  • 位 [0] - 保留(未使用)

  • 位 [1] - _OSC 失败。平台固件无法处理该请求或查询。能力位可能已被屏蔽。

  • 位 [2] - 无法识别的 UUID。设置该位表示平台固件无法识别通过 Arg0 传入的 UUID。能力位保持不变。

  • 位 [3] - 无法识别的修订版本。设置该位表示平台固件无法识别通过 Arg1 传入的修订 ID。超出固件可理解范围的能力位将被屏蔽。

  • 位 [4] - 能力已被屏蔽。设置该位表示由驱动程序软件置位的能力位已被平台固件清除。

  • 所有其他位 - 保留。

注释

OSPM 不得使用 _OSC 求值的结果来选择兼容的设备驱动程序。OSPM 必须使用 _HID、_CID 或原生可枚举总线设备标识机制来为设备选择适当的驱动程序。

当功能控制的可用性发生变化时,平台可以发出 Notify(device, 0x08) 来通知 OSPM 重新求值 _OSC。然而,平台不得依赖 OSPM 在发出 Notify 之后求值 _OSC 来实现正确运行,因为 OSPM 无法保证存在能够接收并处理该设备 Notify 的目标实体。例如,在发出 Notify 信号时,该设备的设备驱动程序可能尚未加载。此外,对于 Capabilities Buffer 变化通知的发出和处理规则是设备特定的。因此,允许的行为由设备规范来约束:对于 ACPI 定义的设备,见ACPI 定义的设备和设备特定对象;对于其他设备,则见 OEM、IHV 或设备管理机构的设备规范。

允许 _OSC 返回 Capabilities Buffer 中所有位都被清除的结果。一个示例是,禁用基于平台的功能支持需要较长时间。然后平台稍后可以发出 Notify,以告知 OSPM 重新求值 _OSC 来接管原生控制。此行为同样是设备特定的,但也可能依赖于特定的操作系统能力。

通常,平台应支持 OSPM 通过多次调用 _OSC 来获取和放弃对特定功能支持的控制,但所需行为可能因设备而异。

由于平台在进入 S4 睡眠状态时会丢失平台上下文,OSPM 必须在从 S4 唤醒时重新求值 _OSC,以恢复先前的平台状态。此要求将取决于设备特定的 _OSC 功能。

6.2.11.1. _OSC 求值规则

本节定义 OS 必须在何时以及如何求值 _OSC,以及对固件实现的限制。

6.2.11.1.1. 查询标志

如果 OS 在求值 _OSC 时设置了查询支持标志(Capabilities DWORD 1,第 0 位),则固件不得在 _OSC 调用上下文中更改任何硬件设置。强烈建议 OS 在设置查询支持标志的情况下求值 _OSC,直到 _OSC 返回的 Capabilities Masked 位被清除,从而协商要授予 OS 进行原生支持的一组功能;在授予某项功能的原生控制之前,平台可能要求 OS 原生支持某个特定的功能组合。在设置查询标志完成协商后,OS 应在不设置该标志的情况下进行求值,以便任何协商后的值都可以对硬件生效。

6.2.11.1.2. 求值条件

OS 必须在以下条件下求值 _OSC:

在初始化任何为上文所述功能提供原生支持的驱动程序期间。这些功能可以由一个或多个驱动程序支持,但应仅由该层级结构的主总线驱动程序进行求值。辅助驱动程序必须与总线驱动程序协调以安装对这些功能的支持。驱动程序不得放弃先前已获取的功能控制(即,在协商过程之后,Capabilities DWORD3 中已置位的位必须在所有后续协商尝试中保持置位。)

当 Notify(device, 8) 被传递至 PCI 主机桥设备时。

从 S4 恢复时。从 S1-S3 恢复时,平台固件将处理上下文恢复。

6.2.11.1.3. _OSC 调用序列

以下规则适用于发往同一主机桥且发生在同一次启动过程中的 _OSC 调用序列。

  • OS 可以对 _OSC 进行任意次数的求值。

  • 如果 OS 在一次 _OSC 调用中的 Support Field 中声明支持某项功能,那么它必须在所有后续调用中保持该位的置位状态(声明支持该功能)。

  • 如果 OS 在一次 _OSC 调用中的 Control Field 中被授予某项功能的控制权,那么它必须在所有后续调用中保持该位的置位状态(请求该功能)。

  • 固件不得拒绝其先前已经授予控制权的任何功能。

  • OS 没有机制可以放弃先前请求并已获授的功能控制权。

6.2.11.2. 平台范围的 OSPM 能力

OSPM 对 \_SB._OSC 进行求值,以向平台传达平台范围的 OSPM 能力。参数定义如下:

Arguments(4) :

  • Arg0 - UUID (Buffer): 0811B06E-4A27-44F9-8D60-3CBBC22E7B48

  • Arg1 - Revision ID (Integer): 1

  • Arg2 - Arg3 中条目的计数 (Integer): 2

  • Arg3 - DWORD 能力 (Buffer):

* 第一个 DWORD:如第 6.2.11 节所述

* 第二个 DWORD:见下表。

表 6.13 平台范围 _OSC Capabilities DWORD 2

BitsField NameDefinition
0Processor Aggregator Device Support如果 OSPM 支持 Processor Aggregator 设备,如处理器聚合器设备 {add link} 中所述,则设置此位
1_PPC _OST Processing Support如果 OSPM 会由于 _PPC 更改通知(Notify 0x80)而对处理器下定义的 _OST 对象进行求值,则设置此位。
2_PR3 Support如果 OSPM 支持读取 _PR3 并使用电源资源进行电源切换,则设置此位。请注意,此握手会转换为一种操作模型,即平台和 OSPM 都支持同时包含 D3hot 和 D3 的电源模型。
3Insertion / Ejection _OST Processing Support如果 OSPM 在处理插入和弹出源事件代码时会对设备下定义的 _OST 对象进行求值,则设置此位。
4APEI Support如果 OSPM 支持 ACPI 平台错误接口,则设置此位。参见 ACPI 平台错误接口 (APEI) {add link}
5CPPC Support如果 OSPM 支持通过 _CPC 对象中描述的接口控制处理器性能,则设置此位。
6CPPC 2 Support如果 OSPM 支持 _CPC 对象的修订版 2,则设置此位。
7Platform Coordinated Low Power Idle Support如果 OSPM 支持平台协调的低功耗空闲状态(见下方注释)*,则设置此位。
8OS Initiated Low Power Idle Support如果 OSPM 支持 OS 发起的低功耗空闲状态,则设置此位。*(见下方注释)。
9Fast Thermal Sampling support如果 OSPM 支持 _TFP,则设置此位。
10Greater Than 16 p-state support如果 OSPM 支持超过 16 个 p-state,则设置此位。如果清除,则最多支持 16 个 p-state。
11Generic Event Device support如果 OSPM 支持解析通用事件设备,则设置此位。
12Diverse CPPC Highest Optimization Support如果 OSPM 能够处理处理器设备关于 CPPC Highest Performance 变化的通知,则设置此位。它还表示支持针对具有不同 Highest Performance 能力的性能域进行优化。针对不同 CPPC 最高性能的潜在 OS 优化包括但不限于:将工作放置在特定逻辑处理器上,从而获得性能或功耗收益。注意:这些优化独立于平台向 OSPM 暴露不同 Highest Performance 的现有能力,以及 OSPM 对 MADT GICC 的 Processor Power Efficiency Class 的支持。
13Interrupt ResourceSource support如果 OSPM 支持在扩展中断描述符中使用 ResourceSource,则设置此位。作为通过 _OSC 提供的握手的一部分,平台将向 OS 指示其是否支持使用 ResourceSource。如果未设置,OS 可以选择忽略扩展中断描述符中的 ResourceSource 参数。
14Flexible Address Space for CPPC Registers如果 OSPM 支持任何 CPPC 寄存器位于 PCC、SystemMemory、SystemIO 或 Functional Fixed Hardware 地址空间中,则设置此位。如果未设置,则适用 ACPI 规范 6.1 中描述的按寄存器限制。
15GHES_ASSIST Support如果 OSPM 支持 HEST Error Structures 中的 GHES_ASSIS Flag,则设置此位。参见 ACPI 平台错误接口 (APEI) {add link}
16Multi PCC channel support for CPPC当 OSPM 支持用于 CPPC 协议的多个 PCC 通道时,OSPM 设置此位。
17Generic Initiator Support如果 OSPM 支持 SRAT 中的 Generic Initiator Affinity Structure,则设置此位。
18Native USB4 SupportOS 设置此位以指示支持 OSPM 原生 USB4 连接管理器,该管理器处理 USB4 连接事件和链路管理。
19Battery Charge Limiting SupportOS 设置此位以指示支持电池充电限制。此位承诺平台将始终向 OSPM 通告“真实”的充电状态。
20PCI BAR Target GAS SupportOS 设置此位以指示支持 PCI BAR Target GAS 结构,如表 5.2所述。
31:21保留(必须为 0)

注

  • 作为通过 _OSC 提供的握手的一部分,OS 将通过标志 7 和 8 传入标志,以指示其是否支持平台协调的低功耗空闲或 OS 发起的低功耗空闲,或两者都支持(见第 8.4.4.2 节)。平台将在其响应中通过清除不支持的标志来指示其支持哪种模式。如果两者都支持,则默认是平台协调模式,且 OSPM 可以通过处理器体系结构特定机制将平台切换到 OS 发起模式。通过设置标志 7 或 8 中的任意一个或两个,OSPM 断言其支持任何与低功耗空闲状态相关联的对象(见第 8.4.4.3 节、表 8.16和第 7.2.5 节),并且支持处理器容器设备。

返回值信息

Capabilities Buffer (Buffer) - 平台通过返回一个长度相同的 DWORD 缓冲区来确认 Capabilities Buffer。置位的位表示已确认,清除的位表示平台不支持该能力。

6.2.11.3. 用于 USB 的操作系统能力(_OSC)

支持 USB4 的平台硬件和操作系统需要一些控制来回传递信息。以下定义用于传达这些信息。

连同第 6.2.11.2 节中定义的平台范围 OSPM 能力一起,此 _OSC 接口在同一作用域内实现,因此也使用同一个 _OSC Control Method,但使用不同的 UUID 值。如果平台不支持 USB4,则不应支持本节定义的 UUID。

请注意,如果表 6.15 中描述的任何功能的控制权被授予 OSPM,则系统固件不得尝试控制任何其他未授予 OSPM 的功能;在任何时刻只允许有一个连接管理器处于活动状态。OSPM 对 \_SB._OSC 进行求值,以管理平台内的 USB 能力。参数定义如下。

Arguments (4):

Arg0 – UUID (Buffer): 23A0D13A-26AB-486C-9C5F-0FFA525A575A

Arg1 – Revision ID (Integer): 1

Arg2 – Arg3 中条目的数量(双字)(Integer):3

Arg3 – 双字能力缓冲区:

  • 第一个双字:如第 6.2.11.1 节所述

  • 第二个双字:USB 的 OSPM 支持字段。详见表 6.14。

  • 第三个双字:USB 的 OSPM 控制字段。详见表 6.15。

注:OSPM 必须在 S4 恢复期间重新调用 _OSC。

表 6.14 OSPM USB 支持字段

位字段名称定义
31:0保留

表 6.15 OSPM USB 控制字段

位字段名称定义
0USB 隧道传输OSPM 通过 OSPM 原生连接管理器请求控制跨 USB4 连接的 USB 隧道传输。一旦 OSPM 获得对此功能的控制权,就不得将控制权交还给平台。
1DisplayPort 隧道传输OSPM 通过 OSPM 原生连接管理器请求控制跨 USB4 连接的 DisplayPort 隧道传输。一旦 OSPM 获得对此功能的控制权,就不得将控制权交还给平台。
2PCI Express 隧道传输OSPM 通过 OSPM 原生连接管理器请求控制跨 USB4 连接的 PCI Express 隧道传输。一旦 OSPM 获得对此功能的控制权,就不得将控制权交还给平台。
3跨域 USB4 协议OSPM 通过 OSPM 原生连接管理器请求控制跨域 USB4 连接。一旦 OSPM 获得对此功能的控制权,就不得将控制权交还给平台。
31:4保留

返回值信息

能力缓冲区(Buffer):平台通过返回一个长度相同的双字缓冲区来确认该能力缓冲区。控制字段中保留为 1 的位表示平台向 OSPM 移交控制权,而控制字段中被屏蔽/清除的位表示平台不允许 OSPM 控制相应的能力或特性。

Prev
6.2.10. _MAT(多个 APIC 表条目)
Next
6.2.12. _PRS(可能的资源设置)