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
  • 第 3 章

    • 总览
    • 3.1. 系统电源管理
    • 3.2. 电源状态
    • 3.3. 设备电源管理
    • 3.4. 控制设备电源
    • 3.5. 处理器电源管理
    • 3.6. 设备和处理器性能状态
    • 3.7. 配置和“即插即用”
    • 3.8. 系统事件
    • 3.9. 电池管理
    • 3.10. 热管理概念
    • 3.11. 灵活的平台体系结构支持

3.4. 控制设备电源

ACPI 接口提供了管理设备电源所需的控制方法和信息。OSPM 利用这些接口执行诸如确定设备能力、执行方法以设置设备电源状态或获取其状态,以及使设备能够唤醒机器等任务。

  • 其他总线会枚举主板上的某些设备。例如,PCI 设备通过标准 PCI 枚举机制报告。这些设备的电源管理通过其自身的总线规范来处理(在此情况下为 PCI)。主板上的所有其他设备则通过 ACPI 处理。具体而言,ACPI 表列出了无法通过其自身总线规范报告的传统设备、系统中每条总线的根,以及具有其自身总线规范未涵盖的附加电源管理或配置选项的设备。

有关更详细的信息,请参见第 7 节

3.4.1. 获取设备电源能力

随着 OS 枚举系统中的设备,它会获取有关设备所支持的电源管理特性的信息。平台启动固件提供给 OS 的差异化定义块描述了每个由 ACPI 处理的设备。该描述包含以下信息:

  • 描述设备在其所支持的每个电源状态下所需的电源资源(电源平面和时钟源)。例如,某个设备在 D0 状态下可能需要高功率总线和时钟,而在 D2 状态下只需要低功耗总线且不需要时钟。

  • 描述设备为了唤醒机器所需的电源资源(或者不需要任何资源,以表明该设备不支持唤醒)。OS 可以使用该信息来推断该设备能够从哪些设备电源状态和系统电源状态支持唤醒。

  • OS 可用于设置设备电源状态以及获取和设置资源的可选控制方法。

除了描述由 ACPI 处理的设备之外,该表还列出了电源平面和时钟源本身,以及用于打开和关闭它们的控制方法。有关详细信息,请参见第 7 节。

3.4.2. 设置设备电源状态

OSPM 使用“设置电源状态”操作将设备置于四种电源状态之一。

当设备被置于较低功耗状态时,它会将自身配置为尽可能少地从总线获取功率。OS 会跟踪总线上所有设备的状态,并根据该总线上当前设备的需求将总线置于最佳电源状态。例如,如果总线上的所有设备都处于 D3 状态,OS 将向总线控制芯片组发送命令以移除总线电源(从而将总线置于 D3 状态)。如果某条总线支持低功耗供电状态,那么当所有设备都处于 D1 或 D2 状态时,OS 会将总线置于该状态。无论设备处于何种电源状态,OS 都必须能够发出“设置电源状态”命令来恢复该设备。

  • 设备不需要在通电状态下执行此操作。OS 必须先为设备加电,然后才能向设备发送命令。

OSPM 还使用“设置电源状态”操作来启用电源管理特性,例如唤醒(见电源与性能管理)。

对于断电操作(从 Dx 转换到更深的某个 Dy),OSPM 首先对目标状态的相应控制方法(_PSx)求值,然后关闭任何未使用的电源资源。请注意,这并不一定意味着电源实际上会从设备上移除。如果其他活动设备正在共享某个电源资源,则该电源资源将保持开启。在加电情况下(从某个 Dx 转换回较浅的 D0),会先开启 D0 所需的电源资源,然后再对控制方法(_PS0)求值。

3.4.3. 获取设备电源状态

OSPM 使用“获取电源状态”操作来确定当前的电源配置(状态和特性),以及设备支持的任何电池的状态。设备可以通过发出 SCI 来通知 OS 电源状态的变化。例如,设备可以触发中断来通知 OS 电池已达到低电量水平。

设备使用 ACPI 事件模型向 OSPM 发出电源状态变化(例如电池状态变化)的信号。平台通过中断向 OS 发出事件信号,可以是 SCI,也可以是 GPIO。会设置一个中断状态位以向 OS 指示该事件。OS 运行与该事件关联的控制方法。该控制方法向 OS 指示哪个设备发生了变化。

