设备电源管理参考

驱动程序可将设备硬件划分为多个逻辑组件,以实现精细电源管理。 组件具有一组电源状态,可以独立于同一设备中其他组件的电源状态进行管理。 在 F0 状态中,组件已完全打开。 组件可能支持其他低功率状态 F1、F2 等。

设备的电源策略所有者通常是设备的功能驱动程序。 若要启用组件级电源管理,此驱动程序将设备注册到 PoFx (电源管理) 。 通过注册设备,驱动程序承担在组件被主动使用以及组件空闲时通知 PoFx 的责任。 PoFx 根据有关组件活动、延迟容错、预期的空闲持续时间和唤醒要求的信息,为设备做出智能空闲状态选择。 通过控制组件级别的电源使用情况,PoFx 可以降低电源需求,同时保留系统响应能力。 有关详细信息,请参阅 组件级电源管理

设备电源管理例程

这些例程由 Power Management Framework (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 例程通过 Power Management Framework (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_V1PO_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_V1PO_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 包含有关通过调用 PoFxIssueComponentPerfStateChangePoFxIssueComponentPerfStateChangeMultiple 例程请求的性能状态更改的信息。

设备电源管理枚举

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 常量:

PO_FX_FLAG_BLOCKING和PO_FX_FLAG_ASYNC_ONLY标志位是互斥的。 调用方可以在 Flags 参数中设置一个或另一个标志位,但不能同时设置这两个标志位。

PO_FX_FLAG_XXX要求

Version 标头
支持从 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
返回的常量 “值” 说明
PO_FX_FLAG_PERF_PEP_OPTIONAL 1 (0x1) 指示驱动程序无需平台扩展插件 (PEP) 的帮助即可更改性能状态,或者驱动程序仅出于日志记录目的向 PoFx 注册性能状态。 如果设置了此标志,如果 PEP 不支持组件的性能状态, 则 PoFxRegisterComponentPerfStates 调用仍将成功。
PO_FX_FLAG_PERF_QUERY_ON_F0 2 (0x2) 对于某些设备,PEP 可能需要将组件的性能状态设置为特定性能状态 (称为在组件空闲时) 性能状态。 如果组件包含名义性能状态,驱动程序将设置此标志,在这种情况下,PoFx 将查询 PEP,以确定组件转换为 F0 时的当前性能状态。
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