设备电源管理(DPM)通知

PEP 的 AcceptDeviceNotification 回调例程接收的每个设备电源管理(DPM)通知都附带一个通知参数,该参数指示通知的类型,以及指向包含指定通知类型信息的数据结构的数据参数。

在此调用中,Notification 参数设置为指示通知类型的PEP_DPM_XXX常量值。 Data 参数指向与此通知类型关联的PEP_XXX结构类型。

通知标识符 价值 关联结构
PEP_DPM_PREPARE_DEVICE 0x01 PEP_PREPARE_DEVICE
PEP_DPM_ABANDON_DEVICE 0x02 PEP_ABANDON_DEVICE
PEP_DPM_REGISTER_DEVICE 0x03 PEP_REGISTER_DEVICE_V2
PEP_DPM_UNREGISTER_DEVICE 0x04 PEP_UNREGISTER_DEVICE
PEP_DPM_DEVICE_POWER_STATE 0x05 PEP_DEVICE_POWER_STATE
PEP_DPM_COMPONENT_ACTIVE 0x07 PEP_COMPONENT_ACTIVE
PEP_DPM_WORK 0x0D PEP_WORK
PEP_DPM_POWER_CONTROL_REQUEST 0x0E PEP_POWER_CONTROL_REQUEST
PEP_DPM_POWER_CONTROL_COMPLETE 0x0F PEP_POWER_CONTROL_COMPLETE
PEP_DPM_SYSTEM_LATENCY_UPDATE 0x10 PEP_SYSTEM_LATENCY
PEP_DPM_DEVICE_STARTED 0x12 PEP_DEVICE_STARTED
PEP_DPM_NOTIFY_COMPONENT_IDLE_STATE 0x13 PEP_NOTIFY_COMPONENT_IDLE_STATE
PEP_DPM_REGISTER_DEBUGGER 0x15 PEP_REGISTER_DEBUGGER
PEP_DPM_LOW_POWER_EPOCH 0x18 PEP_LOW_POWER_EPOCH
PEP_DPM_REGISTER_CRASHDUMP_DEVICE 0x19 PEP_REGISTER_CRASHDUMP_DEVICE
PEP_DPM_DEVICE_IDLE_CONSTRAINTS 0x1A PEP_DEVICE_PLATFORM_CONSTRAINTS
PEP_DPM_COMPONENT_IDLE_CONSTRAINTS 0x1B PEP_COMPONENT_PLATFORM_CONSTRAINTS
PEP_DPM_QUERY_COMPONENT_PERF_CAPABILITIES 0x1C PEP_QUERY_COMPONENT_PERF_CAPABILITIES
PEP_DPM_QUERY_COMPONENT_PERF_SET 0x1D PEP_QUERY_COMPONENT_PERF_SET
PEP_DPM_QUERY_COMPONENT_PERF_SET_NAME 0x1E PEP_QUERY_COMPONENT_PERF_SET_NAME
PEP_DPM_QUERY_COMPONENT_PERF_STATES 0x1F PEP_QUERY_COMPONENT_PERF_STATES
PEP_DPM_REGISTER_COMPONENT_PERF_STATES 0x20 PEP_REGISTER_COMPONENT_PERF_STATES
PEP_DPM_REQUEST_COMPONENT_PERF_STATE 0x21 PEP_REQUEST_COMPONENT_PERF_STATE
PEP_DPM_QUERY_CURRENT_COMPONENT_PERF_STATE 0x22 PEP_QUERY_CURRENT_COMPONENT_PERF_STATE
PEP_DPM_QUERY_DEBUGGER_TRANSITION_REQUIREMENTS 0x23 PEP_DEBUGGER_TRANSITION_REQUIREMENTS
PEP_DPM_QUERY_SOC_SUBSYSTEM_COUNT 0x24 PEP_QUERY_SOC_SUBSYSTEM_COUNT
PEP_DPM_QUERY_SOC_SUBSYSTEM 0x25 PEP_QUERY_SOC_SUBSYSTEM
PEP_DPM_RESET_SOC_SUBSYSTEM_ACCOUNTING 0x26 PEP_RESET_SOC_SUBSYSTEM_ACCOUNTING
PEP_DPM_QUERY_SOC_SUBSYSTEM_BLOCKING_TIME 0x27 PEP_QUERY_SOC_SUBSYSTEM_BLOCKING_TIME
PEP_DPM_QUERY_SOC_SUBSYSTEM_METADATA 0x28 PEP_QUERY_SOC_SUBSYSTEM_METADATA

通知标识符

AcceptDeviceNotification 回调例程使用以下 DPM 通知 ID。

PEP_DPM_PREPARE_DEVICE

通知(PEP_DPM_PREPARE_DEVICE)

此值为 PEP_DPM_PREPARE_DEVICE。

数据(PEP_DPM_PREPARE_DEVICE)

指向 PEP_PREPARE_DEVICE 结构的指针。 告知拥有指定设备的 PEP,将设备配置为在 D0(工作)设备电源状态下运行。

在操作系统首次启动设备的驱动程序堆栈之前,Windows 电源管理框架 (PoFx) 会将此通知发送给 PEP。 此通知允许 PEP 打开运行设备所需的任何外部电源或时钟资源。

若要发送PEP_DPM_PREPARE_DEVICE通知,操作系统将调用PEP的AcceptDeviceNotification回调函数。 在此调用中,通知参数值PEP_DPM_PREPARE_DEVICE,数据参数指向PEP_PREPARE_DEVICE结构。 在进入时,此结构的 DeviceId 成员是用于唯一标识设备的设备标识字符串。 在返回之前,PEP 将此结构的 DeviceAccepted 成员设置为 TRUE,以声明设备的所有权,或设置为 FALSE 以指示它不拥有该设备。

负责设备电源管理的 PEP 需要管理设备外部的电源和时钟资源,这些资源是设备运行所必需的。 此 PEP 启用对设备的时钟信号和电源,以响应 PEP_DPM_PREPARE_DEVICE 通知,并在响应 PEP_DPM_ABANDON_DEVICE 通知时,从设备中移除时钟信号和电源。

