デバイスの電源管理リファレンス

ドライバーは、デバイスのハードウェアを複数の論理コンポーネントに分割して、きめ細かな電源管理を行うことができます。 コンポーネントには、同じデバイス内の他のコンポーネントの電源状態から独立して管理できる一連の電源状態があります。 F0 状態では、コンポーネントは完全にオンになります。 コンポーネントは、追加の低電力状態 F1、F2 などをサポートできます。

デバイスの電源ポリシー オーナーは、通常、デバイスのファンクション ドライバーです。 このドライバーは、コンポーネント レベルの電源管理を有効にするために、デバイスを電源管理フレームワーク (PoFx) に登録します。 デバイスを登録することで、ドライバーは、コンポーネントがアクティブに使用されているときとアイドル状態のときに PoFx に通知する責任を負います。 PoFx は、コンポーネント アクティビティ、待機時間の許容範囲、予想されるアイドル時間、およびウェイク要件に関する情報に基づいて、デバイスのアイドル状態をインテリジェントに選択します。 PoFx は、コンポーネント レベルで電力使用量を制御することで、システムの応答性を維持しながら電力要件を削減できます。 詳細については、「コンポーネント レベルの電源管理」を参照してください。

デバイス電源管理ルーチン

これらのルーチンは、デバイスの電源管理を有効にするために、電源管理フレームワーク (PoFx) によって実装されます。 これらのルーチンは、デバイスの電源ポリシー所有者 (PPO) であるドライバーによって呼び出されます。 通常、デバイスのファンクション ドライバーが、このデバイスの PPO です。

トピック 説明
PoFxActivateComponent PoFxActivateComponent ルーチンは、指定されたコンポーネントのアクティブ化参照カウントをインクリメントします。
PoFxCompleteDevicePowerNotRequired PoFxCompleteDevicePowerNotRequired ルーチンは、呼び出し元のドライバーがドライバーの DevicePowerNotRequiredCallback コールバック ルーチンへの呼び出しに対する応答を完了したことを電源管理フレームワーク (PoFx) に通知します。
PoFxCompleteIdleCondition PoFxCompleteIdleCondition ルーチンは、指定されたコンポーネントが保留中の変更を完了してアイドル状態になったことを電源管理フレームワーク (PoFx) に通知します。
PoFxCompleteIdleState PoFxCompleteIdleState ルーチンは、指定されたコンポーネントが保留中の変更を完了して Fx 状態になったことを電源管理フレームワーク (PoFx) に通知します。
PoFxIdleComponent PoFxIdleComponent ルーチンは、指定されたコンポーネントのアクティブ化参照カウントをデクリメントします。
PoFxIssueComponentPerfStateChange PoFxIssueComponentPerfStateChange ルーチンは、デバイス コンポーネントを特定のパフォーマンス状態にする要求を送信します。
PoFxIssueComponentPerfStateChangeMultiple PoFxIssueComponentPerfStateChangeMultiple ルーチンは、デバイス コンポーネントに対して複数のパフォーマンス状態セットのパフォーマンス状態を同時に変更する要求を送信します。
PoFxNotifySurprisePowerOn PoFxNotifySurprisePowerOn ルーチンは、他のデバイスに電源を供給した副次的な結果としてデバイスがオンになっていることを電源管理フレームワーク (PoFx) に通知します。
PoFxPowerControl PoFxPowerControl ルーチンは、電源管理フレームワーク (PoFx) に電源制御要求を送信します。
PoFxQueryCurrentComponentPerfState PoFxQueryCurrentComponentPerfState ルーチンは、コンポーネントのパフォーマンス状態セット内のアクティブなパフォーマンス状態を取得します。
PoFxRegisterComponentPerfStates PoFxRegisterComponentPerfStates ルーチンは、電源管理フレームワーク (PoFx) によって、パフォーマンス状態管理用のデバイス コンポーネントを登録します。
PoFxRegisterDevice PoFxRegisterDevice ルーチンは、デバイスを電源管理フレームワーク (PoFx) に登録します。
PoFxReportDevicePoweredOn PoFxReportDevicePoweredOn ルーチンは、デバイスが要求された D0 (完全にオン) 電源状態への切り替えを完了したことを電源管理フレームワーク (PoFx) に通知します。
PoFxSetComponentLatency PoFxSetComponentLatency ルーチンは、指定されたコンポーネントをアイドル状態からアクティブ条件に切り替える際に許容される最大待機時間を指定します。
PoFxSetComponentResidency PoFxSetComponentResidency ルーチンは、コンポーネントがアイドル状態になった後、アイド ル状態が続くと予想される時間を設定します。
PoFxSetComponentWake PoFxSetComponentWake ルーチンは、指定されたコンポーネントがアイドル状態になったときに、ドライバーがウェイクするようにアームを設定するかどうかを示します。
PoFxSetDeviceIdleTimeout PoFxSetDeviceIdleTimeout ルーチンは、デバイスの最後のコンポーネントがアイドル状態になってから、電源管理フレームワーク (PoFx) がドライバーの DevicePowerNotRequiredCallback コールバック ルーチンを呼び出すまでの最小時間間隔を指定します。
PoFxStartDevicePowerManagement PoFxStartDevicePowerManagement ルーチンは、電源管理フレームワーク (PoFx) を使用してデバイスの登録を完了し、デバイスの電源管理を開始します。
PoFxUnregisterDevice PoFxUnregisterDevice ルーチンは、電源管理フレームワーク (PoFx) からデバイスの登録を削除します。

