设备电源管理 (DPM) 通知

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

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

通知 ID 关联的结构
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

通知 ID

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 回调例程。 在此调用中,Notification 参数值PEP_DPM_PREPARE_DEVICE,Data 参数指向PEP_PREPARE_DEVICE结构。 输入时,此结构的 DeviceId 成员是唯一标识设备的设备标识字符串。 在返回之前,PEP 将此结构的 DeviceAccepted 成员设置为 TRUE 以声明设备的所有权,或设置为 FALSE 以指示它不拥有设备。

拥有设备电源管理的 PEP 负责管理设备外部和操作设备所需的电源和时钟资源。 此 PEP 启用时钟信号和电源,以响应PEP_DPM_PREPARE_DEVICE通知,并从设备中删除时钟信号和电源以响应PEP_DPM_ABANDON_DEVICE通知。

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

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

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

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

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,Data 参数指向PEP_ABANDON_DEVICE结构。 输入时,此结构的 DeviceId 成员是唯一标识设备的设备标识字符串。 在返回之前,PEP 将此结构的 DeviceAccepted 成员设置为 TRUE 以声明设备的所有权,或设置为 FALSE 以指示它不拥有设备。

拥有设备电源管理的 PEP 负责管理设备外部和操作设备所需的电源和时钟资源。

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

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

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,Data 参数指向包含设备的内核句柄和其他注册信息的PEP_REGISTER_DEVICE_V2结构。 输入时,此结构的 DeviceId 成员是唯一标识设备的设备标识字符串。 在返回之前,PEP 将此结构的 DeviceAccepted 成员设置为 TRUE 以声明设备的所有权,或设置为 FALSE 以指示它不拥有设备。 有关此结构的其他成员的信息,请参阅 PEP_REGISTER_DEVICE_V2。

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

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

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

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_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 对其拥有的设备处理此通知后必须生效的后置条件。

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

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

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 回调例程。 在此调用中,Notification 参数值PEP_DPM_DEVICE_POWER_STATE,Data 参数指向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通知,始终在 IRQL = PASSIVE_LEVEL 调用 AcceptDeviceNotification 例程。

PEP_DPM_COMPONENT_ACTIVE

通知 (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,Data 参数指向PEP_COMPONENT_ACTIVE结构。

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

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

如果在PEP_DPM_COMPONENT_ACTIVE通知请求从空闲条件转换到活动条件时组件处于低功耗 Fx 状态,则 PEP 必须先将组件切换到 F0,然后组件才能进入活动状态。 PEP 可能需要在从 acceptDeviceNotification 回调返回PEP_DPM_COMPONENT_ACTIVE通知后,异步完成组件准备以异步方式转换为活动条件。 完全将组件配置为在活动条件下运行后,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 异步完成转换,如上一段落中所述。

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

对于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 回调例程。 在此调用中,Notification 参数值PEP_DPM_WORK,Data 参数指向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。

Windows 电源管理框架 (PoFx) 驱动程序调用 PoFxPowerControl API 将控制代码直接发送到 PEP 时,会将此通知发送到 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 发出的电源控制请求

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

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

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

PEP_DPM_SYSTEM_LATENCY_UPDATE

通知 (PEP_DPM_SYSTEM_LATENCY_UPDATE)

值PEP_DPM_SYSTEM_LATENCY_UPDATE。

数据 (PEP_DPM_SYSTEM_LATENCY_UPDATE)

指向 PEP_SYSTEM_LATENCY 结构的指针。

通知 PEP OS 已更新整个系统延迟容差。

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

在早期版本的 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 设备已启动,以便可以接收电源控制事务。

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

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

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

注意

如果 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 结构的指针。

当 OS 为给定组件发出空闲状态转换时,发送到 PEP。

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

重要

PEP 必须处理此通知。

对于每个空闲状态转换,在通知驱动程序之前和之后,都会通知 PEP。 PEP 通过检查PEP_NOTIFY_COMPONENT_IDLE_STATE结构的 DriverNotified 成员来区分前通知和发布通知。 对于后通知,DriverNotified 成员将为 TRUE。

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

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

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

若要发送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) 在设备注册为故障转储处理程序时发送此通知。

