处理器电源管理 (PPM) 通知

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

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

AcceptProcessorNotification 回调例程使用以下处理器电源管理 (PPM) 通知 ID。

PEP_NOTIFY_PPM_QUERY_CAPABILITIES

Handle

PEPHANDLE 结构,包含目标处理器 PEP 的设备句柄。 如果通知不面向特定处理器,则此值为 NULL。

通知

值PEP_NOTIFY_PPM_QUERY_CAPABILITIES。

数据

指向PEP_PPM_QUERY_CAPABILITIES结构的指针。

备注

通知 PEP 正在查询 PEP 的电源管理功能。

Windows 电源管理框架 (PoFx) 在查询 PEP 电源管理功能时发送此通知。 这会在处理器初始化时发生,并将针对系统中的每个处理器发送。

具有 x86/AMD64 处理器的平台必须使用 ACPI 接口进行处理器性能控制。

若要发送PEP_NOTIFY_PPM_QUERY_CAPABILITIES通知,PoFx 调用 PEP 的 AcceptProcessorNotification 回调例程。 在此调用中,Notification 参数值PEP_NOTIFY_PPM_QUERY_CAPABILITIES,Data 参数指向PEP_PPM_QUERY_CAPABILITIES结构。

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

PEP_NOTIFY_PPM_QUERY_IDLE_STATES

通知

值PEP_NOTIFY_PPM_QUERY_IDLE_STATES。

数据

指向PEP_PPM_QUERY_IDLE_STATES结构的指针。

备注

通知 PEP 空闲状态。

若要发送PEP_NOTIFY_PPM_QUERY_IDLE_STATES通知,PoFx 调用 PEP 的 AcceptProcessorNotification 回调例程。 在此调用中,Notification 参数值PEP_NOTIFY_PPM_QUERY_IDLE_STATES,Data 参数指向PEP_PPM_QUERY_IDLE_STATES结构。

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

PEP_NOTIFY_PPM_IDLE_SELECT

通知

值PEP_NOTIFY_PPM_IDLE_SELECT。

数据

指向PEP_PPM_IDLE_SELECT结构的指针。

备注

通知 PEP 空闲选择。

若要发送PEP_NOTIFY_PPM_IDLE_SELECT通知,PoFx 调用 PEP 的 AcceptProcessorNotification 回调例程。 在此调用中,通知参数值PEP_NOTIFY_PPM_IDLE_SELECT,Data 参数指向PEP_PPM_IDLE_SELECT结构。

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

PEP_NOTIFY_PPM_IDLE_CANCEL

通知

值PEP_NOTIFY_PPM_IDLE_CANCEL。

数据

指向PEP_PPM_IDLE_CANCEL结构的指针。

备注

通知 PEP 取消操作。

若要发送PEP_NOTIFY_PPM_IDLE_CANCEL通知,PoFx 调用 PEP 的 AcceptProcessorNotification 回调例程。 在此调用中,Notification 参数值PEP_NOTIFY_PPM_IDLE_CANCEL,Data 参数指向PEP_PPM_IDLE_CANCEL结构。

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

PEP_NOTIFY_PPM_IDLE_EXECUTE

Handle

PEPHANDLE 结构,包含目标处理器 PEP 的设备句柄。 如果通知不面向特定处理器,则此值为 NULL。

通知

值PEP_NOTIFY_PPM_IDLE_EXECUTE。

数据

指向PEP_PPM_IDLE_EXECUTE或PEP_PPM_IDLE_EXECUTE_V2结构的指针。

备注

发送到 PEP,以将当前处理器转换为指定的空闲状态。

Windows 电源管理框架 (PoFx) 将此通知发送到 PEP,以将当前处理器转换为指定的空闲状态。

PEP 可以准备硬件以进入以前选择的空闲状态,包括通知 OS 可能受睡眠转换影响的核心系统资源。 然后,它必须执行 halt 指令,将处理器转换为空闲状态。 从空闲状态返回后,PEP 必须撤消硬件设置,包括通知操作系统核心系统资源,这些资源可能在唤醒时变为活动状态。 如果 PEP 无法执行处理器 (并且平台) 空闲状态,则必须返回错误状态。

使用协调空闲状态接口时,OS 使用PEP_PPM_IDLE_EXECUTE_V2结构,其中包括 CoordinatedStateCount 和 CoordinatedState 字段,以及空闲转换将输入的协调空闲状态列表。 PlatformState 字段将指定正在输入的最深平台协调空闲状态(如果有)。

如果不使用协调空闲状态接口,OS 将使用PEP_PPM_IDLE_EXECUTE结构。

对于PEP_NOTIFY_PPM_IDLE_EXECUTE通知,调用 AcceptProcessorNotification 例程并禁用了中断。

PEP_NOTIFY_PPM_IDLE_COMPLETE

Handle

PEPHANDLE 结构,包含目标处理器 PEP 的设备句柄。

通知

值PEP_NOTIFY_PPM_IDLE_COMPLETE。

数据

指向PEP_PPM_IDLE_COMPLETE或PEP_PPM_IDLE_COMPLETE_V2结构的指针。

备注

通知 PEP 当前处理器正在从已完成的空闲转换中唤醒。

