デバイス電源管理

ACPI 6.3仕様 では、デバイスのデバイスの電源情報を指定する名前空間オブジェクトのセットを定義します。 たとえば、オブジェクトのセットでは、サポートされている各デバイスの電源状態でデバイスが必要とする電源リソースを指定できます。 別のオブジェクトの種類では、ハードウェアイベントに応答して低電力状態から復帰するデバイスの機能を記述できます。

Windowsでのデバイスの電源管理

システムの実行中(つまり、システムはACPIで定義された動作状態、S0)、個々のデバイスは、電力を節約するために、アクティビティに応じて、デバイスの電源状態間の遷移を行うことができます。 従来のPCシステムでは、ACPI定義のスリープ状態 (S1~S4) も電力を節約するために使用されますが、これらの切断された待機時間の長いスリープ状態はWindows SoCプラットフォームでは使用されません。 そのため、バッテリの寿命は、プラットフォームが実行時のデバイスの電源管理を実装する方法に大きく依存します。

SoCに統合されているデバイスは、Windows Power Framework (PoFx) を使用して電源管理できます。 これらのフレームワークに統合されたデバイスは、SoCの電源とクロックの制御の詳細を認識しているSoC固有の電源エンジンプラグイン (microPEP) を使用してPoFxによって電源管理されます。 PoFxの詳細については、 「電源管理フレームワークの概要」 を参照してください。

SoCに統合されていない周辺機器の場合、WindowsではACPIデバイス電源管理が使用されます。 これらのACPIで管理されたデバイスでは、デバイスドライバースタック (通常は関数またはクラスドライバー) の電源ポリシー所有者がデバイスの電源状態の移行に関する決定を行い Windows ACPIドライバーであるAcpi.sysがASL制御メソッドを呼び出して、必要なプラットフォーム固有の電源制御を適用します。

ACPIデバイス電源管理を単独で使用することも、SoCデバイスの電源管理にmicroPEPと組み合わせて使用することもできます。

「ACPIのデバイス電源管理」 で説明されているように、Windowsでは、ACPI 5.0仕様で定義されているD3cold電源管理機能がサポートされています。 このサポートを使用すると、デバイス、プラットフォーム、およびドライバーは、実行時のアイドル期間中にデバイスの電源が完全に削除されるようにオプトインできます。 この機能により、バッテリの寿命が大幅に向上します。 ただし、D0に正常に戻るためには、影響を受けるすべてのコンポーネントで電源の削除がサポートされている必要があります。 このため、ドライバー (バスと関数) とプラットフォーム自体は、サポートされていることを示す必要があります。 D3coldドライバーのオプトインの詳細については、 「ドライバーでのD3coldのサポート」 を参照してください。

ACPIでのデバイスの電源管理

名前空間デバイスは、D0 (フル機能、つまり 「オン」)からD3 (機能なし、または"off")までの最大4つのデバイスの電源状態をサポートします。 各状態にはさまざまな電力要件があり、番号が大きい状態は、番号が小さい状態よりも電力消費量が少なくなります。 さらに、D3 (オフ) 状態には、D3hotとD3coldの2つのサブ状態があります。 D3hotサブ状態では、バス固有のソフトウェアコマンドに応答できるように、デバイスが親バス上でアクセス可能な状態を維持する必要があります。 この要件と、それを満たすために使用される電源は、D3coldで削除されます。 最後に、デバイスは、ハードウェアイベントによって低電力状態からスリープ解除し、必要に応じてプラットフォームをアイドル状態から復帰させることができます。

プラットフォームは、プラットフォーム全体のOSPM機能メソッドを使用して要求されたときに、"_PR3 Support"機能 (ビット2) のOSコントロールを付与することによって、D3coldのサポートを示します。 詳細については ACPI 5.0仕様のセクション6.2.10.2 「プラットフォーム全体のOSPM機能」 を参照してください。

電源管理デバイスは、子オブジェクトを使用して、オペレーティングシステムに対して電源機能を記述します。 次のセクションでは、これらの機能とオブジェクトについて説明します。

電源リソースと状態

デバイスは、その状態にするために必要な電源リソースのセットを一覧表示することによって、電源状態のサポートを宣言します。 ACPI電源リソースは、デバイスとそれらを駆動するクロック信号に電源を供給する電圧レールを表します。 これらのリソースは、名前空間のルートで宣言されます。 各電源リソースには、_ONと_OFFメソッドがあり、これを使用して制御され、その状態を報告する_STAメソッドがあります。 詳細については ACPI 5.0仕様のセクション7.1 「電源リソースオブジェクトの宣言」 を参照してください。

Windows ACPIドライバーであるAcpi.sysは、リソースを共有するデバイス間の電源依存関係を監視し、これらのデバイスが電源状態を遷移するときに、デバイスで実際に必要とされる電源リソースのみが特定の時点でオンになっていることを確認します。

電源リソースの要件(_PRx)

サポートされているデバイスの電源状態ごとに、電源リソースの要件(_PRx) オブジェクトがあります。ここで、x=0、1、2、または3です。 デバイス ドライバーが新しい電源状態への移行を決定すると、Acpi.sys は、新しい状態に必要なすべての電源リソースがオンになり、使用されなくなったリソースがオフになっていることを確認します。

サポートされているデバイスの状態 使用するリソース要件オブジェクト 要件オブジェクトに含めるリソース
D0 (必須) _PR0 デバイスの完全な機能に必要なすべての電源とクロック。
D1 _PR1 この状態のクラス定義の機能低下に必要な電力またはクロック。
D2 _PR2 この状態のクラス定義の機能低下に必要な電力またはクロック。
D3hot (必須) _PR3 デバイスがバスに表示され、バス固有のコマンドに応答するために必要な電源またはクロックのみ。

