2.3. 设备电源状态定义
设备电源状态是特定设备的状态;因此,它们通常对用户不可见。例如,即使整个系统处于 Working 状态,某些设备也可能处于 Off 状态。
设备状态适用于任何总线上的任何设备。它们通常依据以下四个主要标准来定义:
功耗——设备使用多少电力。
设备上下文——硬件保留了设备的多少上下文。OS 负责恢复任何丢失的设备上下文(这可以通过重置设备来完成)。
设备驱动程序——设备驱动程序必须执行什么操作才能将设备恢复到完全开启状态。
恢复时间——将设备恢复到完全开启状态需要多长时间。
设备电源状态定义如下,尽管这些定义非常通用。许多设备并未定义全部四种电源状态。设备可能具备几种不同的低功耗模式,但如果这些模式之间没有用户可感知的差异,则只会使用最低功耗模式。本规范附录 A 中包含的设备类别电源管理规范描述了对于给定类型(类别)的设备,这些电源状态中定义了哪些状态,并定义了该设备类别中每种电源状态的具体细节。有关可用设备类别电源管理规范的列表,请参见附录 A:设备类别规范。
D3(关闭)
电源已从设备中被完全移除。在本规范及其他规范中,也称为 D3cold。进入此状态时,所有设备上下文都会丢失,因此 OS 软件会在重新上电时重新初始化该设备。由于所有设备上下文和电源都已丢失,处于此状态的设备不会对其地址线进行译码,且无法由软件枚举。处于此状态的设备具有最长的恢复时间。
D3hot
D3hot 状态的含义由各个设备类别定义。通常,D3hot 预期在不影响即插即用枚举的前提下尽可能节省电力。处于 D3hot 的设备必须具有足够的电力,以便软件仍可对其进行枚举。例如,PCI 配置空间访问及其内容必须像在较浅电源状态中那样工作。同样,ACPI 标识和配置对象也必须像在较浅电源状态中那样工作。除此之外,不支持任何设备功能,并且在设备转换回 D0 期间,需要驱动程序软件恢复任何丢失的上下文,或重新初始化设备。
处于此状态的设备可能具有较长的恢复时间。所有设备类别都定义了此状态。
注
对于同时支持 D3hot 和通过 _PR3 暴露给 OSPM 的 D3 的设备,设备软件/驱动程序必须始终假定 OSPM 将以 D3 为目标,并且必须假定所有设备上下文都会丢失,且设备将不再可被枚举。
D2
D2 设备状态的含义由各个设备类别定义。许多设备类别可能并不定义 D2。通常,D2 预期比 D1 或 D0 节省更多电力,并保留更少的设备上下文。处于 D2 的总线可能导致设备丢失某些上下文(例如,通过降低总线上的供电,从而迫使设备关闭其某些功能)。
D1
D1 设备状态的含义由各个设备类别定义。许多设备类别可能并不定义 D1。通常,D1 预期比 D2 节省更少电力,并保留更多设备上下文。
D0(完全开启)
假定此状态具有最高级别的功耗。设备完全处于活动和响应状态,并且预期会持续记住所有相关上下文。
为简化起见,这些电源状态之间的转换受到限制。允许在任意两个状态之间进行断电转换(从较高功率或较浅状态转换到较低功率或较深状态)。但是,上电转换(从较深状态到较浅状态)要求必须经过 D0;即,对于所有 x !=0,Dy 到 Dx<y 都是不允许的。
表 2.2 设备电源状态摘要
| 设备状态 | 功耗 | 保留的设备上下文 | 驱动程序恢复 |
|---|---|---|---|
| D0 - 完全开启 | 运行所需 | 全部 | 无 |
| D1 | D0>D1>D2> D3hot>D3 | >D2 | <D2 |
| D2 | D0>D1>D2> D3hot>D3 | <D1 | >D1 |
| D3hot | D0>D1>D2>D3hot>D3 | 可选 | 无 <-> 完全初始化并加载 |
| D3 - 关闭 | 0 | 无 | 完全初始化并加载 |
注
设备通常在给定状态内具有不同的电源模式。只要设备能够在软件无感知的情况下,在这些模式之间自动透明地切换,且不违反设备当前所处 Dx 状态的规则,设备就可以使用这些模式。会对性能产生不利影响的低功耗模式(换句话说,低速模式),或者对软件不透明的低功耗模式,不能由硬件自动完成;设备驱动程序必须发出命令以使用这些模式。
2.3.1. 设备性能状态
设备性能状态(Px 状态)是活动(D0)设备电源状态内的功耗和能力状态。性能状态允许 OSPM 在性能与节能之间进行权衡。当实现方式使这些状态调用不同的设备效率级别,而不是对性能和能耗进行线性缩放时,设备性能状态会产生最大的影响。由于性能状态转换发生在活动设备状态中,因此必须小心确保性能状态转换不会对系统产生不利影响。
设备性能状态在需要时按设备类别分别定义(更多信息请参见附录 A:设备类别规范)。