下表显示了当此操作系统向 PEP 发送 PEP_DPM_PREPARE_DEVICE 通知时生效的前提条件,以及 PEP 处理其所拥有设备的该通知后必须生效的后置条件。

前提 条件 Postconditions
设备可以处于任何电源状态。 如果 PEP 声明设备的所有权,则必须打开设备及其所有组件,并启用设备的时钟。
当电源管理器试图为这些设备找到 PEP 所有者时,PEP 可以接收多个设备的 PEP_DPM_PREPARE_DEVICE 通知。 对于 PEP 不拥有的所有设备,PEP 应将PEP_PREPARE_DEVICE结构的 DeviceAccepted 成员设置为 FALSE。

不会为核心设备发送PEP_DPM_PREPARE_DEVICE通知。

对于PEP_DPM_PREPARE_DEVICE通知,AcceptDeviceNotification 例程始终在 IRQL = PASSIVE_LEVEL调用。

PEP_DPM_ABANDON_DEVICE

通知(PEP_DPM_ABANDON_DEVICE)

值 PEP_DPM_ABANDON_DEVICE。

数据(PEP_DPM_ABANDON_DEVICE)

指向 PEP_ABANDON_DEVICE 结构的指针。 通知 PEP,操作系统不再使用指定的设备。

在作系统删除设备的驱动程序堆栈后,Windows 电源管理框架(PoFx)将此通知发送到 PEP。 此通知允许 PEP 关闭用于操作设备的任何外部电源或时钟资源,并从未来的决策过程中移除此设备。 如果设备稍后必须再次启动,PEP 将首先收到 PEP_DPM_PREPARE_DEVICE 通知。

若要发送 PEP_DPM_ABANDON_DEVICE 通知,操作系统调用 PEP 的 AcceptDeviceNotification 回调例程。 在此调用中,通知参数值PEP_DPM_ABANDON_DEVICE,数据参数指向PEP_ABANDON_DEVICE结构。 在进入时,此结构的 DeviceId 成员是唯一标识设备的设备标识字符串。 在返回之前,PEP 将此结构的 DeviceAccepted 成员设置为 TRUE,以声明设备的所有权,或设置为 FALSE 以指示它不拥有该设备。

拥有设备的电源管理的 PEP 负责管理设备外部以及运行设备所需的电源和时钟资源。

下表显示了当此操作系统向 PEP 发送PEP_DPM_ABANDON_DEVICE通知时生效的前提条件,以及 PEP 在为其拥有的设备处理此通知后必须生效的后置条件。

前提 条件 Postconditions
PEP 已收到设备的 PEP_DPM_PREPARE_DEVICE 通知,并已接受设备的控制权。
如果 PEP 已收到设备的 PEP_DPM_REGISTER_DEVICE 通知并接受设备注册,则随后会收到该设备的 PEP_DPM_UNREGISTER_DEVICE 通知。
必须释放为响应PEP_DPM_PREPARE_DEVICE通知而分配的任何资源。
对于PEP_DPM_PREPARE_DEVICE通知,AcceptDeviceNotification 例程始终在 IRQL = PASSIVE_LEVEL调用。

PEP_DPM_REGISTER_DEVICE

通知(PEP_DPM_REGISTER_DEVICE)

值 PEP_DPM_REGISTER_DEVICE。

数据(PEP_DPM_REGISTER_DEVICE)

指向 PEP_REGISTER_DEVICE_V2 结构的指针。

通知 PEP,指定设备的驱动程序堆栈已注册到 Windows 电源管理框架(PoFx)。

当设备的驱动程序堆栈调用 PoFxRegisterDevice 例程来注册设备时,PoFx 会发送此通知。 此通知允许 PEP 将设备的注册信息复制到 PEP 的内部存储,供以后参考。

若要发送PEP_DPM_REGISTER_DEVICE通知,操作系统调用PEP的AcceptDeviceNotification回调例程。 在此调用中,通知参数值PEP_DPM_REGISTER_DEVICE,数据参数指向包含设备内核句柄和其他注册信息的PEP_REGISTER_DEVICE_V2结构。 在进入时,此结构的 DeviceId 成员是唯一标识设备的设备标识字符串。 在返回之前,PEP 将此结构的 DeviceAccepted 成员设置为 TRUE,以声明设备的所有权,或设置为 FALSE 以指示它不拥有该设备。 有关此结构的其他成员的信息,请参阅PEP_REGISTER_DEVICE_V2。

下表显示了此操作系统向 PEP 发送 PEP_DPM_REGISTER_DEVICE 通知时生效的前提条件,以及 PEP 处理其拥有设备的此通知后必须生效的后置条件。

前提 条件 Postconditions
PEP 已收到关于其所拥有设备的 PEP_DPM_PREPARE_DEVICE 通知。 PEP 已准备好接收与此设备关联的其他设备电源管理(DPM)通知。

对于 PEP_DPM_REGISTER_DEVICE 通知,AcceptDeviceNotification 例程始终在 IRQL = PASSIVE_LEVEL 调用。

PEP_DPM_UNREGISTER_DEVICE

通知(PEP_DPM_UNREGISTER_DEVICE)

值PEP_DPM_UNREGISTER_DEVICE。

数据(PEP_DPM_UNREGISTER_DEVICE)

指向 PEP_UNREGISTER_DEVICE 结构的指针。

告知持有指定设备的 PEP,该设备的驱动程序堆栈已从 Windows 电源管理框架 (PoFx) 中撤销注册。

PoFx 发送此通知,告知 PEP,在上一PEP_DPM_REGISTER_DEVICE通知期间为设备存储的 PEP 的任何注册信息不再有效。 作为响应,PEP 可以清理用于此设备的电源管理的任何内部状态。

若要发送 PEP_DPM_UNREGISTER_DEVICE 通知,操作系统会调用 PEP 的 AcceptDeviceNotification 回调例程。 在此调用中,Notification参数值为PEP_DPM_UNREGISTER_DEVICE,Data参数指向一个PEP_UNREGISTER_DEVICE结构。 此结构包含 PEP 为设备对之前的 PEP_DPM_REGISTER_DEVICE 通知作出响应而创建的句柄。

下表显示了此操作系统向 PEP 发送 PEP_DPM_UNREGISTER_DEVICE 通知时生效的前提条件,以及 PEP 为其拥有的设备处理该通知后必须生效的后置条件。

