POFXCALLBACKPROCESSORHALT 回调函数 (pepfx.h)
ProcessorHalt 例程准备要停止的处理器。
语法
POFXCALLBACKPROCESSORHALT Pofxcallbackprocessorhalt;
NTSTATUS Pofxcallbackprocessorhalt(
[in] ULONG Flags,
[in, out, optional] PVOID Context,
[in] PPROCESSOR_HALT_ROUTINE Halt
)
{...}
参数
[in] Flags
指示处理器将输入的空闲状态的属性的标志。 Flags 参数设置为零或以下一个或多个标志位的按位 OR。
标志名称 | 价值 | 描述 |
---|---|---|
PROCESSOR_HALT_CACHE_FLUSH_OVERRIDE | 0x01 | PEP 的 Halt 回调例程负责刷新处理器的缓存。 如果 未 设置此标志,ProcessorHalt 将在进入处理器空闲状态时刷新缓存,并在退出此状态时使缓存失效。 |
PROCESSOR_HALT_CACHE_COHERENT | 0x02 | 准备处理器以进入空闲状态,处理器的缓存将保持一致。 |
PROCESSOR_HALT_CONTEXT_RETAINED | 0x04 | 准备处理器以进入将保留处理器线程上下文的空闲状态。 |
PROCESSOR_HALT_RETURN_NOT_SAFE | 0x08 | PEP 的 Halt 回调例程保证不返回。 如果 “停止” 回调将处理器转换为硬件无法取消的上下文丢失电源关机状态,请设置此标志。 设置此标志后,作系统会将 Halt 回调的返回视为致命错误。 |
PROCESSOR_HALT_VIA_PSCI_CPU_SUSPEND | 0x16 |
[in, out, optional] Context
指向 PEP 定义的处理器停止上下文的指针。 此指针作为参数传递给 Halt 回调例程。 此上下文对 Windows 电源管理框架(PoFx)不透明。
[in] Halt
指向 PEP 实现的 停止 回调例程的指针。 PoFx 在准备停止处理器后调用此例程。 在此回调期间,PEP 预期会将处理器转换为已停止的 状态。
返回值
ProcessorHalt 如果处理器已成功准备好停止,则返回STATUS_SUCCESS。 可能的错误返回值包括以下状态代码。
返回值 | 描述 |
---|---|
|
Halt 参数为 NULL;或 标志中指定的标志值无效;或 标志 包含标志位的非法组合。 有关详细信息,请参阅“备注”。 |
|
PEP 的 Halt 回调例程意外从未保留处理器的硬件上下文的空闲状态返回。 |
言论
此例程由电源管理框架(PoFx)实现,由平台扩展插件(PEP)调用。 PEP_KERNEL_INFORMATION_STRUCT_V3 结构的 ProcessorHalt 成员是指向 ProcessorHalt 例程的指针。
在停止处理器之前,PEP 调用 ProcessorHalt 例程,让 PoFx 有机会保存处理器的硬件上下文。 如有必要,ProcessorHalt 将此状态保存在 PoFx 中,以便在处理器退出空闲状态时可以稍后还原状态。 准备处理器进入空闲状态后,ProcessorHalt 调用 PEP 的 停止 回调例程来停止处理器。
作为 PEP 处理 PEP_NOTIFY_PPM_IDLE_EXECUTE 通知的一部分,PEP 必须将处理器转换为 PEP 已选择的空闲状态。 以下是进入处理器空闲状态的两种方法:
- 对于处理器的空闲状态,处理器的缓存保持一致,以便维护所有系统和处理器状态,PEP 可以直接进入空闲状态,而无需首先调用 ProcessorHalt。
- 对于处理器缓存可能无法保持一致的处理器空闲状态,或者处理器硬件上下文未保留的空闲状态,PEP 必须在将处理器转换为空闲状态之前调用 ProcessorHalt。
-
PROCESSOR_HALT_CONTEXT_RETAINED = 1,PROCESSOR_HALT_RETURN_NOT_SAFE = 1
PEP 的 Halt 回调例程必须从保留上下文的任何状态返回。
-
PROCESSOR_HALT_CACHE_FLUSH_OVERRIDE = 1,PROCESSOR_HALT_CACHE_COHERENT = 1
仅当进入不一致缓存的空闲状态时,才应设置缓存刷新重写标志 。
-
PROCESSOR_HALT_CACHE_FLUSH_OVERRIDE = 0,PROCESSOR_HALT_CACHE_COHERENT = 0
必须为任何非缓存一致停止设置 cache-flush-override 标志。
-
PROCESSOR_HALT_CONTEXT_RETAINED = 0,PROCESSOR_HALT_CACHE_COHERENT = 1
任何失去处理器硬件上下文的空闲状态(因此使用 多处理器停车协议 退出空闲状态并将控制权返回到作系统)都不是缓存一致的状态。
PEP 可以在 IRQL <= HIGH_LEVEL 调用此例程。
要求
要求 | 价值 |
---|---|
最低支持的客户端 | 从 Windows 10 开始支持。 |
目标平台 | 窗户 |
标头 | pepfx.h (include Pep_x.h) |
IRQL | <= HIGH_LEVEL |