Windows 电源管理框架 (PoFx) 在当前处理器从已完成的空闲转换唤醒时发送此通知。 如果平台正在执行平台空闲转换,则要唤醒的第一个处理器将指示正在退出的平台空闲状态。 根据平台空闲转换中使用的同步类型,从平台空闲状态唤醒的第一个处理器可能不是进入平台空闲状态的处理器。

如果处理器正在执行深度空闲状态,则 PEP 不得等到收到完整通知以还原核心上下文或通知 OS 核心资源已还原。 操作系统希望在执行通知完成后还原这些资源。 启用虚拟机监控程序后,PEP 仅在从平台空闲状态退出且 ProcessorState 字段设置为PEP_PROCESSOR_IDLE_STATE_UNKNOWN时收到此通知。

使用协调空闲状态接口时,OS 使用PEP_PPM_IDLE_COMPLETE_V2结构,其中包括 CoordinatedStateCount 和 CoordinatedState 字段,以及空闲转换将退出的协调空闲状态列表。 PlatformState 字段将指定退出的最深平台协调空闲状态(如果有)。 请注意,如果使用松散同步,则此处理器退出的协调空闲状态集可能与它输入的协调空闲状态集不同。

如果不使用协调空闲状态接口,OS 将使用PEP_PPM_IDLE_COMPLETE结构。

对于PEP_NOTIFY_PPM_IDLE_COMPLETE通知,在禁用中断的情况下调用 AcceptProcessorNotification 例程,并且始终在目标处理器上执行。

PEP_NOTIFY_PPM_IS_PROCESSOR_HALTED

Handle

PEPHANDLE 结构,包含目标处理器 PEP 的设备句柄。 如果通知不面向特定处理器,则此值为 NULL。

通知

值PEP_NOTIFY_PPM_IS_PROCESSOR_HALTED。

数据

指向PEP_PPM_IS_PROCESSOR_HALTED结构的指针。

备注

发送到 PEP,以确定指定的处理器当前是否处于其所选空闲状态。

Windows 电源管理框架 (PoFx) 将此通知发送到 PEP,以确定指定的处理器当前是否处于其所选空闲状态。 当协调平台空闲状态时,如果辅助处理器已完全完成到空闲的转换,OS 将使用此通知来检查。 PEP 必须保证目标处理器已达到平台空闲转换可以安全地进行 (状态,例如,通过检查硬件寄存器以查看核心是否在) 停止。 一旦此通知指示处理器处于空闲状态,该处理器不得唤醒,除非操作系统显式请求它这样做。

PEP 可能会在IDLE_SELECT和IDLE_COMPLETE通知之间收到此通知。 保证在空闲转换期间最多接收一次此通知。

对于PEP_NOTIFY_PPM_IS_PROCESSOR_HALTED通知,在任一 IRQL 上调用 AcceptProcessorNotification 例程,并在任何 IRQL 上禁用中断,并且永远不会在目标处理器上执行。

<= HIGH_LEVEL

PEP_NOTIFY_PPM_INITIATE_WAKE

Handle

PEPHANDLE 结构,包含目标处理器 PEP 的设备句柄。

通知

值PEP_NOTIFY_PPM_INITIATE_WAKE。

数据

指向结构的指针。

备注

发送到指定处理器的 PEP,以从不可中断的空闲状态启动其唤醒。

Windows 电源管理框架 (PoFx) 将此通知发送到指定处理器的 PEP,以从不可中断的空闲状态启动其唤醒。 PEP 必须使用 NeedInterruptForCompletion 返回目标处理器的唤醒状态。 如果处理器需要中断才能完成从空闲状态唤醒,则返回 TRUE。 在这种情况下,PEP 必须确保目标处理器在处理此通知后可中断。 如果目标处理器已在运行和/或最终退出空闲状态 (,并且正在) 执行此操作,而无需任何软件生成的中断,则 NeedInterruptForCompletion 应设置为 FALSE。

注意 PEP 不会同时收到同一处理器的此通知。

对于PEP_NOTIFY_PPM_INITIATE_WAKE通知,在任何 IRQL 上调用 AcceptProcessorNotification 例程,并禁用中断,并且永远不会在目标处理器上执行。

<= HIGH_LEVEL

PEP_NOTIFY_PPM_QUERY_FEEDBACK_COUNTERS

Handle

PEPHANDLE 结构,包含目标处理器 PEP 的设备句柄。 如果通知不面向特定处理器,则此值为 NULL。

通知

值PEP_NOTIFY_PPM_QUERY_FEEDBACK_COUNTERS。

数据

指向PEP_PPM_QUERY_FEEDBACK_COUNTERS结构的指针。

备注

通知 PEP 正在查询 PEP 支持的反馈计数器列表。

Windows 电源管理框架 (PoFx) 在处理器初始化时发送此通知,以查询 PEP 中支持的反馈计数器列表。

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

PEP_NOTIFY_PPM_FEEDBACK_READ

Handle

PEPHANDLE 结构,包含目标处理器 PEP 的设备句柄。 如果通知不面向特定处理器,则此值为 NULL。

通知

值PEP_NOTIFY_PPM_FEEDBACK_READ。