前提 条件 Postconditions
如果 PEP 已收到设备的PEP_DPM_REGISTER_DEVICE通知,并且已接受设备注册。
PEP 可以接收与此设备关联的任何设备电源管理(DPM)通知。
PEP 可以报告与此设备关联的“工作”。
PEP 不再可以接收与此设备关联的任何设备电源管理(DPM)通知,PEP_DPM_ABANDON_DEVICE除外。
PEP 无法报告与此设备关联的“工作”。

对于 PEP_DPM_UNREGISTER_DEVICE 通知,AcceptDeviceNotification 例程始终在 IRQL = PASSIVE_LEVEL 调用。

PEP_DPM_DEVICE_POWER_STATE

通知(PEP_DPM_DEVICE_POWER_STATE)

值 PEP_DPM_DEVICE_POWER_STATE。

数据(PEP_DPM_DEVICE_POWER_STATE)

指向 PEP_DEVICE_POWER_STATE 结构的指针。

每当设备驱动程序堆栈请求更改为新的 Dx 电源状态或者之前请求的转换到 Dx 电源状态完成时,都会发送到 PEP。

PEP 调用 RequestWorker 例程以请求工作项后,PoFx 会通过发送 PEP PEP_DPM_DEVICE_POWER_STATE 通知来响应。 但是,在处理工作项所需的资源(即工作线程)可用之前,不会发送此通知。 通过这种方式,PoFx 保证 PEP 在通知期间传递给 PoFx 的工作请求绝不会因资源不足而失败。

若要发送PEP_DPM_DEVICE_POWER_STATE通知,操作系统调用PEP的AcceptDeviceNotification回调函数。 在此调用中,通知参数值PEP_DPM_DEVICE_POWER_STATE,数据参数指向PEP_DEVICE_POWER_STATE结构。 进入时,PEP 应假定此结构的内容未初始化。 若要处理此通知,PEP 应将 WorkInformation 成员设置为指向由 PEP 分配的 PEP_WORK_INFORMATION 结构,该结构描述所请求的工作内容。 此外,PEP 应将 PEP_WORK 结构的 NeedWork 成员设置为 TRUE,以确保 PEP 已处理 PEP_DEVICE_POWER_STATE 通知,并且 WorkInformation 成员指向有效的 PEP_WORK_INFORMATION 结构。 如果 PEP 无法处理通知或者无法分配 PEP_WORK_INFORMATION 结构体,PEP 应将 WorkInformation 成员设置为 NULL,并将 NeedWork 成员设置为 FALSE。

对于PEP_DPM_DEVICE_POWER_STATE通知,AcceptDeviceNotification 例程始终在 IRQL = PASSIVE_LEVEL调用。

PEP_DPM_组件_激活

通知(PEP_DPM_COMPONENT_ACTIVE)

值PEP_DPM_COMPONENT_ACTIVE。

数据(PEP_DPM_COMPONENT_ACTIVE)

指向 标识组件的PEP_COMPONENT_ACTIVE 结构的指针,该结构指示此组件是转换为活动条件还是向空闲条件转换。

通知 PEP 组件需要进行状态转换,从空闲状态到活动状态或从活动状态到空闲状态。

Windows 电源管理框架 (PoFx) 会在转换待定到活动状态或空闲状态时发送此通知。

若要发送PEP_DPM_COMPONENT_ACTIVE通知,PoFx 调用 PEP 的 AcceptDeviceNotification 回调例程。 在此调用中,通知参数值PEP_DPM_COMPONENT_ACTIVE,数据参数指向PEP_COMPONENT_ACTIVE结构。

可访问的组件处于活动状态。 无法访问的组件处于空闲状态。 处于活动状态的组件始终处于 F0 组件电源状态。 组件在进入空闲条件之前无法离开 F0。 处于空闲状态的组件可能处于 F0 或处于低功率 Fx 状态。 组件的活动/空闲条件是驱动程序确定组件是否可访问的唯一可靠方法。 处于 F0 但处于空闲状态的组件可能即将切换到低功率 Fx 状态。

当活动组件准备好进入空闲条件时,转换将立即发生。 在处理 PEP_DPM_COMPONENT_ACTIVE 通知时,PEP 可能会请求将组件从 F0 状态转换为低功耗的 Fx 状态。

如果组件处于低功率 Fx 状态,当PEP_DPM_COMPONENT_ACTIVE通知请求从空闲条件转换到活动条件时,PEP 必须先将组件切换到 F0,然后组件才能进入活动条件。 在从 PEP_DPM_COMPONENT_ACTIVE 通知的 AcceptDeviceNotification 回调返回后,PEP 可能需要异步完成准备组件以切换到活动状态。 在组件完全配置为在活动条件下运行后,PEP 必须调用 RequestWorker 例程,然后通过在PEP_WORK_INFORMATION结构中设置 WorkType = PepWorkActiveComplete 来处理生成的PEP_DPM_WORK通知。

如果 PEP 收到一个处于 F0 状态并已完全配置为在活动条件下运行的组件的 PEP_DPM_COMPONENT_ACTIVE 通知,则 PEP 可能能够同步完成此通知处理。 如果支持通知的“快速路径”处理,则此通知PEP_COMPONENT_ACTIVE结构的 WorkInformation 成员包含指向PEP_WORK_INFORMATION结构的指针,PEP 可以将此结构的 WorkType 成员设置为 PepWorkActiveComplete 以完成转换。 但是,如果 WorkInformation = NULL,则没有可用的“快速路径”,PEP 必须通过调用 RequestWorker 异步完成转换,如前一段所述。

有关活动条件和空闲条件的详细信息,请参阅 Component-Level 电源管理

对于 PEP_DPM_COMPONENT_ACTIVE 通知,将在 IRQL <= DISPATCH_LEVEL 调用 AcceptDeviceNotification 例程。

PEP_DPM_WORK

通知(PEP_DPM_WORK)

该值为 PEP_DPM_WORK。

数据(PEP_DPM_WORK)

指向 PEP_WORK 结构的指针。

每次 PEP 调用 RequestWorker 例程以请求来自 Windows 电源管理框架(PoFx)的工作项时,该项被发送到 PEP。