特定のプラットフォームがD3cold機能をサポートしており、デバイスのデバイスドライバーがD3coldにオプトインしている場合、デバイスの_PR3電源リソースは、他のデバイスで使用されていない場合は、D3coldへの移行後しばらくしてオフになります。

D3coldをサポートするデバイスの電源リソース要件の詳細については 「D3coldのファームウェア要件」 を参照してください。

デバイスの電源状態(_PSx)

電源状態メソッド_PSxがあります。ここで、x=0、1、2、または3で、サポートされているデバイスの電源状態Dxごとに指定します。 このメソッドは省略可能ですが、存在する場合は、状態の電源リソースがオフになる前と、状態の電源リソースがオンになった後に呼び出されます。 _PSxは、電源サイクルに必要なプラットフォーム固有のアクションを実行することを目的としています。 _PSx は、ファンクション ドライバーに割り当てられているデバイス レジスタにアクセスしたり、バス ドライバーに割り当てられているバス標準レジスタにアクセスしたり、電源リソースをオンまたはオフに切り替えたりすることはできません。これは、Acpi.sys 用に予約された操作です。

ウェイク機能

電源管理デバイスは、低電力状態のときにイベントを検出し、それらを処理するためにプラットフォームをウェイクアップさせることができます。 この機能を有効にするには、Windowsにはプラットフォームとデバイスの両方の機能に関する情報が必要です。

Sxデバイスのスリープ解除状態(_SxW)

特定のプラットフォームでは、スリープ解除機能をサポートするデバイスの状態と、ウェイクアップイベントに応答できるシステム状態との間に特定のマッピングがあります。 ACPIは、オペレーティングシステムにこの情報を提供する_SxWオブジェクトを定義します。 サポートされているシステムの電源状態 (Sx) ごとにSxWオブジェクトがあります。 SoCプラットフォームは常にS0にあるため、ここで関心のある唯一のオブジェクトは_S0Wです。 このオブジェクトは、デバイスのウェイクアップシグナルに応答して低電力アイドル状態から復帰するプラットフォームの機能を指定します。 オブジェクトは、システムの低電力アイドル状態中にデバイスのターゲットD状態を決定するためにWindowsによって使用されます。 _S0Wの詳細については ACPI 5.0仕様のセクション7.2.20 「_S0W (S0デバイスウェイク状態) 」 を参照してください。

ほとんどのSoCプラットフォームでは、デバイスはアイドル状態のときにD3状態に積極的に電源管理され、システムはデバイスがこの状態のときに低電力アイドル状態から復帰できるようになります。 このようなシステムでは、_S0Wオブジェクトは3 (D3coldもサポートしている場合は4)を返します。

_S0W (4) は、デバイスがスリープ解除をサポートしているかどうかに関係なく、D3Coldの要件です。

任意のD状態を最も低い電源ウェイクアップ可能な状態として指定でき、一部のデバイスクラスまたはバスでは異なる値を使用します。 たとえば、SDIOおよびUSB接続デバイスは、この状態に状態D2を使用します。

Windows 7からWindows 8またはWindows 8.1へのデバイスドライバーの移行を容易にするために、デバイスで_S4Wも指定する必要がある場合があります。 現時点では、この要件を持つ唯一のデバイスクラスはネットワーク (Ndis.sys) です。

ウェイクアップ対応の割り込み(_CRS)

デバイスのリソースの説明は、デバイスが割り込みを"wake対応" (ExclusiveAndWakeまたはSharedAndWake) としてマークすることによって、ウェイクアップイベントを検出して通知できることを示しています。 Windowsとデバイスドライバーは、このような割り込みの特別な処理を提供して、デバイスが低電力状態に遷移したときに有効になるようにします。 詳細については ACPI 5.0仕様のセクション6.4.3.6 「拡張割り込み記述子」 、およびセクション6.4.3.8.1 「GPIO接続記述子」 の割り込みとGpioIntリソース記述子の説明を参照してください。

スリープ解除の有効化

ユーザーシナリオまたはシステムポリシーによっては、スリープ解除対応デバイスがスリープ解除用に実際に準備されていない場合があります。 そのため、デバイスがアイドル状態のときに、スリープ解除対応の割り込みが有効になっている場合と、有効になっていない場合があります。 割り込みを有効にするだけでなく、Windowsは次のメカニズムを使用してデバイスのスリープ解除を有効にします。

デバイススリープ解除(_DSW)

ACPIは、オペレーティングシステムが次のスリープまたは低電力アイドル期間についてACPIプラットフォームファームウェアに通知する方法として、_DSWオブジェクトを定義します。 このオブジェクトは省略可能であり、プラットフォーム固有のウェイクハードウェアを事前に構成する必要がある場合にのみ使用されます。 デバイスのターゲットD状態とシステムのターゲットS状態の両方が提供されます。 D状態とS状態の組み合わせは、デバイスの_SxWオブジェクト (s) によって提供される情報に常に準拠します。

スリープ解除の電源リソース(_PRW)

場合によっては、デバイスのスリープ解除を有効にするために、追加の電源リソースをオンにする必要があります。 この場合、デバイスは、追加の電源リソースを一覧表示する_PRWオブジェクトを提供できます。 Windows ACPIドライバーであるAcpi.sysは、これらの電源リソースを通常どおりに管理し、デバイス(つまり、スリープ解除が有効なデバイス)で必要なときにオンになっていることを確認し、それ以外の場合はオフにします。

_PRWは、従来の (完全なACPIハードウェア) PCプラットフォームのスリープ解除機能を定義するためにも使用されます。