PPM 电源控制代码

本主题中所述的电源控制代码由平台扩展插件 (PEP) 使用。 电源控制请求类似于 IOCTL) (I/O 控制请求。 但是,与 IOCTL 不同,电源控制请求将直接发送到 Window 电源管理框架 (PoFx) ,并且不会由设备堆栈中的其他设备驱动程序观察到。

以下是 PPM 电源控制代码:

代码 语法 说明
PEP_PPM_POWER_CONTROL_QUERY_PARKING_PAGE

{38BD8901-AB20-4908-ABAA-AC34674BDFF3}

DEFINE_GUID (PEP_PPM_POWER_CONTROL_QUERY_PARKING_PAGE,

0x38bd8901、0xab20、0x4908、0xab、0xaa、0xac、0x34、0x67、0x4b、0xdf、0xf3) ;

PEP 使用代码查询 Windows 电源管理框架 (PoFx) ,以获取有关分配给处理器的停车页面的信息。

为了确定处理器的停车页,此处理器的平台扩展插件 (PEP) 向 PoFx 提交PEP_PPM_POWER_CONTROL_QUERY_PARKING_PAGE电源控制请求。

为了启动此电源控制请求,PEP 首先调用 RequestWorker 例程来通知 PoFx PEP 有一个工作项要提交。 PoFx 通过向 PEP 发送PEP_DPM_WORK通知来响应此调用。 PEP 通过提交电源控制工作请求来响应停车页面信息。 此请求包括 PEP 分配的PEP_WORK_INFORMATION结构,其中 WorkType 成员设置为 PepWorkRequestPowerControl,PowerControl 成员指向 PEP 分配的PEP_WORK_POWER_CONTROL结构。 PEP_WORK_POWER_CONTROL 结构的 PowerControlCode 成员设置为PEP_PPM_POWER_CONTROL_QUERY_PARKING_PAGE。 此结构的 InBuffer 成员必须为 NULL,并且 OutBuffer 成员必须指向 PEP 分配的PEP_PPM_CONTEXT_QUERY_PARKING_PAGE结构。 为了响应此电源控制请求,PoFx 将停车页的虚拟地址和物理地址写入PEP_PPM_CONTEXT_QUERY_PARKING_PAGE结构。

PEP_PPM_POWER_CONTROL_QUERY_PARKING_PAGE电源控制请求特定于 Arm,x86 和 x64 处理器不支持。 在 Arm 多处理器系统中,停车页是一个 4 KB 内存块,操作系统将其用作邮箱来控制从空闲状态启动的处理器。 PEP 可能会使用邮箱的某些部分来存储特定于处理器的上下文数据。 有关详细信息,请参阅 上标题为“Arm 平台的多处理器启动” https://www.acpica.org/related-documents的文档。

GUID_PPM_PERF_CONSTRAINT_CHANGE

{29181FA1-4BF3-4c2e-B314-A6D226322B00}

DEFINE_GUID (GUID_PPM_PERF_CONSTRAINT_CHANGE,

0x29181fa1、0x4bf3、0x4c2e、0xb3、0x14、0xa6、0xd2、0x26、0x32、0x2b、0x0) ;

PEP 使用代码通知 Windows 电源管理框架 (PoFx) 处理器的性能限制必须更改,以适应外部约束 (电源预算、热约束、电源等) 。

此控制代码不使用任何输入或输出缓冲区。

为了启动此电源控制请求,PEP 首先调用 RequestWorker 例程来通知 PoFx PEP 有一个工作项要提交。 PoFx 通过向 PEP 发送PEP_DPM_WORK通知来响应此调用。 PEP 通过提交电源控制工作请求来响应性能约束更改。 此请求包括 PEP 分配的PEP_WORK_INFORMATION结构,其中 WorkType 成员设置为 PepWorkRequestPowerControl,PowerControl 成员指向 PEP 分配的PEP_WORK_POWER_CONTROL结构。 PEP_WORK_POWER_CONTROL 结构的 PowerControlCode 成员设置为GUID_PPM_PERF_CONSTRAINT_CHANGE。 此结构的 InBuffer 和 OutBuffer 成员必须为 NULL。 为了响应此电源控制请求,PoFx 将向 PEP 发送PEP_NOTIFY_PPM_PERF_CONSTRAINTS通知,以获取新的处理器性能限制。