PEP 调用 RequestWorker 例程以请求工作项后,PoFx 会通过发送 PEP PEP_DPM_WORK 通知来响应。 但是,在处理工作项所需的资源(即工作线程)可用之前,不会发送此通知。 通过这种方式,PoFx 保证 PEP 在通知期间传递给 PoFx 的工作请求绝不会因资源不足而失败。

若要发送 PEP_DPM_WORK 通知,操作系统会调用 PEP 的 AcceptDeviceNotification 回调函数例程。 在此调用中,通知参数值PEP_DPM_WORK,数据参数指向PEP_WORK结构。 进入时,PEP 应假定此结构的内容未初始化。 若要处理此通知,PEP 应将 WorkInformation 成员设置为指向由 PEP 分配的 PEP_WORK_INFORMATION 结构,该结构描述所请求的工作内容。 此外,PEP 应将 PEP_WORK 结构的 NeedWork 成员设置为 TRUE,以确认 PEP 已处理 PEP_DPM_WORK 通知,并且 WorkInformation 成员指向有效的 PEP_WORK_INFORMATION 结构。 如果 PEP 无法处理通知或者无法分配 PEP_WORK_INFORMATION 结构体,PEP 应将 WorkInformation 成员设置为 NULL,并将 NeedWork 成员设置为 FALSE。

对于PEP_DPM_WORK通知,在 IRQL = PASSIVE_LEVEL始终调用 AcceptDeviceNotification 例程。

PEP_DPM_POWER_CONTROL_REQUEST

通知(PEP_DPM_POWER_CONTROL_REQUEST)

PEP_DPM_POWER_CONTROL_REQUEST的值。

数据(PEP_DPM_POWER_CONTROL_REQUEST)

指向 PEP_POWER_CONTROL_REQUEST 结构的指针。

通知 PEP 驱动程序已调用 PoFxPowerControl API,以便将控制代码直接发送到 PEP。

当驱动程序调用 PoFxPowerControl API 以将控制代码直接发送到 PEP 时,Windows 电源管理框架(PoFx)会将此通知发送到 PEP。 在这种情况下,通知数据指针指向PEP_POWER_CONTROL_REQUEST结构。

电源控制请求及其语义在 PEP 编写器和设备类所有者之间定义。 通常,此类接口适用于未在通用电源管理框架中捕获的设备类特定通信。 例如,UART 控制器可能会将波特率信息传达给 PEP,以修改某些平台时钟轨/分隔线,此类通信可能会利用电源控制请求。

![注意]PEP 只能在收到PEP_DPM_DEVICE_STARTED通知或PEP_DPM_POWER_CONTROL_REQUEST通知后请求向设备发送控制代码。

对于 PEP_DPM_POWER_CONTROL_REQUEST 通知,在 IRQL <= DISPATCH_LEVEL 处调用 AcceptDeviceNotification 例程。

PEP_DPM_POWER_CONTROL_COMPLETE

通知(PEP_DPM_POWER_CONTROL_COMPLETE)

数值PEP_DPM_POWER_CONTROL_COMPLETE。

数据(PEP_DPM_POWER_CONTROL_COMPLETE)

指向 PEP_POWER_CONTROL_COMPLETE 结构的指针。

通知 PEP 驱动程序已完成由 PEP 之前发布的电源控制请求。

当驱动程序完成 PEP 之前发出的电源控制请求时,Windows 电源管理框架 (PoFx) 会将此通知发送到 PEP。

![注意]如果 PEP 未发出任何电源控制请求,则 PEP 可以忽略此通知。

对于 PEP_DPM_POWER_CONTROL_COMPLETE 通知,在 IRQL <= DISPATCH_LEVEL 时调用 AcceptDeviceNotification 例程。

PEP_DPM_系统延迟更新

通知(PEP_DPM_SYSTEM_LATENCY_UPDATE)

值为 PEP_DPM_SYSTEM_LATENCY_UPDATE。

数据(PEP_DPM_SYSTEM_LATENCY_UPDATE)

指向 PEP_SYSTEM_LATENCY 结构的指针。

通知 PEP 操作系统已更新整体系统延迟容忍度。

当 OS 更新整个系统延迟容错时,Windows 电源管理框架(PoFx)会发送此通知。

在 PoFx 的早期版本中,PEP 使用此通知进行处理器和平台空闲状态选择。 使用最新的 PEP 接口时,选择过程完全由 OS 处理,因此此通知不再有用。 此处包含它是为了保证内容完整性,PEP 应忽略这一点。

若要发送 PEP_DPM_SYSTEM_LATENCY_UPDATE 通知,PoFx 会调用 PEP 的 AcceptDeviceNotification 回调例程。 对于此通知,在 IRQL <= DISPATCH_LEVEL 调用 AcceptDeviceNotification 例程。

PEP_DPM_DEVICE_STARTED

通知(PEP_DPM_DEVICE_STARTED)

值 PEP_DPM_DEVICE_STARTED。

数据(PEP_DPM_DEVICE_STARTED)

指向 PEP_DEVICE_STARTED 结构的指针。

设备启动后会通知 PEP,以便可以接收电源控制事务。

设备堆栈以两个步骤向操作系统注册,以实现运行时的电源管理。 驱动程序首先调用 PoFxRegisterDevice,以提供有关组件数、其空闲状态和相应属性的信息。 为了响应此调用,PEP 会收到PEP_DPM_REGISTER_DEVICE通知。

注册成功后,驱动程序有机会初始化其组件(即设置活动、更新延迟要求、更新预期的空闲驻留等)。 驱动程序完成任何初始化任务后,它会通过调用 PoFxStartDevicePowerManagement 通知电源管理器。 作为响应,PEP 将收到 PEP_DPM_DEVICE_STARTED 通知。 此时,设备被视为已完全启用了运行时电源管理功能。

因此,PEP 无法向驱动程序发出任何电源控制请求,除非它首先收到PEP_DPM_DEVICE_STARTED通知或PEP_DPM_POWER_CONTROL_REQUEST通知。

注释

如果 PEP 未发出任何电源控制请求,则 PEP 可以忽略此通知。