数据

指向PEP_PPM_FEEDBACK_READ结构的指针。

备注

通知 PEP 正在查询反馈计数器的当前值。

Windows 电源管理框架 (PoFx) 在想要查询反馈计数器的当前值时发送此通知。

发送此通知时可能会禁用中断。 如果设置了计数器的 Affinitized 字段,则会在目标处理器上执行此通知。 否则,可以从任何处理器执行此通知。

对于PEP_NOTIFY_PPM_FEEDBACK_READ通知,可以在 IRQL = DISPATCH_LEVEL 调用 AcceptProcessorNotification 例程。

PEP_NOTIFY_PPM_QUERY_PERF_CAPABILITIES

Handle

PEPHANDLE 结构,包含目标处理器 PEP 的设备句柄。 如果通知不面向特定处理器,则此值为 NULL。

通知

值PEP_NOTIFY_PPM_QUERY_PERF_CAPABILITIES。

数据

指向PEP_PPM_QUERY_PERF_CAPABILITIES结构的指针。

备注

通知 PEP 正在查询平台支持的性能范围。

Windows 电源管理框架 (PoFx) 在处理器初始化时发送此通知,以查询平台支持的性能范围。 PEP_PPM_QUERY_PERF_CAPABILITIES 结构的 DomainId 和 DomainMembers 字段用于向平台表示性能状态域。 每个处理器都是一个性能状态域的成员。 操作系统将确保性能域中的所有处理器一起更改性能。

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

PEP_NOTIFY_PPM_PERF_CONSTRAINTS

Handle

PEPHANDLE 结构,包含目标处理器 PEP 的设备句柄。

通知

值PEP_NOTIFY_PPM_PERF_CONSTRAINTS。

数据

指向PEP_PPM_PERF_CONSTRAINTS结构的指针。

备注

通知 PEP 正在查询处理器的当前操作约束。

Windows 电源管理框架 (PoFx) 在想要检查处理器的当前操作约束时发送此通知。 PEP 通过执行电源控制并GUID_PPM_PERF_CONSTRAINT_CHANGE控制代码,启动要求 OS 重新评估处理器性能约束的请求。 InBuffer 和 OutBuffer 必须为 NULL。

PEP 必须等待,直到收到处理器的PEP_DPM_DEVICE_STARTED通知,然后才能为处理器发出电源控制事务。

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

PEP_NOTIFY_PPM_PERF_SET

此通知通知 PEP 应更改处理器的当前运行性能。

下面介绍了 AcceptProcessorNotification 的参数。

Handle

PEPHANDLE 结构,包含目标处理器 PEP 的设备句柄。 如果通知不面向特定处理器,则此值为 NULL。

通知

PEP_NOTIFY_PPM_PERF_SET

数据

指向 PEP_PPM_PERF_SET 结构的指针。

备注

Windows 电源管理框架 (PoFx) 在想要更改处理器的当前运行性能时发送此通知。 可以在任何处理器上执行时发送此通知。

对于PEP_NOTIFY_PPM_PERF_SET通知,始终在 IRQL = DISPATCH_LEVEL调用 AcceptProcessorNotification 例程。

PEP_NOTIFY_PPM_PARK_SELECTION

Handle

PEPHANDLE 结构,其中包含目标处理器 PEP 的设备句柄。 如果通知不面向特定处理器,则为 NULL。

通知

值PEP_NOTIFY_PPM_PARK_SELECTION。

数据

指向PEP_PPM_PARK_SELECTION结构的指针。

备注

通知 PEP 操作系统希望它选择要寄存的一组首选处理器核心。

Windows 电源管理框架 (PoFx) 发送此通知,以指示 PEP 选择要寄存的一组首选核心。

已重载PEP_NOTIFY_PPM_PARK_SELECTION以执行两个功能:

