PPM 電源制御コード

このトピックで説明する電源制御コードは、プラットフォーム拡張プラグイン (PEP) によって使用されます。 電源制御要求は、I/O 制御要求 (IOCTL) に似ています。 ただし、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 ルーチンを呼び出して、送信対象が PEP の作業項目であることを PoFx に通知します。 PoFx は、PEP に PEP_DPM_WORK 通知を送信して、この呼び出しに応答します。 PEP は、パーキング ページ情報の電源制御作業要求を送信することで応答します。 この要求には、WorkType メンバーが PepWorkRequestPowerControl に設定される、PEP によって割り当てられた PEP_WORK_INFORMATION 構造体と、PEP によって割り当てられた PEP_WORK_POWER_CONTROL 構造体を指す PowerControl メンバーが含まれています。 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 キロバイトのメモリ ブロックです。 PEP は、メールボックスの一部を使用して、プロセッサ固有のコンテキスト データを格納する場合があります。 詳細については、https://www.acpica.org/related-documentsで「Multiprocessor Startup for Arm Platforms(Arm プラットフォームのマルチプロセッサの起動)」というタイトルのドキュメントを参照してください。

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 ルーチンを呼び出して、送信対象が PEP の作業項目であることを PoFx に通知します。 PoFx は、PEP に PEP_DPM_WORK 通知を送信して、この呼び出しに応答します。 PEP は、パフォーマンス制約の変更に対する電源制御作業要求を送信することで応答します。 この要求には、WorkType メンバーが PepWorkRequestPowerControl に設定される、PEP によって割り当てられた PEP_WORK_INFORMATION 構造体と、PEP によって割り当てられた PEP_WORK_POWER_CONTROL 構造体を指す PowerControl メンバーが含まれています。 PEP_WORK_POWER_CONTROL 構造体の PowerControlCode メンバーは、GUID_PPM_PERF_CONSTRAINT_CHANGE に設定されます。 この構造体の InBuffer メンバーと OutBuffer メンバーの両方を NULL にする必要があります。 この電源制御要求に応答して、PoFx は PEP にPEP_NOTIFY_PPM_PERF_CONSTRAINTS 通知を送信して、新しいプロセッサ パフォーマンス制限を取得します。