ACPI 支持两种类型的电池:仅报告基本电池状态信息的电池,以及支持 Smart Battery System Implementers Forum“智能电池规范”的电池。对于仅报告基本电池状态信息(例如总容量和剩余容量)的电池,OS 使用电池描述表中的控制方法来读取该信息。要读取 Smart Battery 的状态信息,OS 可以使用标准的 Smart Battery 驱动程序,通过适当的总线枚举器直接与 Smart Battery 交互。

3.4.4. 唤醒系统

唤醒操作使设备能够从睡眠状态或低功耗空闲状态唤醒系统。此操作不能依赖 CPU,因为 CPU 将不会执行指令。

OS 确保设备与核心逻辑之间的所有桥都处于仍能转发唤醒信号的最低电源状态。当启用了唤醒功能的设备决定唤醒系统时,它会在其总线上发送已定义的信号。总线桥必须使用该总线适当的信号将该信号转发到上游桥。因此,该信号最终到达核心芯片组(例如 ACPI 芯片组),后者进而唤醒系统。

在将系统置于睡眠电源状态之前,OS 会根据应用程序请求确定哪些设备需要用于唤醒系统,然后以设备和总线特定的方式在这些设备上启用唤醒。

OS 通过设置设备的 SCI 启用位或取消屏蔽其唤醒中断来在设备上启用唤醒功能。该控制的位置列在描述表中的设备条目里。只有启用了其唤醒功能的设备才能唤醒系统。OS 会跟踪唤醒设备所支持的电源状态,并将系统保持在一个仍可被唤醒的电源状态中(基于描述表中报告的能力)。

当系统处于睡眠或低功耗空闲状态,并且某个唤醒设备决定唤醒系统时,它会向核心逻辑发出信号。与该设备唤醒系统相对应的状态位会被置位,核心逻辑恢复系统运行。在 OS 再次运行之后,它通过运行控制方法(针对唤醒事件)或处理设备的 ISR(针对唤醒中断)来确定负责此次唤醒事件的设备。

  • 除了使用 ACPI 机制使特定设备能够唤醒系统之外,ACPI 平台还必须能够记录并向 OSPM 报告唤醒源。当系统从某些状态(例如 S4 状态)被唤醒时,它最初可能处于非 ACPI 模式。在这种情况下,当重新进入 ACPI 模式时,SCI 状态位可能已被清除。但是,平台仍必须尝试记录唤醒源,以供 OSPM 在稍后时刻获取。

  • 尽管上述描述说明了设备如何唤醒系统,但请注意,设备也可以在 S0 系统状态期间被置于低功耗状态,并且该设备可能会在 S0 状态下产生唤醒信号,如下面的示例所示。

3.4.5. 示例:调制解调器设备电源管理

为了说明这些电源管理方法在 ACPI 中如何工作,考虑一个集成调制解调器。(为便于本讨论,本示例进行了大幅简化。)调制解调器的电源状态定义如下(摘自调制解调器设备类电源管理规范):

D0

调制解调器控制器开启 电话接口开启 扬声器开启 可以挂机或摘机 可以等待应答

D1

调制解调器控制器处于低功耗模式(上下文由设备保留) 电话接口由电话线供电或处于低功耗模式 扬声器关闭 必须挂机

D2

与 D3 相同

D3

调制解调器控制器关闭(上下文丢失) 电话接口由电话线供电或关闭 扬声器关闭 挂机

调制解调器的电源策略定义如下:

D3 D0

COM 端口已打开

D0, D1 D3

COM 端口已关闭

D0 D1

调制解调器进入应答模式

D1 D0

应用程序请求拨号,或者电话在线调制解调器处于应答模式时响铃

调制解调器的唤醒策略非常简单:当电话响铃并且唤醒已启用时,唤醒系统。

基于该策略,调制解调器及其所连接的 COM 端口可以按图 3-2 所示在硬件中实现。这只是一个用于说明 ACPI 特性的示例。该示例并非旨在描述 OEM 应如何构建硬件。

../_images/Example_modem_and_com_port_hardware.png

图 3.2 调制解调器和 COM 端口硬件示例

注意

尽管上图中未显示,但每个离散部件都有一些隔离逻辑,以便在其电源被移除时将该部件隔离。隔离逻辑控制在 ACPI 差异化描述块中作为电源资源来实现,以便在电源平面按顺序关闭时对设备进行隔离。