对于PEP_DPM_DEVICE_STARTED通知,在 IRQL <= DISPATCH_LEVEL 调用 AcceptDeviceNotification 例程。

PEP_DPM_NOTIFY_COMPONENT_IDLE_STATE

通知(PEP_DPM_NOTIFY_COMPONENT_IDLE_STATE)

值PEP_DPM_NOTIFY_COMPONENT_IDLE_STATE。

数据(PEP_DPM_NOTIFY_COMPONENT_IDLE_STATE)

指向 PEP_NOTIFY_COMPONENT_IDLE_STATE 结构的指针。

当操作系统为给定组件发出空闲状态转换的通知时,会将其发送到 PEP。

当 OS 为给定组件发出空闲状态转换时,Windows 电源管理框架(PoFx)会发送此通知。

重要

PEP 必须处理此通知。

对于每个空闲状态转换,PEP 会在驱动程序被通知的之前和之后分别收到通知。 PEP 检查 PEP_NOTIFY_COMPONENT_IDLE_STATE 结构中的 DriverNotified 成员,以区分预通知和后通知。 在通知后状态,DriverNotified 成员将被设为 TRUE。

过渡到 F0 时,通常使用预通知。 在这种情况下,PEP 可能需要重新启用时钟或电源资源,以便在驱动程序处理 F0 通知时,硬件可用。 因此,从 F0 转换为更深层空闲状态时,通常会使用通知后通知。 驱动程序处理空闲状态通知后,PEP 可以安全地关闭时钟和电源资源。

如果作花费大量时间或者 IRQL 太高而无法同步完成转换,则处理给定组件的空闲状态转换可能需要异步处理。 因此,PEP 可以通过将 Completed 成员分别设置为 TRUE 或 FALSE 来同步或异步完成此通知。

如果通知是异步完成的,PEP 将通过请求辅助角色(请参阅 RequestWorker)并在生成的PEP_DPM_WORK通知中使用 PepWorkCompleteIdleState 的工作类型填写所提供的工作信息结构,以通知作系统完成。

若要发送PEP_DPM_NOTIFY_COMPONENT_IDLE_STATE通知,PoFx 调用 PEP 的 AcceptDeviceNotification 回调例程。 此例程在 IRQL <= DISPATCH_LEVEL调用。

PEP_DPM_REGISTER_DEBUGGER

通知(PEP_DPM_REGISTER_DEBUGGER)

值PEP_DPM_REGISTER_DEBUGGER。

数据(PEP_DPM_REGISTER_DEBUGGER)

指向 PEP_REGISTER_DEBUGGER 结构的指针。

通知 PEP 已注册的设备可用作调试端口。

Windows 电源管理框架(PoFx)发送此通知,以通知 PEP 已注册的设备可用作调试端口。

对于 PEP_DPM_REGISTER_DEBUGGER 通知,在 IRQL <= DISPATCH_LEVEL 调用 AcceptDeviceNotification 函数。

PEP_DPM_LOW_POWER_EPOCH

通知(PEP_DPM_LOW_POWER_EPOCH)

值PEP_DPM_LOW_POWER_EPOCH。

数据(PEP_DPM_LOW_POWER_EPOCH)

指向 PEP_LOW_POWER_EPOCH 结构的指针。

此通知已弃用。

PEP_DPM_REGISTER_CRASHDUMP_DEVICE

通知(PEP_DPM_REGISTER_CRASHDUMP_DEVICE)

值 PEP_DPM_REGISTER_CRASHDUMP_DEVICE。

数据(PEP_DPM_REGISTER_CRASHDUMP_DEVICE)

指向 PEP_REGISTER_CRASHDUMP_DEVICE 结构的指针。

当设备注册为故障转储处理程序时,Windows 电源管理框架(PoFx)将发送此通知。

当系统遇到致命错误时,生成内存转储(故障转储)的能力对于确定崩溃的原因非常有用。 默认情况下,当系统遇到错误检查时,Windows 将生成崩溃转储。 在这种情况下,系统处于一个非常受限的操作环境中,且中断被禁用,系统IRQL处于HIGH_LEVEL。

由于在故障发生时,涉及将故障转储写入磁盘的设备(即存储控制器、PCI 控制器等)可能会关闭,因此 OS 必须调用 PEP 才能在设备上开机。 因此,OS 从 PEP 请求故障转储堆栈上每个设备的回调(PowerOnDumpDeviceCallback),并在生成转储文件时调用回调。

鉴于发生崩溃时的受限环境,PEP 提供的回调不得访问分页代码、被任何事件阻塞或调用可能导致同样结果的任何代码。 此外,启动任何所需资源的过程不能依赖于中断。 因此,如果 PEP 需要等待启用各种资源,可能不得不改为轮询。 如果 PEP 无法在这些约束下启动设备,则它不应处理通知或者不提供回调例程。

若要发送 PEP_DPM_REGISTER_CRASHDUMP_DEVICE 通知,PoFx 调用 PEP 的 AcceptDeviceNotification 回调例程。 对于此通知,在 IRQL <= HIGH_LEVEL 调用 AcceptDeviceNotification 例程。

PEP_DPM_DEVICE_IDLE_CONSTRAINTS

通知(PEP_DPM_DEVICE_IDLE_CONSTRAINTS)

数值 PEP_DPM_DEVICE_IDLE_CONSTRAINTS。

数据(PEP_DPM_DEVICE_IDLE_CONSTRAINTS)

指向 PEP_DEVICE_PLATFORM_CONSTRAINTS 结构的指针。 发送到 PEP 以查询设备 D 状态与平台空闲状态之间的依赖关系。

Windows 电源管理框架(PoFx)将此通知发送到 PEP,以查询设备 D 状态与平台空闲状态之间的依赖关系。 PEP 使用此通知反馈设备仍可进入的最轻的 D 状态,并让其进入各个平台的空闲状态。 在进入关联的平台空闲状态之前,OS 将保证设备处于最低 D 状态。 如果平台空闲状态不依赖于此设备处于任何 D 状态,PEP 应指定 PowerDeviceD0 的最低 D 状态。 如果没有平台空闲状态依赖于此设备处于特定的 D 状态,则可以忽略此通知。

此通知在PEP收到 PEP_NOTIFY_PPM_QUERY_PLATFORM_STATES 通知后才发送到每个设备。

