设备电源管理参考
驱动程序可将设备硬件划分为多个逻辑组件,以实现精细的电源管理。 一个组件有一组电源状态,可独立于同一设备中其他组件的电源状态进行管理。 在 F0 状态下,组件完全开启。 组件可能支持额外的低功耗状态 F1、F2 等。
设备的电源策略所有者通常是设备的功能驱动程序。 为启用组件级电源管理,该驱动程序会将设备注册到电源管理框架 (PoFx) 中。 通过注册设备,驱动程序将负责通知 PoFx 什么时候正在使用组件,什么时候组件处于空闲状态。 PoFx 可根据组件活动、延迟容忍度、预期空闲持续时间和唤醒要求等信息,为设备智能选择空闲状态。 通过在组件级别控制电源的使用情况,PoFx 可以降低电源要求,同时保持系统响应速度。 有关详细信息,请参阅组件级电源管理。
设备电源管理例程
这些例程由电源管理框架 (PoFx) 实现,以进行设备电源管理。 这些例程由作为设备电源策略所有者 (PPO) 的驱动程序调用。 通常,设备的功能驱动程序就是该设备的 PPO。
主题 | 说明 |
---|---|
PoFxActivateComponent | PoFxActivateComponent 例程会递增指定组件的激活引用计数。 |
PoFxCompleteDevicePowerNotRequired | PoFxCompleteDevicePowerNotRequired 例程会通知电源管理框架 (PoFx) 调用驱动程序已完成对驱动程序 DevicePowerNotRequiredCallback 回调例程的响应。 |
PoFxCompleteIdleCondition | PoFxCompleteIdleCondition 例程会通知电源管理框架 (PoFx),指定组件已完成对空闲状态的待定更改。 |
PoFxCompleteIdleState | PoFxCompleteIdleState 例程会通知电源管理框架 (PoFx),指定组件已完成对 Fx 状态的待定更改。 |
PoFxIdleComponent | PoFxIdleComponent 例程会递减指定组件的激活引用计数。 |
PoFxIssueComponentPerfStateChange | PoFxIssueComponentPerfStateChange 例程提交将设备组件置于特定性能状态的请求。 |
PoFxIssueComponentPerfStateChangeMultiple | PoFxIssueComponentPerfStateChangeMultiple 例程提交同时更改设备组件多个性能状态集的性能状态的请求。 |
PoFxNotifySurprisePowerOn | PoFxNotifySurprisePowerOn 例程会通知电源管理框架 (PoFx),某设备的开启是向其他设备供电的副作用。 |
PoFxPowerControl | PoFxPowerControl 例程向电源管理框架 (PoFx) 发送电源控制请求。 |
PoFxQueryCurrentComponentPerfState | PoFxQueryCurrentComponentPerfState 例程可检索组件性能状态集中的活动性能状态。 |
PoFxRegisterComponentPerfStates | PoFxRegisterComponentPerfStates 例程注册设备组件,以便由电源管理框架 (PoFx) 进行性能状态管理。 |
PoFxRegisterDevice | PoFxRegisterDevice 例程向电源管理框架 (PoFx) 注册设备。 |
PoFxReportDevicePoweredOn | PoFxReportDevicePoweredOn 例程会通知电源管理框架 (PoFx),设备已完成向 D0(完全开启)电源状态的转换请求。 |
PoFxSetComponentLatency | PoFxSetComponentLatency 例程指定指定组件从空闲状态过渡到活动状态时可容忍的最大延迟。 |
PoFxSetComponentResidency | PoFxSetComponentResidency 例程设置组件进入空闲状态后可能保持空闲状态的估计时间。 |
PoFxSetComponentWake | PoFxSetComponentWake 例程指示驱动程序是否在指定组件进入空闲状态时唤醒该组件。 |
PoFxSetDeviceIdleTimeout | PoFxSetDeviceIdleTimeout 例程指定了从设备的最后一个组件进入空闲状态到电源管理框架 (PoFx) 调用驱动程序的 DevicePowerNotRequiredCallback 回调例程之间的最小时间间隔。 |
PoFxStartDevicePowerManagement | PoFxStartDevicePowerManagement 例程完成设备在电源管理框架 (PoFx) 中的注册,并启动设备电源管理。 |
PoFxUnregisterDevice | PoFxUnregisterDevice 例程从电源管理框架 (PoFx) 中删除设备的注册。 |
设备电源管理回调
电源管理框架 (PoFx) 需要这些回调例程来实现设备电源管理。 作为设备电源策略所有者的驱动程序会执行这些回调例程。 PoFx 调用这些例程来查询和配置设备中组件的电源状态。
主题 | 说明 |
---|---|
ComponentActiveConditionCallback | ComponentActiveConditionCallback 回调例程会通知驱动程序,指定组件已完成从空闲状态到活动状态的转换。 |
ComponentIdleConditionCallback | ComponentIdleConditionCallback 回调例程会通知驱动程序,指定组件已完成从活动状态到空闲状态的转换。 |
ComponentIdleStateCallback | ComponentIdleStateCallback 回调例程会通知驱动程序指定组件的 Fx 电源状态即将发生变化。 |
ComponentPerfStateCallback | ComponentPerfStateCallback 回调例程会通知驱动程序其更改组件性能状态的请求已完成。 |
DevicePowerNotRequiredCallback | DevicePowerNotRequiredCallback 回调例程会通知设备驱动程序,设备无需保持 D0 电源状态。 |
DevicePowerRequiredCallback | DevicePowerRequiredCallback 回调例程会通知设备驱动程序,设备必须进入并保持 D0 电源状态。 |
PowerControlCallback | PowerControlCallback 会回调例程执行电源管理框架 (PoFx) 要求的电源控制操作。 |
设备电源管理结构
电源管理框架 (PoFx) 定义了这些结构,以支持设备电源管理。
主题 | 说明 |
---|---|
PO_FX_COMPONENT_V1 PO_FX_COMPONENT_V2 | PO_FX_COMPONENT 结构描述了设备中组件的电源状态属性。 |
PO_FX_COMPONENT_IDLE_STATE | PO_FX_COMPONENT_IDLE_STATE 结构指定设备中组件的 Fx 电源状态属性。 |
PO_FX_COMPONENT_PERF_INFO | PO_FX_COMPONENT_PERF_INFO 结构描述了设备中单个组件的所有性能状态集。 |
PO_FX_COMPONENT_PERF_SET | PO_FX_COMPONENT_PERF_SET 结构表示设备中单个组件的一组性能状态。 |
PO_FX_DEVICE_V1 PO_FX_DEVICE_V2PO_FX_DEVICE_V3 | PO_FX_DEVICE 结构向电源管理框架 (PoFx) 描述了设备的电源属性。 |
PO_FX_PERF_STATE | PO_FX_PERF_STATE 结构表示设备中单个组件的性能状态。 |
PO_FX_PERF_STATE_CHANGE | PO_FX_PERF_STATE_CHANGE 结构包含通过调用 PoFxIssueComponentPerfStateChange 或 PoFxIssueComponentPerfStateChangeMultiple 例程请求更改性能状态的信息。 |
设备电源管理枚举
电源管理框架 (PoFx) 定义了这些枚举,以支持设备电源管理。
主题 | 说明 |
---|---|
PO_FX_PERF_STATE_TYPE | PO_FX_PERF_STATE_TYPE 枚举包含描述 PO_FX_COMPONENT_PERF_SET 中性能状态类型的值。 |
PO_FX_PERF_STATE_UNIT | PO_FX_PERF_STATE_UNIT 枚举包含的值描述了由 PO_FX_COMPONENT_PERF_SET 中的性能状态控制的单元类型。 |
设备电源管理常量
PO_FX_FLAG_XXX 标志位
PO_FX_FLAG_XXX 常量是标志位,用于指示更改组件条件的请求是同步执行还是异步执行。
#define PO_FX_FLAG_BLOCKING 0x1
#define PO_FX_FLAG_ASYNC_ONLY 0x2
PO_FX_FLAG_XXX 常量
常量 | 说明 |
---|---|
PO_FX_FLAG_BLOCKING | 使条件更改同步。 如果设置了此标志,则请求条件更改的例程不会将控制权返回给调用驱动程序,直到组件硬件完成向新条件的转换。 只有当调用方运行在 IRQL < DISPATCH_LEVEL 时,才能使用此标志。 |
PO_FX_FLAG_ASYNC_ONLY | 使条件更改完全异步。 如果设置了此标志,调用驱动程序的回调例程将从请求条件更改的例程所在线程以外的线程调用。 因此,请求条件更改的例程总是会异步返回,而无需等待回调完成。 |
PO_FX_FLAG_XXX 备注
以下例程的 Flags 参数可设置为 PO_FX_FLAG_XXX 常量:
- PoFxActivateComponent
- PoFxIdleComponent
- PoFxIssueComponentPerfStateChange
- PoFxIssueComponentPerfStateChangeMultiple
PO_FX_FLAG_BLOCKING 和 PO_FX_FLAG_ASYNC_ONLY 标志位是互斥的。 调用方可以设置 Flags 参数中的一个或另一个标志位,但不能同时设置两个标志位。
PO_FX_FLAG_XXX 要求
版本 | 头文件 |
---|---|
从 Windows 8 开始支持。 | Wdm.h |
PO_FX_FLAG_PERF_XXX 标志位
PO_FX_FLAG_PERF_XXX常量是定义电源管理框架 (PoFx) 如何管理设备组件性能状态的标志位。
#define PO_FX_FLAG_PERF_PEP_OPTIONAL 0x1
#define PO_FX_FLAG_PERF_QUERY_ON_F0 0x2
#define PO_FX_FLAG_PERF_QUERY_ON_ALL_IDLE_STATES 0x4
常量 | Value | 说明 |
---|---|---|
PO_FX_FLAG_PERF_PEP_OPTIONAL | 1 (0x1) | 表示驱动程序可以在没有平台扩展插件 (PEP) 协助的情况下更改性能状态,或者表示驱动程序正在向 PoFx 注册性能状态且仅用于记录。 如果设置了此标志,倘若 PEP 不支持组件的性能状态,PoFxRegisterComponentPerfStates 调用仍将成功。 |
PO_FX_FLAG_PERF_QUERY_ON_F0 | 2 (0x2) | 对于某些设备,PEP 可能需要在组件空闲时将组件的性能状态集置入特定性能状态(称为名义性能状态)。 如果组件包含名义性能状态,则驱动程序会设置该标志,在这种情况下,当组件转换到 F0 时,PoFx 将查询 PEP 以确定当前的性能状态。 |
PO_FX_FLAG_PERF_QUERY_ON_ALL_IDLE_STATES | 4 (0x4) | 对于某些设备,当在空闲状态之间转换组件时,PEP 可能需要将组件的性能状态集置入特定性能状态(称为名义性能状态)。 如果该组件包含额定性能状态,则驱动程序会设置该标记,在这种情况下,当组件在空闲状态之间转换时,PoFx 将查询 PEP 以确定当前的性能状态。 |
PO_FX_FLAG_PERF_XXX 备注
PoFxRegisterComponentPerfStates 例程的 Flags 参数可设置为 PO_FX_FLAG_PERF_XXX 常量。
PO_FX_FLAG_PERF_XXX 要求
要求 | 版本 |
---|---|
从 Windows 10 开始支持。 | Wdm.h |