3.4.5.1. 获取调制解调器能力

OS 在通过读取调制解调器在差异化定义块中的条目来枚举该调制解调器时,确定该调制解调器的能力。在此情况下,调制解调器的条目将报告:

该设备支持 D0、D1 和 D3:

  • D0 需要 PWR1 和 PWR2 作为电源资源,D1 需要 PWR1 作为电源资源(D3 隐含地不需要任何电源资源)

  • 为了唤醒系统,调制解调器不需要任何电源资源(这意味着它可以从 D0、D1 和 D3 唤醒系统)

用于设置电源状态和资源的控制方法

3.4.5.2. 设置调制解调器电源状态

当 OS 运行时(G0 状态),它根据为调制解调器定义的电源策略将调制解调器切换到不同的电源状态。

当应用程序打开 COM 端口时,OS 通过将调制解调器置于 D0 状态来打开它。然后,如果应用程序将调制解调器置于应答模式,OS 会将调制解调器置于 D1 状态以等待呼叫。为了完成这一断电转换,OSPM 首先运行调制解调器条目中提供的控制方法(_PS1),将设备置于 D1 状态。在本示例中,该控制方法置位 MDM_D1 信号,通知调制解调器控制器进入低功耗模式。随后 OSPM 检查调制解调器设备不再需要哪些电源资源。在这种情况下,不再需要 PWR2。然后它检查以确保系统中没有其他设备需要使用 PWR2 电源资源。如果该资源不再需要,OSPM 使用差异化定义块中与该电源资源关联的 _OFF 控制方法来关闭 PWR2 电源平面。该控制方法向核心芯片组发送适当的命令,以停止置位 PWR2_EN 线。

当某个设备被置于较低功耗状态时,OSPM 并不总是关闭电源资源。例如,假设 PWR1 电源平面还为一个活动的行式打印机(LPT)端口供电。假设用户终止了调制解调器应用程序,导致 COM 端口被关闭,从而导致调制解调器被关闭(D3 状态)。与往常一样,OSPM 通过运行调制解调器的控制方法将设备切换到 D3 电源状态来开始状态转换过程。该控制方法导致 MDM_D3 线被置位。请注意,这些寄存器可能并不在设备本身中。例如,控制方法可以读取控制 MDM_D3 的寄存器。现在调制解调器控制器关闭其所有主要功能,从而几乎不再从 PWR1 线上获取功率。OSPM 继续检查哪些电源资源不再需要。由于 LPT 端口仍处于活动状态,PWR1 仍在使用中。OSPM 不会关闭 PWR1 资源。由于 COM 端口已关闭,将发生同样的事件序列以将其置于 D3 状态,但由于 LPT 依赖关系,该电源资源不会被关闭。

3.4.5.3. 获取调制解调器电源状态

集成式调制解调器没有电池;该设备唯一的电源状态信息就是调制解调器的电源状态。为了确定调制解调器当前的电源状态(D0-D3),OSPM 会运行差异化定义块中调制解调器条目提供的控制方法(_PSC)。该控制方法从必要的寄存器中读取,以确定调制解调器的电源状态。

3.4.5.4. 唤醒系统

如调制解调器能力所示,该调制解调器可以从任何设备电源状态唤醒机器。在将系统置于睡眠或 LPI 状态之前,OS 会在应用程序请求能够唤醒系统的所有设备上启用唤醒。然后,它会选择仍然能够提供必要电源资源、以允许所有已启用唤醒的设备唤醒系统的最深睡眠或 LPI 状态。接下来,OS 将这些设备中的每一个置于适当的电源状态。在本例中,OS 将调制解调器置于 D3 状态,因为它支持从该状态唤醒。最后,OS 将系统置于睡眠或 LPI 状态。

通过调制解调器唤醒系统始于调制解调器的电话接口在检测到电话线路上的振铃时置位其振铃指示(RI)线路。该线路被路由到核心逻辑以生成唤醒事件。随后芯片组唤醒系统,硬件最终会将控制权交还给 OS(唤醒机制因睡眠状态或 LPI 的不同而不同)。在 OS 运行之后,它会将设备置于 D0 状态,并开始处理中断来自调制解调器的事件。

Prev
3.3. 设备电源管理
Next
3.5. 处理器电源管理