USB ドライバーでのセレクティブ サスペンド (WDF)

USB ドライバーでのセレクティブ サスペンド (WDF)

USB 機能ドライバーは、USB セレクティブ サスペンドを実装することで、アイドル状態の検出をサポートします。ここでは、Windows® Driver Foundation (WDF) をベースとする USB ドライバーでセレクティブ サスペンドを実装する方法について、ドライバー開発者向けに説明します。

セレクティブ サスペンドについて

セレクティブ サスペンドは、接続されたコンピューターが稼働状態 (S0) のままであるときに、アイドル状態の USB デバイスの電源をオフにして後で再開する機能です。エネルギー効率を高めるため (特にモバイル PC では)、すべての USB デバイスとドライバーがセレクティブ サスペンドをサポートする必要があります。デバイスがアイドル状態だが、システムは S0 状態のままであるときに、デバイスの電源をオフにすることには、次のような大きなメリットがあります。

  • セレクティブ サスペンドによって電力が節約されます。
  • セレクティブ サスペンドは、熱負荷やノイズなどの環境要因を減らすのに役立ちます。

デバイス ハードウェアがアイドル状態のときに電源をオフにできる場合、ドライバーでこの機能をサポートしてください。Windows® Driver Foundation (WDF) をベースとする USB ドライバーでセレクティブ サスペンドをサポートするには、基本的なプラグ アンド プレイのサポートに必要なコールバック以外にもいくつかのコールバックが必要です。

USB デバイスの各機能ドライバーには、システムの実行中にアイドル状態のデバイスを中断する積極的な電源管理を実装する必要があります。ここでは、WDF ベースのドライバーでセレクティブ サスペンドを実装する方法について説明します。WDF について理解していない場合は、Windows Driver Kit (WDK) と、Windows Driver Foundation を使ったドライバーの開発に関するページをご覧ください。

USB デバイスでは、USB セレクティブ サスペンドを通じたアイドル状態の検出がサポートされます。セレクティブ サスペンドを使うと、同じハブに接続されている他のデバイスに影響を与えたり、(多機能デバイスの場合は) デバイスの他の機能に影響を与えたりすることなく、アイドル状態のデバイスを中断状態にすることができます。すべてのデバイスまたは機能が中断されると、ハブまたは多機能デバイス全体の電源をオフにできます。

ハードウェアの観点からは、セレクティブ サスペンドは USB ポート上の物理的な状態です。ポートに接続されているすべての機能がアイドル状態の場合、ポートはセレクティブ サスペンドに入ることができます。

USB 仕様に従うため、すべての USB デバイスでセレクティブ サスペンドがサポートされている必要があります。USB バスがアイドル状態の場合、デバイスの電源をオフにできます。Microsoft から提供される USB ハブ ドライバーでは、セレクティブ サスペンドがハードウェア レベルで実装されています。

USB 機能ドライバーでは、WDF を通じて個々のデバイス機能に対してセレクティブ サスペンドが実装されている必要があります。WDF は、バス ドライバーと通信し、デバイス機能を中断して再開するデバイス I/O 制御を管理します。WDF により、カーネル モード ドライバーとユーザー モード ドライバーの両方でセレクティブ サスペンドをサポートすることができるようになります。

機能ドライバーの USB セレクティブ サスペンド コードの詳細は、ドライバーがユーザー モードで実行されるかカーネル モードで実行されるかによって異なります。次のガイドラインを検討してください。

  • 可能な場合は必ずユーザー モード ドライバー フレームワーク (UMDF) を使って USB ドライバーを実装します。ユーザー モード ドライバーは、システム データを破損させる可能性が低く、カーネル モード ドライバーよりデバッグが容易です。
  • カーネル モード ドライバー フレームワーク (KMDF) は、ドライバーがアイソクロナス エンドポイント経由でデータをストリーミングする場合や、カーネル モードでのみ使うことができる他の機能やリソースが必要な場合のみ使います。

電源ポリシーの所有権、I/O キュー、セレクティブ サスペンド

デバイス スタックの電源ポリシー所有者 (PPO) は、ある時点におけるデバイスの電源状態を特定するドライバーです。PPO となることができるドライバーは、デバイス スタックあたり 1 つだけです。通常、機能ドライバーがそのデバイスの PPO です。

USB ドライバーがセレクティブ サスペンドをサポートしており、デバイス スタックにおいて PPO の上にある場合、そのドライバーが電源管理下にあるキューを使うことはできません。これは、UMDF ドライバーと KMDF ドライバーの両方に当てはまります。電源管理下にあるキューの要求がデバイスの中断中に到着した場合、デバイス スタック全体が停止することがあります。

図 1 は、I/O キューを通じた USB ドライバーへの I/O 要求のフローを示しています。

WDF USB ドライバーへの要求のフロー

この図では、USB ドライバーの要求が到着しています。フレームワークにより、要求が適切なキューに追加されます。

キューが電源管理下にない場合、フレームワークは、ドライバーがキューに構成したディスパッチの種類 (順次、並列、手動) に従って要求をドライバーに提示します。その後、ドライバーが要求を処理します。

キューが電源管理下にあり、デバイスが中断されていない場合、フレームワークは構成されたディスパッチの種類に従って要求をドライバーに提示します。

ただし、デバイスが中断されている場合、フレームワークはドライバーがデバイス スタックの PPO であるかどうかに応じてアクションを実行します。ドライバーが PPO である場合、フレームワークは USB 親ドライバーと通信してデバイスの電源をオンにします。デバイスが再開されると、フレームワークは要求をドライバーに提示します。

ドライバーが PPO ではない場合、デバイスを再開できるのは PPO だけであるため、フレームワークはそれ以上アクションを実行しません。要求はキューに残ります。デバイスの再開につながる要求を PPO が受け取らない場合、デバイス スタックが停止します。

このセクションの内容

トピック説明

UMDF ドライバーでのセレクティブ サスペンド

ここでは、UMDF 機能ドライバーが USB セレクティブ サスペンドをサポートする方法について説明します。

USB KMDF ファンクション ドライバーでのセレクティブ サスペンド

ここでは、KMDF 機能ドライバーが USB セレクティブ サスペンドをサポートする方法について説明します。

 

関連トピック

Windows Driver Framework (WDF)
プラグ アンド プレイ - アーキテクチャとドライバー サポート
KMDF ドライバーでの PnP と電源管理
WDF ドライバーが電源管理下にある I/O キューを使うことができる状況
WDF による USB ドライバーの作成
USB クライアント ドライバーでの電源管理の実装

 

 

表示:
© 2016 Microsoft