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

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

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

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

PEP_NOTIFY_PPM_QUERY_CAPABILITIES

处理

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

通知

值PEP_NOTIFY_PPM_QUERY_CAPABILITIES。

数据

指向PEP_PPM_QUERY_CAPABILITIES结构的指针。

备注

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

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

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

若要发送 PEP_NOTIFY_PPM_QUERY_CAPABILITIES 通知,PoFx 调用 PEP 的 AcceptProcessorNotification 回调函数。 在此次调用中,通知参数的值为 PEP_NOTIFY_PPM_QUERY_CAPABILITIES,数据参数指向一个 PEP_PPM_QUERY_CAPABILITIES 结构。

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

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 回调例程。 在此调用中,通知参数值为 PEP_NOTIFY_PPM_QUERY_IDLE_STATES,数据参数指向 PEP_PPM_QUERY_IDLE_STATES 结构。

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

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,数据参数指向PEP_PPM_IDLE_SELECT结构。

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

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通知,AcceptProcessorNotification 例程始终在 IRQL = PASSIVE_LEVEL调用。

PEP_NOTIFY_PPM_IDLE_EXECUTE

处理

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

通知

该值为PEP_NOTIFY_PPM_IDLE_EXECUTE。

数据

指向PEP_PPM_IDLE_EXECUTE或PEP_PPM_IDLE_EXECUTE_V2结构的指针。

备注

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

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

PEP 可以准备硬件以进入之前选择的空闲状态,包括通知操作系统核心系统资源,这些资源可能会受到睡眠转换的影响。 然后,它必须执行停止指令,将处理器转换为空闲状态。 从空闲状态返回后,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

处理

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

通知

值PEP_NOTIFY_PPM_IDLE_COMPLETE。

数据

指向PEP_PPM_IDLE_COMPLETE或PEP_PPM_IDLE_COMPLETE_V2结构的指针。

备注

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

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

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

使用协调空闲状态接口时,操作系统使用 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

处理

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

通知

值PEP_NOTIFY_PPM_IS_PROCESSOR_HALTED。

数据

指向PEP_PPM_IS_PROCESSOR_HALTED结构的指针。

备注

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

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

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

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

<= HIGH_LEVEL

PEP_NOTIFY_PPM_INITIATE_WAKE

处理

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

通知

值PEP_NOTIFY_PPM_INITIATE_WAKE。

数据

指向一个结构体的指针。

备注

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

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

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

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

<= HIGH_LEVEL

PEP_NOTIFY_PPM_QUERY_FEEDBACK_COUNTERS

处理

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

通知

值PEP_NOTIFY_PPM_QUERY_FEEDBACK_COUNTERS。

数据

指向PEP_PPM_QUERY_FEEDBACK_COUNTERS结构的指针。

备注

通知 PEP,正在查询 PEP 以获取它支持的反馈计数器列表。

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

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

PEP_NOTIFY_PPM_FEEDBACK_READ

处理

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

通知

值 PEP_NOTIFY_PPM_FEEDBACK_READ。

数据

指向PEP_PPM_FEEDBACK_READ结构的指针。

备注

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

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

此通知可能会在禁用中断的情况下发送。 如果计数器的已关联字段被设置,那么该通知将在目标处理器上执行。 否则,可以从任何处理器执行此通知。

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

PEP_NOTIFY_PPM_QUERY_PERF_CAPABILITIES

处理

包含目标处理器 PEP 的设备句柄的 PEPHANDLE 结构。 如果通知不面向特定处理器,则为 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通知,AcceptProcessorNotification 例程始终在 IRQL = PASSIVE_LEVEL调用。

PEP_NOTIFY_PPM_PERF_CONSTRAINTS

处理

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

通知

值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 通知,AcceptProcessorNotification 例程始终在 IRQL = PASSIVE_LEVEL 调用。

PEP_NOTIFY_PPM_PERF_SET

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

下面介绍了 AcceptProcessorNotification 的参数。

处理

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

通知

PEP_NOTIFY_PPM_PERF_SET

数据

指向 PEP_PPM_PERF_SET 结构的指针。

备注

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

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

PEP_NOTIFY_PPM_PARK_SELECTION

处理

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

通知

指定值为PEP_NOTIFY_PPM_PARK_SELECTION。

数据

指向PEP_PPM_PARK_SELECTION结构的指针。