若要发送PEP_DPM_DEVICE_IDLE_CONSTRAINTS通知,PoFx 调用 PEP 的 AcceptDeviceNotification 回调例程。 在此调用中,Notification 参数值为 PEP_DPM_DEVICE_IDLE_CONSTRAINTS,而 Data 参数指向 PEP_DEVICE_PLATFORM_CONSTRAINTS 结构。

对于PEP_DPM_DEVICE_IDLE_CONSTRAINTS通知,始终在IRQL = DISPATCH_LEVEL 调用“AcceptDeviceNotification”例程。

PEP_DPM_COMPONENT_IDLE_CONSTRAINTS

通知(PEP_DPM_COMPONENT_IDLE_CONSTRAINTS)

值PEP_DPM_COMPONENT_IDLE_CONSTRAINTS。

数据(PEP_DPM_COMPONENT_IDLE_CONSTRAINTS)

指向 PEP_COMPONENT_PLATFORM_CONSTRAINTS 结构的指针。

发送到 PEP 以查询组件 F 状态与平台空闲状态之间的依赖关系。

Windows 电源管理框架 (PoFx) 将此通知发送到 PEP,以查询组件 F 状态与平台空闲状态之间的依赖关系。 PEP 使用此通知来返回组件仍然可以保持的最轻 F 状态,并进入相应平台的空闲状态。 在进入关联的平台空闲状态之前,OS 将保证组件处于最小 F 状态。 如果平台空闲状态不依赖于此组件处于任何 F 状态,PEP 应指定最小 F 状态 0。 如果没有平台空闲状态依赖于此组件处于特定的 F 状态,则可以忽略此通知。

设备空闲约束深度超过 D0 的情况比设备上组件的空闲状态更具约束性。 对于给定的平台空闲状态索引,如果设备指定了设备空闲约束,则忽略与设备关联的所有组件的相应组件空闲约束。

在 PEP 收到PEP_NOTIFY_PPM_QUERY_PLATFORM_STATES通知后,此通知将发送到每台设备上的每个组件。

若要发送PEP_DPM_COMPONENT_IDLE_CONSTRAINTS通知,PoFx 调用 PEP 的 AcceptDeviceNotification 回调例程。 AcceptDeviceNotification 例程始终在 IRQL = DISPATCH_LEVEL 时被调用。

PEP_DPM_QUERY_COMPONENT_PERF_CAPABILITIES (组件性能能力查询)

通知(PEP_DPM_QUERY_COMPONENT_PERF_CAPABILITIES)

值PEP_DPM_QUERY_COMPONENT_PERF_CAPABILITIES。

数据(PEP_DPM_QUERY_COMPONENT_PERF_CAPABILITIES)

指向 PEP_QUERY_COMPONENT_PERF_CAPABILITIES 结构的指针。

通知 PEP,它正在查询为组件定义的性能状态(P 状态)集的数量。

若要发送PEP_DPM_QUERY_COMPONENT_PERF_CAPABILITIES通知,PoFx 调用 PEP 的 AcceptDeviceNotification 回调例程。 在此调用中,通知参数的值为PEP_DPM_QUERY_COMPONENT_PERF_CAPABILITIES,数据参数指向PEP_QUERY_COMPONENT_PERF_CAPABILITIES结构。

对于 PEP_DPM_QUERY_COMPONENT_PERF_CAPABILITIES 通知,AcceptDeviceNotification 例程始终在 IRQL = PASSIVE_LEVEL 调用。

PEP_DPM_QUERY_COMPONENT_PERF_SET

通知(PEP_DPM_QUERY_COMPONENT_PERF_SET)

值PEP_DPM_QUERY_COMPONENT_PERF_SET。

数据(PEP_DPM_QUERY_COMPONENT_PERF_SET)

指向 PEP_QUERY_COMPONENT_PERF_SET 结构的指针。

通知 PEP,正在查询它以获取有关组件一组性能状态值(P 状态集)的信息。

若要发送PEP_DPM_QUERY_COMPONENT_PERF_SET通知,PoFx 调用 PEP 的 AcceptDeviceNotification 回调例程。 在此调用中,通知参数值PEP_DPM_QUERY_COMPONENT_PERF_SET,数据参数指向PEP_QUERY_COMPONENT_PERF_SET结构。

对于 PEP_DPM_QUERY_COMPONENT_PERF_SET 通知,AcceptDeviceNotification 例程始终在 IRQL = PASSIVE_LEVEL 调用。

PEP_DPM_QUERY_COMPONENT_PERF_SET_NAME

通知(OPEP_DPM_QUERY_COMPONENT_PERF_SET_NAME)

值是PEP_DPM_QUERY_COMPONENT_PERF_SET_NAME。

数据(OPEP_DPM_QUERY_COMPONENT_PERF_SET_NAME)

指向 PEP_QUERY_COMPONENT_PERF_SET_NAME 结构的指针。

通知 PEP,正在查询其关于组件的性能状态值(P 状态集)信息。

若要发送PEP_DPM_QUERY_COMPONENT_PERF_SET_NAME通知,PoFx 调用 PEP 的 AcceptDeviceNotification 回调例程。 在此调用中,通知参数值PEP_DPM_QUERY_COMPONENT_PERF_SET_NAME,数据参数指向PEP_QUERY_COMPONENT_PERF_SET_NAME结构。

对于 PEP_DPM_QUERY_COMPONENT_PERF_SET_NAME 通知,AcceptDeviceNotification 例程始终在 IRQL = PASSIVE_LEVEL 调用。

PEP_DPM_QUERY_COMPONENT_PERF_STATES

通知(PEP_DPM_QUERY_COMPONENT_PERF_STATES)

数值PEP_DPM_QUERY_COMPONENT_PERF_STATES。

数据(PEP_DPM_QUERY_COMPONENT_PERF_STATES)

指向 PEP_QUERY_COMPONENT_PERF_STATES 结构的指针。

通知 PEP,正在查询指定 P 状态集的离散性能状态(P 状态)值列表。