让 PEP 从系统) 的所有处理器集中选择哪些处理器 (,以及哪些处理器应取消停靠。 让 PEP 从取消停) 应接收中断且不应接收中断的所有处理器集中选择 (的处理器。 Windows 不提供 PEP 来区分 OS 正在执行这两个操作中的哪一种的方法。 因此,当 PEP 收到具有一组给定输入 (AdditionalUnparkedProcessors 计数和 PoPreference) 的通知时,它应 (PepPreference) 提供一致的输出,除非某些外部事件导致 PEP 首选项发生更改。

对于PEP_NOTIFY_PPM_PARK_SELECTION通知,始终在 IRQL = DISPATCH_LEVEL调用 AcceptProcessorNotification 例程。

PEP_NOTIFY_PPM_CST_STATES

Handle

PEPHANDLE 结构,其中包含目标处理器 PEP 的设备句柄。 如果通知不面向特定处理器,则为 NULL。

通知

值PEP_NOTIFY_PPM_CST_STATES。

数据

指向PEP_PPM_CST_STATES 结构的指针。

备注

发送到 PEP 以指示处理器支持的 ACPI 定义的 C 状态集。

Windows 电源管理框架 (PoFx) 将此通知发送到 PEP,以指示处理器支持的 ACPI 定义的 C 状态集。 此通知将在 PEP 第一次收到处理器PEP_NOTIFY_PPM_QUERY_IDLE_STATES_V2通知之前发送一次,并在处理器收到指示_CST对象已更改的通知 (0x81) 再次发送。

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

PEP_NOTIFY_PPM_QUERY_PLATFORM_STATES

Handle

PEPHANDLE 结构,其中包含目标处理器 PEP 的设备句柄。 如果通知不面向特定处理器,则为 NULL。

通知

值PEP_NOTIFY_PPM_QUERY_PLATFORM_STATES。

数据

指向PEP_PPM_QUERY_PLATFORM_STATES 结构的指针。

备注

在处理器初始化时发送 ,以查询 PEP 支持的平台空闲状态数。

Windows 电源管理框架 (PoFx) 在处理器初始化时将此通知发送到 PEP,以查询它支持的平台空闲状态数。 此通知在启动时发送一次。 返回非零数量的平台状态后,PEP 可以在处理器空闲转换期间开始选择平台空闲状态。

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

PEP_NOTIFY_PPM_QUERY_LP_SETTINGS

通知

值PEP_NOTIFY_PPM_QUERY_LP_SETTINGS。

数据

指向PEP_PPM_QUERY_LP_SETTINGS 结构的指针。

备注

若要发送PEP_NOTIFY_PPM_QUERY_LP_SETTINGS通知,PoFx 调用 PEP 的 AcceptProcessorNotification 回调例程。 在此调用中,Notification 参数值PEP_NOTIFY_PPM_QUERY_LP_SETTINGS,Data 参数指向PEP_PPM_QUERY_LP_SETTINGS结构。

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

PEP_NOTIFY_PPM_QUERY_IDLE_STATES_V2

Handle

PEPHANDLE 结构,其中包含目标处理器 PEP 的设备句柄。 如果通知不面向特定处理器,则为 NULL。

通知

值PEP_NOTIFY_PPM_QUERY_IDLE_STATES_V2。

数据

指向PEP_PPM_QUERY_IDLE_STATES_V2 结构的指针。

备注

在处理器初始化时用于查询 PEP 支持的空闲状态列表。

Windows 电源管理框架 (PoFx) 在处理器初始化时将此通知发送到 PEP,以查询它支持的空闲状态列表。

Count 成员指定空闲状态数组的大小。 在发送此通知之前,处理器驱动程序将使用PEP_NOTIFY_PPM_QUERY_CAPABILITIES查询空闲状态的数量。

PEP 在 IdleStates 数组中填充有关它支持的每个空闲状态的信息。 空闲状态应按降低功耗/增加转换成本的顺序列出。 PEP 不需要报告每个处理器的相同空闲状态列表。

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

PEP_NOTIFY_PPM_QUERY_PLATFORM_STATE

Handle

PEPHANDLE 结构,其中包含目标处理器 PEP 的设备句柄。 如果通知不面向特定处理器,则为 NULL。

通知

值PEP_NOTIFY_PPM_QUERY_PLATFORM_STATE。

数据

指向PEP_PPM_QUERY_PLATFORM_STATE 结构的指针。

备注

发送到 PEP 以查询单个平台空闲状态的属性。

Windows 电源管理框架 (PoFx) 在处理器初始化时发送此通知,以查询单个平台空闲状态的属性。

PEP_PPM_QUERY_PLATFORM_STATE 结构的 StateIndex 参数指定要查询的平台空闲状态的索引。 在发送此通知之前,处理器驱动程序将使用PEP_NOTIFY_PPM_QUERY_PLATFORM_STATES查询受支持的平台空闲状态数。 处理器驱动程序随后会针对每个平台空闲状态发送一个PEP_NOTIFY_PPM_QUERY_PLATFORM_STATE通知。 处理器驱动程序将等待发送此通知,直到所有处理器都注册到 PEP。

PEP 在状态结构中填充有关平台空闲状态的信息。 平台空闲状态应按降低功耗/增加转换成本的顺序列出。

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

PEP_NOTIFY_PPM_TEST_IDLE_STATE

Handle

PEPHANDLE 结构,其中包含目标处理器 PEP 的设备句柄。 如果通知不面向特定处理器,则为 NULL。

通知

值PEP_NOTIFY_PPM_TEST_IDLE_STATE。

数据

指向PEP_PPM_TEST_IDLE_STATE 结构的指针。

备注

用于测试是否可以在指定的处理器上输入指定的处理器和平台空闲状态。

Windows 电源管理框架 (PoFx) 发送此通知,以测试是否可以在指定的处理器上输入指定的处理器和平台空闲状态。 如果可以进入空闲状态,PEP 会PEP_IDLE_VETO_NONE填充否决代码并完成空闲转换。 如果由于某种原因无法完成空闲转换,PEP 将填充非零否决代码。

重要提示 0x80000000 0xffffffff范围内的 Veto 代码保留供 OS 使用,不得使用。

发送此通知时,OS 已验证是否已满足与所选处理器或平台空闲状态关联的所有约束,包括平台空闲转换的设备和处理器约束。

此通知将在 OS 尝试进入任何处理器或平台空闲状态之前发送,索引为 0 的处理器空闲状态除外,该状态必须始终可输入。 使用 PEP_IDLE_VETO_NONE 完成此通知并不能保证 OS 将进入指示的空闲状态。 发送此通知时禁用了中断。 此通知始终在目标处理器上执行。

对于PEP_NOTIFY_PPM_TEST_IDLE_STATE通知,调用 AcceptProcessorNotification 例程并禁用中断。

PEP_NOTIFY_PPM_IDLE_PRE_EXECUTE

Handle

PEPHANDLE 结构,包含目标处理器 PEP 的设备句柄。 如果通知不面向特定处理器,则此值为 NULL。

通知

值PEP_NOTIFY_PPM_IDLE_PRE_EXECUTE。

数据

指向PEP_PPM_IDLE_EXECUTE或PEP_PPM_IDLE_EXECUTE_V2结构的指针。

备注

已发送到 PEP,使系统准备好转换为指定的空闲状态。

Windows 电源管理框架 (PoFx) 将此通知发送到 PEP,使系统准备好转换为指定的空闲状态。 成功完成此通知后,OS 将通过输入关联的 C 状态将处理器转换为空闲状态。 如果 PEP 无法准备系统进入处理器 (和平台) 空闲状态,则必须返回错误状态。

启用虚拟机监控程序后,PEP 仅在进入平台空闲状态且 ProcessorState 字段设置为PEP_PROCESSOR_IDLE_STATE_UNKNOWN时收到此通知。

使用协调空闲状态接口时,OS 使用PEP_PPM_IDLE_EXECUTE_V2结构,其中包括 CoordinatedStateCount 和 CoordinatedState 字段,以及空闲转换将输入的协调空闲状态列表。 PlatformState 字段将指定正在输入的最深平台协调空闲状态(如果有)。

如果不使用协调空闲状态接口,OS 将使用PEP_PPM_IDLE_EXECUTE结构。

对于PEP_NOTIFY_PPM_IDLE_PRE_EXECUTE通知,在禁用中断的情况下调用 AcceptProcessorNotification 例程,并且始终在目标处理器上执行。

PEP_NOTIFY_PPM_UPDATE_PLATFORM_STATE

Handle

PEPHANDLE 结构,包含目标处理器 PEP 的设备句柄。 如果通知不面向特定处理器,则此值为 NULL。

通知

值PEP_NOTIFY_PPM_UPDATE_PLATFORM_STATE。

数据

指向PEP_PPM_QUERY_PLATFORM_STATE结构的指针。

备注

通知 PEP 处理器已收到通知 (0x81) 更新平台空闲状态的特征。

Windows 电源管理框架 (PoFx) 处理器收到通知 (0x81) 以更新平台空闲状态的特征时发送此通知。 对于每个平台空闲状态,此通知将发送一次。 如果 PEP 不接受通知 (即从其 AcceptProcessorNotification 回调) 返回 FALSE,则保留最近接受PEP_NOTIFY_PPM_QUERY_PLATFORM_STATE或PEP_NOTIFY_PPM_UPDATE_PLATFORM_STATE通知中平台空闲状态的先前定义。

此通知使用与PEP_NOTIFY_PPM_QUERY_PLATFORM_STATE通知相同的数据缓冲区。

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

PEP_NOTIFY_PPM_QUERY_PLATFORM_STATE_RESIDENCIES

Handle

PEPHANDLE 结构,包含目标处理器 PEP 的设备句柄。 如果通知不面向特定处理器,则此值为 NULL。

通知

值PEP_NOTIFY_PPM_QUERY_PLATFORM_STATE_RESIDENCIES。

数据

指向PEP_PPM_PLATFORM_STATE_RESIDENCIES结构的指针。

备注

通知 PEP,它应捕获自启动以来每个平台空闲状态所花费的实际累计时间。

Windows 电源管理框架 (PoFx) 将此通知发送到 PEP,以捕获自启动以来每个平台空闲状态所花费的实际累计时间。 因此,此查询仅适用于基础硬件可以自主决定进入不同于 OS 请求的平台空闲状态的平台。 返回的值用于诊断目的,并确定 OS 对平台空闲状态驻留的视图何时与平台实际实现的明显差异。

Count 指定 State 数组中的元素数,其中元素索引对应于平台空闲状态索引。 PEP 将使用匹配状态的实际驻留和转换计数填充每个元素。

注意 此查询捕获的累积值应仅对应于 PEP (或处理器驱动程序) 实际执行平台空闲状态转换的时间段。 这将确保 OS 计算的驻留与实际驻留之间的比较有意义。

对于PEP_NOTIFY_PPM_QUERY_PLATFORM_STATE_RESIDENCIES通知,可以在任何 IRQL 中调用 AcceptProcessorNotification 例程。

PEP_NOTIFY_PPM_QUERY_VETO_REASONS

Handle

PEPHANDLE 结构,包含目标处理器 PEP 的设备句柄。 如果通知不面向特定处理器,则此值为 NULL。

通知

值PEP_NOTIFY_PPM_QUERY_VETO_REASONS。

数据

指向PEP_PPM_QUERY_VETO_REASONS结构的指针。

备注

用于查询 PEP 在 ProcessorIdleVeto 和 PlatformIdleVeto 回调中使用的唯一否决原因的数量。

Windows 电源管理框架 (PoFx) 在处理器初始化时发送此通知,以查询 PEP 在 ProcessorIdleVeto 和 PlatformIdleVeto 回调中使用的唯一否决原因数。 此通知是可选的,可被 PEP 忽略。

如果接受,则允许 PEP 使用介于 1 和 VetoReasonCount(含)之间的否决理由来否决任何处理器、平台或协调空闲状态。 不允许 PEP 使用大于 VetoReasonCount 的否决理由。 OS 将预先分配否决跟踪结构,当与PEP_NOTIFY_PPM_ENUMERATE_BOOT_VETOES一起使用时,可保证所有处理器、平台和协调状态否决回调都将成功。

如果 PEP 不接受此通知,则 PEP 可能会使用 ProcessorIdleVeto 和 PlatformIdleVeto 回调,并出于任何法律否决原因。 OS 不保证回调不会因分配失败或其他问题而失败。

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

PEP_NOTIFY_PPM_QUERY_VETO_REASON

Handle

PEPHANDLE 结构,包含目标处理器 PEP 的设备句柄。 如果通知不面向特定处理器,则此值为 NULL。

通知

值PEP_NOTIFY_PPM_QUERY_VETO_REASON。

数据

指向PEP_PPM_QUERY_VETO_REASON结构的指针。

备注

发送到 PEP 以查询有关特定否决原因的信息。

Windows 电源管理框架 (PoFx) 在处理器初始化时发送此通知,以查询有关特定否决原因的信息。 对于每个否决原因,此通知将发送两次,一次使用 NULLName 缓冲区检索 Name 所需的分配大小,一次使用非 NULLName 缓冲区来填充 Name 的内容。 该名称应该是一个可读字符串,指示此否决原因所代表的条件。 调试工具(如 WPA 和内核调试器)在诊断未进入空闲状态的原因时将显示“名称”。

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

PEP_NOTIFY_PPM_ENUMERATE_BOOT_VETOES

Handle

PEPHANDLE 结构,包含目标处理器 PEP 的设备句柄。 如果通知不面向特定处理器,则此值为 NULL。

通知

值PEP_NOTIFY_PPM_ENUMERATE_BOOT_VETOES。

数据

NULL 指针值。

备注

通知 PEP 操作系统已准备好接受对 ProcessorIdleVeto 或 PlatformIdleVeto 的调用。

Windows 电源管理框架 (PoFx) 在处理器初始化后但在第一个空闲条目之前发送此通知,以指示 OS 已准备好接受对 ProcessorIdleVeto 或 PlatformIdleVeto 的调用。 PEP 可以在此通知的上下文中枚举任何启动时间否决,并且 OS 保证在首次尝试选择处理器、平台或协调空闲状态之前,这些否决将生效。 此通知没有关联的 Data 参数。

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

PEP_NOTIFY_PPM_PARK_MASK

Handle

PEPHANDLE 结构,其中包含目标处理器 PEP 的设备句柄。 如果通知不面向特定处理器,则为 NULL。

通知

值PEP_NOTIFY_PPM_PARK_MASK。

数据

指向PEP_PPM_PARK_MASK 结构的指针。

备注

通知 PEP 当前核心停车掩码。

Windows 电源管理框架 (PoFx) 在运行时发送此通知,以通知 PEP 当前核心停车掩码。

对于PEP_NOTIFY_PPM_PARK_MASK通知,在 IRQL = DISPATCH_LEVEL调用 AcceptProcessorNotification 例程,并且可以在任何处理器上执行时发送。

PEP_NOTIFY_PPM_PARK_SELECTION_V2

Handle

PEPHANDLE 结构,其中包含目标处理器 PEP 的设备句柄。 如果通知不面向特定处理器,则为 NULL。

通知

值PEP_NOTIFY_PPM_PARK_SELECTION_V2。

数据

指向PEP_PPM_PARK_SELECTION_V2 结构的指针。

备注

通知 PEP,操作系统希望它选择一组首选的核心来寄存或引导中断离开。 如果不接受此通知,OS 将回退到发送PEP_NOTIFY_PPM_PARK_SELECTION通知。

运行其性能检查算法时,OS 可能会多次发送PEP_NOTIFY_PPM_PARK_SELECTION_V2通知:每个公园域中每个核心效率类的零次或多次,零次或多次用于中断转向。 为了帮助 PEP 针对性能检查向 OS 提供一致的响应,OS 将提供提示通知的性能检查评估的基于中断时间的时间戳。 一个性能检查评估产生的所有公园选择通知将具有相同的时间戳。 请注意,对于在相同的性能 (检查评估期间发送的通知,Count、AdditionalUnparkedProcessors、EvaluationType 和 Processors) 的其余字段可能会有所不同,PEP 无法假设它们保持不变。

对于PEP_NOTIFY_PPM_PARK_SELECTION通知,始终在 IRQL = DISPATCH_LEVEL调用 AcceptProcessorNotification 例程。

PEP_NOTIFY_PPM_PERF_CHECK_COMPLETE

Handle

PEPHANDLE 结构,其中包含目标处理器 PEP 的设备句柄。 如果通知不面向特定处理器,则为 NULL。

通知

值PEP_NOTIFY_PPM_PERF_CHECK_COMPLETE。

数据

指向PEP_PPM_PERF_CHECK_COMPLETE 结构的指针。

备注

通知 PEP 定期性能检查评估已完成。

Windows 电源管理框架 (PoFx) 在运行时发送此通知,以通知 PEP 每个检查的定期评估已完成。

对于PEP_NOTIFY_PPM_PERF_CHECK_COMPLETE通知,在 IRQL = DISPATCH_LEVEL调用 AcceptProcessorNotification 例程,并且可以在任何处理器上执行时发送。

PEP_NOTIFY_PPM_QUERY_COORDINATED_DEPENDENCY

Handle

PEPHANDLE 结构,其中包含目标处理器 PEP 的设备句柄。 如果通知不面向特定处理器,则为 NULL。

通知

值PEP_NOTIFY_PPM_QUERY_COORDINATED_DEPENDENCY。

数据

指向PEP_PPM_QUERY_COORDINATED_DEPENDENCY 结构的指针。

备注

发送到 PEP,以查询每个协调空闲状态的依赖项。

Windows 电源管理框架 (PoFx) 在处理器初始化时发送此通知,以查询 PEP 中每个协调空闲状态的依赖项。 OS 将为 Dependencies 数组分配 MaximumDependencySize 元素。 PEP 必须填充 DependencySizeUsed 中使用的数组元素数。

如果所表示的依赖项在处理器上,PEP 将用目标处理器的 POHANDLE 填充 TargetProcessor 字段。 然后,ExpectedState 字段引用目标处理器上处理器空闲状态的索引。

如果要表示的依赖项在其他协调空闲状态上,则 PEP 将填充 TargetProcessor 的 NULL。 然后,ExpectedState 字段引用协调空闲状态的索引。

每个依赖项都列出了允许 OS 用于满足依赖项的选项菜单。 空闲时,OS 将通过检查每个条件(从最高索引到最低索引)来尝试满足依赖项。 如果满足依赖项的条件,则 OS 将考虑满足依赖项。 如果无法满足任何条件,则不满足依赖项,并且可能无法输入协调的空闲状态。

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

PEP_NOTIFY_PPM_QUERY_COORDINATED_STATE_NAME

Handle

PEPHANDLE 结构,其中包含目标处理器 PEP 的设备句柄。 如果通知不面向特定处理器,则为 NULL。

通知

值PEP_NOTIFY_PPM_QUERY_COORDINATED_STATE_NAME。

数据

指向PEP_PPM_QUERY_STATE_NAME 结构的指针。

备注

发送到 PEP 以查询有关特定协调状态或平台空闲状态的信息。

Windows 电源管理框架 (PoFx) 在处理器初始化时发送此通知,以查询 PEP 以获取有关特定协调状态或平台空闲状态的信息。 此通知针对每个状态发送两次,一次是使用 NULL 名称缓冲区来检索 Name 所需的分配大小,一次是使用非 NULL 名称缓冲区来填充 Name 的内容。 该名称应为用户可读的字符串,指示协调空闲状态的名称。 协调空闲状态应具有唯一名称,但多群集系统上的等效状态名称可能相同。 调试工具(如 WPA 和内核调试器)将在引用此协调/平台空闲状态的诊断中显示“名称”。

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

PEP_NOTIFY_PPM_QUERY_COORDINATED_STATES

Handle

PEPHANDLE 结构,其中包含目标处理器 PEP 的设备句柄。 如果通知不面向特定处理器,则为 NULL。

通知

值PEP_NOTIFY_PPM_QUERY_COORDINATED_STATES。

数据

指向PEP_PPM_QUERY_COORDINATED_STATES结构的指针。

备注

在处理器初始化时用于查询所有协调空闲状态的属性。

Windows 电源管理框架 (PoFx) 在处理器初始化时将此通知发送到 PEP,以查询所有协调空闲状态的属性。 此通知是在 PEP 发送PEP_NOTIFY_PPM_QUERY_PLATFORM_STATE通知之前发送的。 如果接受,PEP 正在使用协调的空闲状态接口,并且不会收到任何PEP_NOTIFY_PPM_QUERY_PLATFORM_STATE通知。 如果未接受,则 PEP 正在使用平台空闲状态接口,操作系统将回退到使用PEP_NOTIFY_PPM_QUERY_PLATFORM_STATE通知来查询协调的空闲状态。

OS 将等待发送此通知,直到所有处理器都注册到 PEP。

PEP 在状态结构中填充有关协调空闲状态的信息。

协调空闲状态的顺序必须遵循以下规则:

两个表示同一功能单元不同功率状态的协调状态应按从最轻 (最高功耗/最小转换成本) 到最深 (最小功耗/最高转换成本) 的顺序列出。 协调空闲状态可能仅依赖于索引较低的其他协调空闲状态。 两个不连续的协调空闲状态之间没有必需的顺序 (即,两个依赖于不连续的处理器集) 的协调空闲状态。

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

PEP_NOTIFY_PPM_QUERY_PROCESSOR_STATE_NAME

Handle

PEPHANDLE 结构,其中包含目标处理器 PEP 的设备句柄。 如果通知不面向特定处理器,则为 NULL。

通知

值PEP_NOTIFY_PPM_QUERY_PROCESSOR_STATE_NAME。

数据

指向PEP_PPM_QUERY_STATE_NAME 结构的指针。

备注

发送到 PEP,以查询有关特定处理器空闲状态的信息。

Windows 电源管理框架 (PoFx) 在处理器初始化时发送此通知,以查询 PEP 以获取有关特定处理器空闲状态的信息。 此通知针对每个状态发送两次,一次是使用 NULL 名称缓冲区来检索 Name 所需的分配大小,一次是使用非 NULL 名称缓冲区来填充 Name 的内容。 该名称应为用户可读的字符串,指示协调空闲状态的名称。 协调空闲状态应具有唯一名称,但多群集系统上的等效状态名称可能相同。 调试工具(如 WPA 和内核调试器)将在引用此协调/平台空闲状态的诊断中显示“名称”。

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

PEP_NOTIFY_PPM_ENTER_SYSTEM_STATE

Handle

PEPHANDLE 结构,其中包含目标处理器 PEP 的设备句柄。 如果通知不面向特定处理器,则为 NULL。

通知

值PEP_NOTIFY_PPM_ENTER_SYSTEM_STATE。

数据

指向PEP_PPM_ENTER_SYSTEM_STATE 结构的指针。

备注

PEP_NOTIFY_PPM_ENTER_SYSTEM_STATE是一个可选通知,通知 PEP 系统即将进入系统电源状态。 在系统完成将处理器转换为系统电源状态的所有被动级别工作后,此通知将同时发送给所有处理器。

此通知在DISPATCH_LEVEL发送,所有处理器都在调度。 此通知始终在目标处理器上执行。

注意 PEP 不得将此通知中的任何工作排队。 发送此通知后,处理器不会处理工作项、DPC 等。

DISPATCH_LEVEL

PEP_NOTIFY_PPM_PERF_SET_STATE

下面介绍了 AcceptProcessorNotification 的参数。

Handle

PEPHANDLE 结构,其中包含目标处理器 PEP 的设备句柄。 如果通知不面向特定处理器,则为 NULL。

通知

PEP_NOTIFY_PPM_PERF_SET_STATE

数据

指向 PEP_PPM_PERF_SET_STATE 结构的指针。

备注

在运行时用于设置处理器的当前运行性能状态。 如果 PEP 具有能够在没有性能集请求的情况下提升/降低性能的自主硬件,则应根据最低性能状态和/或最大性能状态限制来自自治硬件的请求,并针对所需的性能状态。 否则,它应以恰好所需的性能状态运行。

此通知在 DISPATCH_LEVEL 发送。 如果使用计划程序定向性能状态,则 PEP 在处理此通知时必须遵守第 3.3.6 节中的限制。 可以在任何处理器上执行时发送它。

PEP_NOTIFY_PPM_QUERY_DISCRETE_PERF_STATES

Handle

PEPHANDLE 结构,其中包含目标处理器 PEP 的设备句柄。 如果通知不面向特定处理器,则为 NULL。

通知

值PEP_NOTIFY_PPM_QUERY_DISCRETE_PERF_STATES。

数据

指向PEP_PPM_QUERY_DISCRETE_PERF_STATES 结构的指针。 如果PEP_NOTIFY_PPM_QUERY_CAPABILITIES通知指示支持离散性能状态,则用于在处理器初始化时查询 PEP 支持的离散性能状态列表。

性能状态列表应按最快到最慢的顺序排序,每个性能状态映射到不同的性能值。 性能状态列表还应包含与PEP_NOTIFY_PPM_QUERY_PERF_CAPABILITIES通知中列出的每个性能值匹配的条目。 此通知在 PASSIVE_LEVEL 发送。 可以在任何处理器上执行时发送它。

PEP_NOTIFY_PPM_QUERY_DOMAIN_INFO

Handle

PEPHANDLE 结构,其中包含目标处理器 PEP 的设备句柄。 如果通知不面向特定处理器,则为 NULL。

通知

值PEP_NOTIFY_PPM_QUERY_DOMAIN_INFO。

数据

指向PEP_PPM_QUERY_DOMAIN_INFO 结构的指针。

备注

一个可选通知,用于查询有关性能域的信息。 此通知在 PASSIVE_LEVEL 发送。 可以在任何处理器上执行时发送它。

PEP_NOTIFY_PPM_RESUME_FROM_SYSTEM_STATE

Handle

PEPHANDLE 结构,其中包含目标处理器 PEP 的设备句柄。 如果通知不面向特定处理器,则为 NULL。

通知

值PEP_NOTIFY_PPM_RESUME_FROM_SYSTEM_STATE。

数据

指向PEP_PPM_RESUME_FROM_SYSTEM_STATE 结构的指针。

备注

一个可选通知,通知 PEP 系统刚刚从系统电源状态恢复。 此通知在释放处理器以恢复被动级别工作之前同时发送给所有处理器。 此通知在DISPATCH_LEVEL发送,所有处理器都在调度。 此通知始终在目标处理器上执行。