备注

通知 PEP OS 希望它选择要寄存的首选处理器核心集。

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

已重载PEP_NOTIFY_PPM_PARK_SELECTION以执行两个函数:

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

对于 PEP_NOTIFY_PPM_PARK_SELECTION 通知,AcceptProcessorNotification 函数始终在 IRQL = DISPATCH_LEVEL 时调用。

PEP_NOTIFY_PPM_CST_STATES

处理

目标处理器的 PEP 包含在一个 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对象已更改的 Notify(0x81)时,该通知都会再次发送一次。

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

PEP_NOTIFY_PPM_QUERY_PLATFORM_STATES

处理

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 回调例程。 在此调用中,通知参数值PEP_NOTIFY_PPM_QUERY_LP_SETTINGS,数据参数指向PEP_PPM_QUERY_LP_SETTINGS结构。

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

PEP_NOTIFY_PPM_QUERY_IDLE_STATES_V2

处理

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 通知,AcceptProcessorNotification 例程始终以 IRQL = PASSIVE_LEVEL 的形式调用。

PEP_NOTIFY_PPM_QUERY_PLATFORM_STATE

处理

包含目标处理器 PEP 的设备句柄的 PEPHANDLE 结构。 如果通知不面向特定处理器,则为 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 通知,AcceptProcessorNotification 例程始终在 IRQL = PASSIVE_LEVEL 调用。

PEP_NOTIFY_PPM_TEST_IDLE_STATE

处理

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

通知

值PEP_NOTIFY_PPM_TEST_IDLE_STATE。

数据

指向PEP_PPM_TEST_IDLE_STATE结构的指针。

备注

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

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

从 0x80000000 到 0xffffffff 范围内的重要否决代码保留供操作系统使用,不得使用。

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

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

对于PEP_NOTIFY_PPM_TEST_IDLE_STATE事件通知,禁用中断时调用AcceptProcessorNotification例程。

PEP_NOTIFY_PPM_IDLE_PRE_EXECUTE

处理

包含目标处理器的PEP设备句柄的PEPHANDLE结构。 如果通知不面向特定处理器,则为 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。

使用协调空闲状态接口时,操作系统使用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

处理

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

通知

该值为 PEP_NOTIFY_PPM_UPDATE_PLATFORM_STATE。

数据

指向PEP_PPM_QUERY_PLATFORM_STATE结构的指针。

备注

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

当处理器收到 Notify(0x81) 以更新平台空闲状态的特征时,Windows 电源管理框架(PoFx)将发送此通知。 此通知针对每个平台空闲状态发送一次。 如果 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 通知,AcceptProcessorNotification 例程始终在 IRQL = PASSIVE_LEVEL 调用。

PEP_NOTIFY_PPM_QUERY_PLATFORM_STATE_RESIDENCIES

处理

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

通知

值PEP_NOTIFY_PPM_QUERY_PLATFORM_STATE_RESIDENCIES。

数据

指向PEP_PPM_PLATFORM_STATE_RESIDENCIES结构的指针。

备注

告知PEP,应记录自启动以来各个平台的空闲状态下实际累积的时间。

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

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

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

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

PEP_NOTIFY_PPM_QUERY_VETO_REASONS(查询否决原因的通知)

处理

包含用于目标处理器的 PEP 的设备句柄的 PEPHANDLE 结构。 如果通知不面向特定处理器,则为 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 回调函数。 操作系统不保证回调不会因内存分配失败或其他问题而失败。

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

PEP_NOTIFY_PPM_QUERY_VETO_REASON

处理

包含用于目标处理器的 PEP 的设备句柄的 PEPHANDLE 结构。 如果通知不面向特定处理器,则为 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通知,AcceptProcessorNotification例程始终在IRQL = PASSIVE_LEVEL时被调用。

PEP_NOTIFY_PPM_ENUMERATE_BOOT_VETOES

处理

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

通知

值PEP_NOTIFY_PPM_ENUMERATE_BOOT_VETOES。

数据

NULL 指针值。

备注

通知 PEP OS 已准备好接受对 ProcessorIdleVeto 或 PlatformIdleVeto 的调用。

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

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

PEP_NOTIFY_PPM_PARK_MASK

处理

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

通知

该值为 PEP_NOTIFY_PPM_PARK_MASK。

数据