若要发送PEP_DPM_QUERY_COMPONENT_PERF_STATES通知,PoFx 调用 PEP 的 AcceptDeviceNotification 回调例程。 在此调用中,通知参数值PEP_DPM_QUERY_COMPONENT_PERF_STATES,数据参数指向PEP_QUERY_COMPONENT_PERF_STATES结构。

对于 PEP_DPM_QUERY_COMPONENT_PERF_STATES 通知,总是在 IRQL = PASSIVE_LEVEL 时调用 AcceptDeviceNotification 函数。

PEP_DPM_REGISTER_COMPONENT_PERF_STATES

通知(PEP_DPM_REGISTER_COMPONENT_PERF_STATES)

值PEP_DPM_REGISTER_COMPONENT_PERF_STATES。

数据(PEP_DPM_REGISTER_COMPONENT_PERF_STATES)

指向 PEP_REGISTER_COMPONENT_PERF_STATES 结构的指针。

通知 PEP 指定组件的性能状态(P 状态)。

若要发送 PEP_DPM_REGISTER_COMPONENT_PERF_STATES 通知,PoFx 调用 PEP 的 AcceptDeviceNotification 回调例程。 在此调用中,Notification参数的值为PEP_DPM_REGISTER_COMPONENT_PERF_STATES,而Data参数指向PEP_REGISTER_COMPONENT_PERF_STATES结构。

对于PEP_DPM_REGISTER_COMPONENT_PERF_STATES通知,在 IRQL = PASSIVE_LEVEL始终调用 AcceptDeviceNotification 例程。

PEP_DPM_REQUEST_COMPONENT_PERF_STATE

通知(PEP_DPM_REQUEST_COMPONENT_PERF_STATE)

值PEP_DPM_REQUEST_COMPONENT_PERF_STATE。

数据(PEP_DPM_REQUEST_COMPONENT_PERF_STATE)

指向PEP_REQUEST_COMPONENT_PERF_STATE结构的指针。

向 PEP 表示,Windows 电源管理框架(PoFx)请求进行一个或多个性能状态(P 状态)的更改。

若要发送PEP_DPM_REQUEST_COMPONENT_PERF_STATE通知,PoFx 调用 PEP 的 AcceptDeviceNotification 回调例程。 在此调用中,通知参数值为PEP_DPM_REQUEST_COMPONENT_PERF_STATE,数据参数指向PEP_REQUEST_COMPONENT_PERF_STATE结构。

对于 PEP_DPM_REQUEST_COMPONENT_PERF_STATE 通知,AcceptDeviceNotification 例程始终在 IRQL = PASSIVE_LEVEL 调用。

PEP_DPM_QUERY_CURRENT_COMPONENT_PERF_STATE

通知(PEP_DPM_QUERY_CURRENT_COMPONENT_PERF_STATE)

值PEP_DPM_QUERY_CURRENT_COMPONENT_PERF_STATE。

数据(PEP_DPM_QUERY_CURRENT_COMPONENT_PERF_STATE)

指向PEP_QUERY_CURRENT_COMPONENT_PERF_STATE结构的指针。

通知 PEP,它正在被查询以获取有关指定 P 状态集中当前 P 状态的信息。

若要发送PEP_DPM_QUERY_CURRENT_COMPONENT_PERF_STATE通知,PoFx 调用 PEP 的 AcceptDeviceNotification 回调例程。 在此调用中,通知参数的值为PEP_DPM_QUERY_CURRENT_COMPONENT_PERF_STATE,数据参数指向PEP_QUERY_CURRENT_COMPONENT_PERF_STATE结构。

对于 PEP_DPM_QUERY_CURRENT_COMPONENT_PERF_STATE 通知,AcceptDeviceNotification 例行程序总是在 IRQL = PASSIVE_LEVEL 时被调用。

PEP_DPM_QUERY_DEBUGGER_TRANSITION_REQUIREMENTS

通知(PEP_DPM_QUERY_DEBUGGER_TRANSITION_REQUIREMENTS)

值PEP_DPM_QUERY_DEBUGGER_TRANSITION_REQUIREMENTS。

数据(PEP_DPM_QUERY_DEBUGGER_TRANSITION_REQUIREMENTS)

指向 PEP_DEBUGGER_TRANSITION_REQUIREMENTS 结构的指针。

发送到 PEP 以查询需要调试器关闭的协调状态或平台状态集。

Windows 电源管理框架(PoFx)将此通知发送到 PEP,以查询需要调试器关闭的协调状态或平台状态集。 如果接受此通知,OS 将为 PEP 执行所有调试器电源转换,PEP 可能不会使用 TransitionCriticalResource 为调试器提供电源管理。

此通知在 PEP 接受PEP_NOTIFY_PPM_QUERY_PLATFORM_STATE或PEP_NOTIFY_PPM_QUERY_COORDINATED_STATES通知后发送到每个调试器设备。

若要发送 PEP_DPM_QUERY_DEBUGGER_TRANSITION_REQUIREMENTS 通知,PoFx 调用 PEP 的 AcceptDeviceNotification 回调函数。 对于此通知,总是在 IRQL = DISPATCH_LEVEL 下调用 AcceptDeviceNotification 例程。

PEP_DPM_QUERY_SOC_SUBSYSTEM

通知(PEP_DPM_QUERY_SOC_SUBSYSTEM)

值PEP_DPM_QUERY_SOC_SUBSYSTEM。

数据(PEP_DPM_QUERY_SOC_SUBSYSTEM)

指向 PEP_QUERY_SOC_SUBSYSTEM 结构的指针。

发送到 PEP 以收集有关芯片(SoC)子系统上特定系统的基本信息。

Windows 电源管理框架(PoFx)在初始化平台空闲状态后将此通知发送到 PEP,以便收集有关特定 SoC 子系统的基本信息。 未实现 SoC 子系统计帐或未为指定的平台空闲状态实现的 PEP,将返回 FALSE。 这会指示 OS 停止向 PEP 发送此平台空闲状态的诊断通知。

系统的 SubsystemCount 和子系统的 MetadataCount 会随着 PEP/BSP 更新而变化。 每次启动 OS 时,SubsystemIndex 都可以更改。

重要

PEP 无法忽略此通知。 PEP 收到了这个通知,因为它对该 PlatformIdleStateIndex 的 PEP_DPM_QUERY_SOC_SUBSYSTEM_COUNT 通知进行了响应,并且 SubsystemCount 不为零。