デバイス電源管理コールバック

これらのコールバック ルーチンは、電源管理フレームワーク (PoFx) がデバイスの電源管理を有効にするために必要です。 これらのコールバック ルーチンは、デバイスの電源ポリシー オーナーであるドライバーによって実装されます。 PoFx はこれらのルーチンを呼び出して、デバイス内のコンポーネントの電源状態を照会および構成します。

トピック 説明
ComponentActiveConditionCallback ComponentActiveConditionCallback コールバック ルーチンは、指定されたコンポーネントがアイドル状態からアクティブ条件への切り替えを完了したことをドライバーに通知します。
ComponentIdleConditionCallback ComponentIdleConditionCallback コールバック ルーチンは、指定されたコンポーネントがアクティブ条件からアイドル状態への移行を完了したことをドライバーに通知します。
ComponentIdleStateCallback ComponentIdleStateCallback コールバック ルーチンは、指定されたコンポーネントの Fx 電源状態に対する保留中の変更をドライバーに通知します。
ComponentPerfStateCallback ComponentPerfStateCallback コールバック ルーチンは、コンポーネントのパフォーマンス状態を変更する要求が完了したことをドライバーに通知します。
DevicePowerNotRequiredCallback DevicePowerNotRequiredCallback コールバック ルーチンは、デバイスが D0 電源状態を維持する必要がないことをデバイス ドライバーに通知します。
DevicePowerRequiredCallback DevicePowerRequiredCallback コールバック ルーチンは、デバイスが D0 電源状態に移行する必要があることをデバイス ドライバーに通知します。
PowerControlCallback PowerControlCallback コールバック ルーチンは、電源管理フレームワーク (PoFx) によって要求される電源制御操作を実行します。

デバイスの電源管理構造体

電源管理フレームワーク (PoFx) では、デバイスの電源管理をサポートするために以下の構造体が定義されています。

トピック 説明
PO_FX_COMPONENT_V1 PO_FX_COMPONENT_V2 PO_FX_COMPONENT 構造体は、デバイス内のコンポーネントの電源状態属性を記述します。
PO_FX_COMPONENT_IDLE_STATE PO_FX_COMPONENT_IDLE_STATE 構造体は、デバイス内のコンポーネントの Fx 電源状態の属性を指定します。
PO_FX_COMPONENT_PERF_INFO PO_FX_COMPONENT_PERF_INFO 構造体は、デバイス内の 1 つのコンポーネントのすべてのパフォーマンス状態のセットを記述します。
PO_FX_COMPONENT_PERF_SET PO_FX_COMPONENT_PERF_SET 構造体は、デバイス内の 1 つのコンポーネントのパフォーマンス状態のセットを表します。
PO_FX_DEVICE_V1 PO_FX_DEVICE_V2 PO_FX_DEVICE_V3 PO_FX_DEVICE 構造体は、電源管理フレームワーク (PoFx) に対するデバイスの電源属性について説明します。
PO_FX_PERF_STATE PO_FX_PERF_STATE 構造体は、デバイス内の 1 つのコンポーネントのパフォーマンス状態を表します。
PO_FX_PERF_STATE_CHANGE PO_FX_PERF_STATE_CHANGE 構造体は、PoFxIssueComponentPerfStateChange ルーチンまたは PoFxIssueComponentPerfStateChangeMultiple ルーチンの呼び出しによって要求されるパフォーマンス状態の変更に関する状態が格納されています。

デバイスの電源管理列挙体

電源管理フレームワーク (PoFx) では、デバイスの電源管理をサポートするために、以下の列挙体が定義されています。

