ACPI 6.3 仕様では、デバイスのデバイス電源情報を指定する名前空間オブジェクトのセットを定義します。 たとえば、1 つのオブジェクト セットで、サポートされている各デバイスの電源状態でデバイスに必要な電源リソースを指定できます。 別の種類のオブジェクトは、デバイスがハードウェア イベントに応答して低電力状態から復帰する機能を記述できます。
Windows でのデバイスの電源管理
システムの実行中 (つまり、システムが ACPI で定義された動作状態である S0) 中、個々のデバイスは、アクティビティに応じてデバイスの電源状態間を切り替えて電力を節約できます。 従来の PC システムでは、ACPI で定義されたスリープ状態 (S1 から S4) も電力を節約するために使用されますが、これらの切断された待機時間の長いスリープ状態は、Windows SoC プラットフォームでは使用されません。 そのため、バッテリ寿命は、プラットフォームで実行時デバイスの電源管理を実装する方法に大きく依存します。
SoC に統合されているデバイスは、Windows Power Framework (PoFx) を使用して電源管理できます。 これらのフレームワーク統合デバイスは、SoC 固有の電源エンジン プラグイン (microPEP) を介して PoFx によって電源管理され、SoC の電源とクロック制御の詳細を認識します。 PoFx の詳細については、「 Power Management Framework の概要」を参照してください。
SoC に統合されていない周辺機器の場合、Windows では ACPI デバイスの電源管理が使用されます。 これらの ACPI マネージド デバイスの場合、デバイス ドライバー スタック (通常は関数またはクラス ドライバー) の電源ポリシー所有者がデバイスの電源状態遷移の決定を行い、 Windows ACPI ドライバー Acpi.sysは、必要なプラットフォーム固有の電源制御を適用するために ASL 制御メソッドを呼び出します。
一部のデバイス スタックでは、ACPI Device Power Management を単独で使用することも、オン SoC デバイスの電源管理に microPEP と組み合わせて使用することもできます。
ACPI でのデバイスの電源管理で説明されているように、Windows では、ACPI 5.0 仕様で定義されている D3cold 電源管理機能がサポートされています。 このサポートを使用することで、デバイス、プラットフォーム、ドライバーは、実行時のアイドル期間中にデバイスの電源を完全に削除することを選択できます。 この機能により、バッテリ寿命が大幅に向上します。 ただし、D0 に正常に戻るには、影響を受けるすべてのコンポーネントで電力の削除をサポートする必要があります。 このため、ドライバー(バスと機能)およびプラットフォーム自体が、それをサポートしていることを示す必要があります。 D3cold ドライバーのオプトインの詳細については、「 ドライバーでの D3cold のサポート」を参照してください。
ACPI でのデバイスの電源管理
名前空間デバイスでは、最大 4 つのデバイス電源状態、番号付き D0 (全機能、または "オン") から D3 (関数なし、または "オフ") がサポートされます。 各状態は異なる電力要件を持つ可能性があり、番号付きの状態の方が、番号の小さい状態よりも消費する電力が少なくなります。 さらに、D3 (オフ) 状態には、D3hot と D3cold の 2 つのサブステートがあります。 D3hot サブステートでは、デバイスがバス固有のソフトウェア コマンドに応答できるように、親バスでアクセス可能な状態を維持する必要があります。 この要件とそれを満たすために使用される電力は、D3cold で削除されます。 最後に、デバイスを武装して、ハードウェア イベントが原因で低電力状態から復帰し、必要に応じてプラットフォームをアイドル状態から引き出すこともできます。
プラットフォームは、プラットフォーム全体の OSPM 機能メソッドを使用して要求されたときに、"_PR3 サポート" 機能 (ビット 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)
サポートされているデバイスの電源状態ごとに、x = 0、1、2、または 3 の Power Resource Requirements (_PRx) オブジェクトがあります。 デバイス ドライバーが新しい電源状態への移行を決定すると、Acpi.sys によって、新しい状態に必要なすべての電源リソースがオンになり、使用されなくなったリソースがオフになります。
| サポートされているデバイスの状態 | 使用するリソース要件オブジェクト | 要件オブジェクトに含めるリソース |
|---|---|---|
| D0 (必須) | _PR0 | デバイスの完全な機能に必要なすべての電源とクロック。 |
| D1 | _PR1 | クラス定義の機能制限に関連するこの状態で必要とされる電力やクロック。 |
| D2 | _PR2 | クラス定義の機能制限に関連するこの状態で必要とされる電力やクロック。 |
| D3hot (必須) | _PR3 | デバイスがバスに表示され、バス固有のコマンドに応答するために必要な電源またはクロックのみ。 |
特定のプラットフォームが D3cold 機能をサポートしていて、デバイスのデバイス ドライバーが D3cold にオプトインしている場合、デバイスの_PR3電源リソースは、他のデバイスで使用されていない場合は、D3Cold への移行後にオフになります。
D3cold をサポートするデバイスの電源リソース要件の詳細については、「D3cold のファームウェア要件」を参照してください。
デバイスの電源状態 (_PSx)
Power State メソッドがあります。_PSx、サポートされているデバイスの電源状態 Dx ごとに x = 0、1、2、または 3 です。 このメソッドは省略可能ですが、存在する場合は、状態の電源リソースがオフになる前と、状態の電源リソースがオンになった後に呼び出されます。 _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 Device Wake State)」を参照してください。
ほとんどの SoC プラットフォームでは、デバイスはアイドル時に D3 状態に対して積極的に電源管理され、デバイスがこの状態にある間、システムは低電力アイドル状態から復帰できます。 このようなシステムの場合、_S0W オブジェクトは 3 (D3cold もサポートしている場合は 4) を返します。
_S0W(4) は、デバイスがウェイクをサポートしているかどうかに関係なく、D3Cold の要件です。
D 状態は、最も低消費電力なウェイク可能状態として指定され、一部のデバイス クラスまたはバスでは異なる値のD状態が使用されることがあります。 たとえば、SDIO 接続デバイスと USB 接続デバイスでは、この状態に状態 D2 が使用されます。
Windows 7 から Windows 8 または Windows 8.1 へのデバイス ドライバーの移行を容易にするために、デバイスも_S4Wを提供する必要があります。 現時点では、この要件を満たしている唯一のデバイス クラスはネットワーク (Ndis.sys) です。
ウェイク対応割り込み (_CRS)
デバイスのリソース記述は、割り込みを "wake-capable" (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 オブジェクトによって提供される情報に常に準拠します。
Wake の電源リソース (_PRW)
場合によっては、デバイスをウェイクに対して有効にするために、追加の電源リソースをオンにする必要があります。 この場合、デバイスは、それらの追加の電源リソースを一覧表示する_PRW オブジェクトを提供できます。 Windows ACPI ドライバー (Acpi.sys) は、これらの電源リソースを通常どおりに管理し、デバイス (つまり、ウェイク対応デバイス) で必要なときに電源がオンになっていることを確認し、それ以外の場合はオフにします。
_PRWは、従来の (フル ACPI ハードウェア) PC プラットフォームのウェイク機能を定義するためにも使用されます。