若要发送 PEP_DPM_QUERY_SOC_SUBSYSTEM 通知,PoFx 会在 IRQL < DISPATCH_LEVEL,调用 PEP 的 AcceptDeviceNotification 回调例程。

PEP_DPM查询_SOC子系统阻塞时间

通知(PEP_DPM_QUERY_SOC_SUBSYSTEM_BLOCKING_TIME)

该值为PEP_DPM_QUERY_SOC_SUBSYSTEM_BLOCKING_TIME。

数据(PEP_DPM_QUERY_SOC_SUBSYSTEM_BLOCKING_TIME)

指向 PEP_QUERY_SOC_SUBSYSTEM_BLOCKING_TIME 结构的指针。

当操作系统(OS)要收集有关系统芯片(SoC)子系统在不为操作系统所知的情况下阻止进入特定平台空闲状态的时间记录时,会将信息发送至能量策略引擎(PEP)。

通常,操作系统会在扩展连接待机会话结束时调用此通知,尝试使其进入指定的平台空闲状态。 PEP_QUERY_SOC_SUBSYSTEM_COUNT.SubsystemCount 值在子组件初始化期间由 PEP 填充,用于指定每次发送到 PEP 的 PEP_DPM_QUERY_SOC_SUBSYSTEM_BLOCKING_TIME 通知的数量。 PEP 可以接收针对特定子系统的多个 PEP_DPM_QUERY_SOC_SUBSYSTEM_BLOCKING_TIME 通知。 这些通知可能会与PEP_DPM_RESET_SOC_SUBSYSTEM_ACCOUNTING通知交错存在,也可能不会交错。

重要

PEP 无法忽略此通知。 因为 PEP 响应了 PEP_DPM_QUERY_SOC_SUBSYSTEM_COUNT 通知,并且该通知中的 PlatformIdleStateIndex 的 SubsystemCount 为非零值,所以 PEP 正在接收此通知。

为了发送 PEP_DPM_QUERY_SOC_SUBSYSTEM_BLOCKING_TIME 通知,PoFx 会在 IRQL < DISPATCH_LEVEL 调用 PEP 的 AcceptDeviceNotification 回调例程。

PEP_DPM_QUERY_SOC_SUBSYSTEM_COUNT

通知(PEP_DPM_QUERY_SOC_SUBSYSTEM_COUNT)

该值为PEP_DPM_QUERY_SOC_SUBSYSTEM_COUNT。

数据(PEP_DPM_QUERY_SOC_SUBSYSTEM_COUNT)

指向 PEP_QUERY_SOC_SUBSYSTEM_COUNT 结构的指针。

在初始化平台空闲状态后,信息被发送到 PEP,以便告知操作系统 PEP 是否支持系统芯片 (SoC) 子系统,考虑到给定的平台空闲状态。

这是发送到 PEP 的第一个 SoC 子系统诊断通知。 不实现 SoC 子系统会计的 PEP,或者不针对指定的平台空闲状态实现它,返回 FALSE,在这种情况下,OS 不会再为此平台空闲状态发送 PEP 任何 SoC 子系统诊断通知。

注释

如果 PEP 未为指定的平台空闲状态实现 SoC 诊断通知,则 PEP 可以忽略此通知。

若要发送PEP_DPM_QUERY_SOC_SUBSYSTEM_COUNT通知,PoFx 会于 IRQL < DISPATCH_LEVEL 调用 PEP 的 AcceptDeviceNotification 回调例程。

PEP_DPM_QUERY_SOC_SUBSYSTEM_METADATA

通知(PEP_DPM_QUERY_SOC_SUBSYSTEM_METADATA)

值PEP_DPM_QUERY_SOC_SUBSYSTEM_METADATA。

数据(PEP_DPM_QUERY_SOC_SUBSYSTEM_METADATA)

指向PEP_QUERY_SOC_SUBSYSTEM_METADATA结构的指针。

发送到 PEP 以收集有关刚刚查询其阻塞时间的子系统的可选元数据。

通常,此通知会在 PEP_DPM_QUERY_SOC_SUBSYSTEM_BLOCKING_TIME 通知后立即发送到 PEP。 一个PEP_DPM_QUERY_SOC_SUBSYSTEM_METADATA通知收集描述子系统的所有键值元数据对。

重要

PEP 无法忽略此通知。 PEP 正在接收此通知,因为它对具有非零 SubsystemCount 值的 PlatformIdleStateIndex 的 PEP_DPM_QUERY_SOC_SUBSYSTEM_COUNT 通知进行了响应。

若要发送PEP_DPM_QUERY_SOC_SUBSYSTEM_METADATA通知,PoFx 调用 PEP 的 AcceptDeviceNotification 回调例程。 对于此通知,在 IRQL < DISPATCH_LEVEL调用 AcceptDeviceNotification 例程。

PEP_DPM_RESET_SOC_SUBSYSTEM_ACCOUNTING

通知(PEP_DPM_RESET_SOC_SUBSYSTEM_ACCOUNTING)

PEP_DPM_RESET_SOC_SUBSYSTEM_ACCOUNTING的值。

数据(PEP_DPM_RESET_SOC_SUBSYSTEM_ACCOUNTING)

指向 PEP_RESET_SOC_SUBSYSTEM_ACCOUNTING 结构的指针的另一指针。 结构。

发送到 PEP 以清除所有子系统的阻塞时间和元数据的核算,执行所需的任何其他初始化,并重启核算操作。

Windows 电源管理框架(PoFx)会在所有子系统使用 OS 初始化后随时将此通知发送到 PEP。 通常,当操作系统开始新一轮分析时,会调用此通知,以评估是什么因素使系统芯片组(SoC)无法进入指定的平台空闲状态(在进入连接待机时以 DRIPS 为目标)。 OS 仅针对 PEP 初始化了一个或多个 SoC 子系统的平台空闲状态发送此通知。

要发送 PEP_DPM_RESET_SOC_SUBSYSTEM_ACCOUNTING 通知,PoFx 会在 IRQL < DISPATCH_LEVEL 调用 PEP 的 AcceptDeviceNotification 回调例程。