トピック 説明
PO_FX_PERF_STATE_TYPE PO_FX_PERF_STATE_TYPE 列挙体には、PO_FX_COMPONENT_PERF_SET のパフォーマンス状態の種類を表す値が格納されています。
PO_FX_PERF_STATE_UNIT PO_FX_PERF_STATE_UNIT 列挙体には、PO_FX_COMPONENT_PERF_SET のパフォーマンス状態によって制御される単位の種類を表す値が含まれています。

デバイスの電源管理定数

PO_FX_FLAG_XXX フラグ ビット

PO_FX_FLAG_XXX 定数は、コンポーネントの条件変更要求が同期的に実行されるか、非同期的かを示すフラグ ビットです。

#define PO_FX_FLAG_BLOCKING   0x1
#define PO_FX_FLAG_ASYNC_ONLY 0x2

PO_FX_FLAG_XXX 定数

定数 説明
PO_FX_FLAG_BLOCKING 条件の変更を同期的に行います。 このフラグが設定されている場合、条件の変更を要求するルーチンは、コンポーネント ハードウェアが新しい条件への移行を完了するまで、呼び出し元のドライバーに制御を返しません。 このフラグは、呼び出し元が IRQL < DISPATCH_LEVEL で実行されている場合にのみ使用できます。
PO_FX_FLAG_ASYNC_ONLY 条件変更を完全に非同期に行います。 このフラグが設定されている場合、呼び出し元のドライバーのコールバック ルーチンは、条件変更を要求するルーチンが呼び出されるスレッド以外のスレッドから呼び出されます。 このため、条件変更を要求したルーチンは、コールバックの完了を待たずに常に非同期で戻ります。

PO_FX_FLAG_XXX に関する注釈

次のルーチンの Flags パラメーターは、PO_FX_FLAG_XXX 定数に設定できます。

PO_FX_FLAG_BLOCKINGPO_FX_FLAG_ASYNC_ONLY フラグ ビットは相互に排他的です。 呼び出し元は Flags パラメーターでどちらか一方のフラグ ビットをオンにできますが、両方のフラグ ビットをオンにすることはできません。

PO_FX_FLAG_XXX の要件

バージョン ヘッダー
Windows 8 以降でサポートされています。 Wdm.h

PO_FX_FLAG_PERF_XXX フラグ ビット

PO_FX_FLAG_PERF_XXX 定数は、電源管理フレームワーク (PoFx) がデバイス コンポーネントのパフォーマンス状態を管理する方法を定義するフラグ ビットです。

#define PO_FX_FLAG_PERF_PEP_OPTIONAL   0x1
#define PO_FX_FLAG_PERF_QUERY_ON_F0 0x2
#define PO_FX_FLAG_PERF_QUERY_ON_ALL_IDLE_STATES 0x4
定数 説明
PO_FX_FLAG_PERF_PEP_OPTIONAL 1 (0x1) ドライバーがプラットフォーム拡張プラグイン (PEP) からの支援なしにパフォーマンス状態を変更できること、またはドライバーがログ記録のみを目的として PoFx にパフォーマンス状態を登録していることを示します。 このフラグがオンの場合、PEP がコンポーネントのパフォーマンス状態をサポートしていなくても、PoFxRegisterComponentPerfStates 呼び出しが成功します。
PO_FX_FLAG_PERF_QUERY_ON_F0 2 (0x2) 一部のデバイスでは、PEP がコンポーネントをアイドル状態にする際に、コンポーネントに設定されたパフォーマンス状態を特定のパフォーマンス状態 (公称パフォーマンス状態と呼ばれます) に切り替える必要があります。 コンポーネントに公称パフォーマンス状態が含まれている場合、ドライバーはこのフラグをオンにします。この場合、PoFx は PEP に照会して、コンポーネントが F0 に移行したときの現在のパフォーマンス状態を判断します。
PO_FX_FLAG_PERF_QUERY_ON_ALL_IDLE_STATES 4 (0x4) 一部のデバイスでは、PEP がコンポーネントをアイドル状態間で切り替える際に、コンポーネントに設定されたパフォーマンス状態を特定のパフォーマンス状態 (公称パフォーマンス状態と呼ばれます) に切り替える必要があります。 このコンポーネントに公称パフォーマンス状態が含まれている場合、ドライバーはこのフラグをオンにします。この場合、PoFx は PEP に照会して、コンポーネントがアイドル状態間で遷移したときの現在のパフォーマンス状態を判断します。

PO_FX_FLAG_PERF_XXX に関する注釈

PoFxRegisterComponentPerfStates ルーチンの Flags パラメーターには PO_FX_FLAG_PERF_XXX 定数を設定できます。

PO_FX_FLAG_PERF_XXX の要件

要件 バージョン
Windows 10 以降でサポートされています。 Wdm.h