当系统遇到严重错误时, (故障转储) 生成内存转储的功能对于确定故障原因非常有用。 默认情况下,当系统遇到 bug 检查时,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 状态,则可以忽略此通知。

比设备上组件空闲状态更深的设备空闲约束比组件空闲状态更受约束。 对于给定的平台空闲状态索引,如果设备指定了设备空闲约束,则与设备关联的所有组件的相应组件空闲约束将被忽略。

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

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

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 回调例程。 在此调用中,Notification 参数值PEP_DPM_QUERY_COMPONENT_PERF_CAPABILITIES,Data 参数指向PEP_QUERY_COMPONENT_PERF_CAPABILITIES结构。

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

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 回调例程。 在此调用中,Notification 参数值PEP_DPM_QUERY_COMPONENT_PERF_SET,Data 参数指向PEP_QUERY_COMPONENT_PERF_SET结构。

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

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 回调例程。 在此调用中,Notification 参数值PEP_DPM_QUERY_COMPONENT_PERF_SET_NAME,Data 参数指向PEP_QUERY_COMPONENT_PERF_SET_NAME结构。

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

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 回调例程。 在此调用中,Notification 参数值PEP_DPM_QUERY_COMPONENT_PERF_STATES,Data 参数指向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 回调例程。 在此调用中,Notification 参数值PEP_DPM_REQUEST_COMPONENT_PERF_STATE,Data 参数指向PEP_REQUEST_COMPONENT_PERF_STATE结构。

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

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 回调例程。 在此调用中,Notification 参数值PEP_DPM_QUERY_CURRENT_COMPONENT_PERF_STATE,Data 参数指向PEP_QUERY_CURRENT_COMPONENT_PERF_STATE结构。

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

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 更新而更改。 SubsystemIndex 可以在每次 OS 启动时更改。

重要

PEP 无法忽略此通知。 PEP 之所以收到此通知,是因为它使用非零 SubsystemCount 响应了此 PlatformIdleStateIndex 的PEP_DPM_QUERY_SOC_SUBSYSTEM_COUNT通知。

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

PEP_DPM_QUERY_SOC_SUBSYSTEM_BLOCKING_TIME

通知 (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) 子系统在 OS 不知情的情况下阻止进入特定平台空闲状态时,会发送到 PEP。

通常,OS 会在扩展连接待机会话结束时调用此通知,其中 OS 尝试进入指定的平台空闲状态。 PEP_QUERY_SOC_SUBSYSTEM_COUNT。在子组件初始化期间 PEP 之前填充的 SubsystemCount 值指定一次发送到 PEP 的PEP_DPM_QUERY_SOC_SUBSYSTEM_BLOCKING_TIME通知数。 PEP 可以接收给定子系统的多个PEP_DPM_QUERY_SOC_SUBSYSTEM_BLOCKING_TIME通知。 这些通知可能与PEP_DPM_RESET_SOC_SUBSYSTEM_ACCOUNTING通知交错,也可能不交错。

重要

PEP 无法忽略此通知。 PEP 之所以收到此通知,是因为它使用非零 SubsystemCount 响应了此 PlatformIdleStateIndex 的PEP_DPM_QUERY_SOC_SUBSYSTEM_COUNT通知。

若要发送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,告知 OS PEP 是否支持芯片上的系统 (SoC) 子系统考虑给定平台空闲状态。

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

注意

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

若要发送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结构的 A 指针 指针。 结构。

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

Windows 电源管理框架 (PoFx) 使用 OS 初始化所有子系统后,随时将此通知发送到 PEP。 通常,当操作系统在进入连接待机) 时,将系统保持在芯片 (SoC) 指定的平台空闲状态 (目标为 DRIPS,将调用此通知。 OS 仅针对 PEP 为其初始化了一个或多个 SoC 子系统的平台空闲状态发送此通知。

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