デバイスの D3cold 機能
デバイスの電源ポリシー オーナー (PPO) であるドライバーは、デバイスが D3cold に移行する前に (コンピューターが S0 を維持している状態で)、デバイスが D3cold に入った後もデバイスが応答し、正しく動作し続けることを確認する必要があります。
プラグ アンド プレイ (PnP) デバイスの場合、オペレーティング システムは通常、親バス ドライバーからデバイスの D3cold 機能に関する情報を取得します。
たとえば、デバイスが PCI または PCI Express バスに接続されている場合、デバイスの PCI 構成領域には、デバイスの機能を示す電源管理レジスター ブロックがあります。 このブロックの機能フラグは、デバイスが電源管理イベントを通知できるデバイスの電源状態、または PME (ウェイク イベントを示す PCI 用語) を指定します。 これらの状態には、D3hot と D3cold があります。 PCI 電源管理の詳細については、「PCI Bus 電源管理インターフェイスの仕様」を参照してください。
デバイスが移行後に低電力 Dx 状態からのウェイク イベントを通知できる必要がある場合は、デバイス、親バス コントローラー、ハードウェア プラットフォームがすべて D3cold からのウェイク イベントの通知をサポートしていない限り、デバイスを D3cold に移行してはなりません。
デバイスの KMDF ドライバーは、WdfDeviceAssignS0IdleSettings メソッドを呼び出して、デバイスがウェイク イベントを通知できる最も低い電源デバイスの電源状態でデバイスをアイドル状態にします。 KMDF バージョン 1.11 以降、WdfDeviceAssignS0IdleSettings には、可能な低電力 Dx 状態の範囲で D3cold が搭載されています。 このメソッドを使用すると、デバイス、親バス ドライバー、および ACPI システム ファームウェアが D3cold からのウェイク イベントの通知をサポートしている場合にのみ、デバイスを D3cold でアイドル状態にできます。
デバイスの WDM ドライバーは、デバイスがアイドル状態のときにデバイスを移行する低電力 Dx 状態を判断する必要があります (これに対し、WdfDeviceAssignS0Idle は、ドライバーが選択する必要がないように、この Dx 状態を自動的に選択します)。デバイスの移行後の低電力 Dx 状態に関係なくウェイク イベントを通知できる必要がある場合、ドライバーは GetIdleWakeInfo ルーチンを呼び出して、デバイスがウェイク イベントを通知できる最も低い電力のデバイスの電源状態を判断できます。 この情報を取得するために、GetIdleWakeInfo は基になるバス ドライバーと ACPI システム ファームウェアにクエリを実行します。 GetIdleWakeInfo からの情報に基づいて、ドライバーは SetD3ColdSupport ルーチンを呼び出し、デバイスの D3cold への切り替えを有効または無効にすることができます。
デバイスによっては、D3cold からのウェイク イベントを通知する機能が不要な場合があります。 たとえばその代わりに、ソフトウェアが開始したアクションに対応する形で、D3cold から D0 に切り替える場合などです。 たとえば、ドライバーがデバイスの I/O 要求を受け取ったときに、ドライバーがデバイスをウェイクする場合がこれに当たります。 このようなデバイスのドライバーは、一部の例外を除き、デバイスの D3cold への移行を有効にすることができます。 例外として考えられるのは、D3cold から D0 への切り替えに長時間を要するデバイスです。 たとえば、ディスプレイ デバイスに大量のメモリが搭載されていて、デバイスが D3cold に入る前にこれを保存し、デバイスが D3cold から復帰した後に復元する必要がある場合です。
D3cold の ACPI サポートの詳細については、「D3cold のファームウェア要件」を参照してください。