指向PEP_PPM_PARK_MASK结构的指针。

备注

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

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

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

PEP_NOTIFY_PPM_PARK_SELECTION_V2

处理

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

通知

值 PEP_NOTIFY_PPM_PARK_SELECTION_V2。

数据

指向PEP_PPM_PARK_SELECTION_V2结构的指针。

备注

开始:通知 PEP,OS 希望其选择一组首选的内核来停用或将中断转移开。 如果不接受此通知,操作系统将退回发送 PEP_NOTIFY_PPM_PARK_SELECTION 通知。

在运行其性能检查算法时,操作系统可能会多次发送PEP_NOTIFY_PPM_PARK_SELECTION_V2通知:在每个停车域中,每个核心效能类可能会接收到零次或多次通知,而在中断重定向的情况下也可能会收到零次或多次通知。 为了协助 PEP 为 OS 的性能检查提供一致的响应,OS 将提供导致通知的性能检查评估的基于中断时间的时间戳。 一次性能检查评估产生的所有公园选择通知将具有相同的时间戳。 请注意,其余字段(Count、AdditionalUnparkedProcessors、EvaluationType 和 Processors)可能会随着在同一性能检查评估期间发送的通知而变化,PEP 无法假设它们会保持不变。

对于 PEP_NOTIFY_PPM_PARK_SELECTION 通知,AcceptProcessorNotification 函数始终在 IRQL = DISPATCH_LEVEL 时调用。

PEP_NOTIFY_PPM_PERF_CHECK_COMPLETE

处理

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

通知

该值为 PEP_NOTIFY_PPM_PERF_CHECK_COMPLETE。

数据

指向PEP_PPM_PERF_CHECK_COMPLETE结构的指针。

备注

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

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

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

PEP_NOTIFY_PPM_QUERY_COORDINATED_DEPENDENCY

处理

包含用于目标处理器的 PEP 的设备句柄的 PEPHANDLE 结构。 如果通知不面向特定处理器,则为 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 填入空值。 然后,ExpectedState 字段引用协调空闲状态的索引。

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

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

PEP_NOTIFY_PPM_QUERY_COORDINATED_STATE_NAME

处理

包含用于目标处理器的 PEP 的设备句柄的 PEPHANDLE 结构。 如果通知不面向特定处理器,则为 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 通知,AcceptProcessorNotification 例程始终在 IRQL = PASSIVE_LEVEL 调用。

PEP_NOTIFY_PPM_QUERY_COORDINATED_STATES

处理

包含用于目标处理器的 PEP 的设备句柄的 PEPHANDLE 结构。 如果通知不面向特定处理器,则为 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通知,AcceptProcessorNotification例程始终在 IRQL = PASSIVE_LEVEL 调用。

PEP_NOTIFY_PPM_QUERY_PROCESSOR_STATE_NAME

处理

包含用于目标处理器的 PEP 的设备句柄的 PEPHANDLE 结构。 如果通知不面向特定处理器,则为 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 通知,AcceptProcessorNotification 例程总是在 IRQL = PASSIVE_LEVEL 调用。

PEP_NOTIFY_PPM_ENTER_SYSTEM_STATE

处理

包含用于目标处理器的 PEP 的设备句柄的 PEPHANDLE 结构。 如果通知不面向特定处理器,则为 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 的参数。

处理

包含用于目标处理器的 PEP 的设备句柄的 PEPHANDLE 结构。 如果通知不面向特定处理器,则为 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 (查询离散性能状态的通知)

处理

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

通知

值:PEP_NOTIFY_PPM_QUERY_DISCRETE_PERF_STATES。

数据

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

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

PEP_NOTIFY_PPM_QUERY_DOMAIN_INFO

处理

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

通知

值 PEP_NOTIFY_PPM_QUERY_DOMAIN_INFO。

数据

指向PEP_PPM_QUERY_DOMAIN_INFO结构的指针。

备注

查询有关性能域信息的可选通知。 此通知是在 PASSIVE_LEVEL 级别发送的。 可以在任何处理器上执行时发送它。

PEP_NOTIFY_PPM_RESUME_FROM_SYSTEM_STATE

处理

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

通知

值PEP_NOTIFY_PPM_RESUME_FROM_SYSTEM_STATE。

数据

指向PEP_PPM_RESUME_FROM_SYSTEM_STATE结构的指针。

备注

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