设备电源管理参考

驱动程序可以将设备硬件划分为多个逻辑组件,以实现精细的电源管理。 组件具有一组电源状态,可以独立于同一设备中其他组件的电源状态进行管理。 在 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_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_BLOCKINGPO_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 可能需要将组件的性能状态集置于某个性能状态, (在组件空闲时) 称为 名义性能状态 。 如果组件包含名义性能状态,驱动程序会设置此标志,在这种情况下,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