USB 3.0 データの構造
このトピックでは、USB 3.0 ホスト コントローラー ドライバーで使用されるデータ構造について説明します。 これらのデータ構造を理解すると、USB 3.0 および RCDRKD デバッガ拡張コマンドを効果的に使用するのに役立ちます。 ここで紹介するデータ構造には、USB 3.0 仕様に準拠した名前が付けられています。 USB 3.0 仕様を理解すると、拡張コマンドを使用して USB 3.0 ドライバをデバッグする能力がさらに高まります。
USB 3.0 ホスト コントローラー ドライバーは、USB 3.0 コア ドライバー スタックの一部です。 詳細については、「USB ドライバー スタック アーキテクチャ」を参照してください。
各 USB 3.0 ホスト コントローラーには最大 255 のデバイスを含めることができ、各デバイスは最大 31 のエンドポイントを含めることができます。 次の図は、1 つのホスト コントローラーと接続されたデバイスを表すデータ構造の一部を示しています。
デバイスコンテキストベース配列
デバイス コンテキスト ベース配列は、デバイス コンテキスト構造体へのポインターの配列です。 ホスト コントローラーに接続されているデバイスごとに 1 つのデバイス コンテキスト構造があります。 要素 1 ~ 255 はデバイス コンテキスト構造を指します。 要素 0 は、ホスト コントローラーのコンテキスト構造体を指します。
デバイスコンテキストとスロットコンテキスト
デバイス コンテキスト構造体は、エンドポイント コンテキスト構造体へのポインターの配列を保持します。 デバイス上のエンドポイントごとに 1 つのエンドポイント コンテキスト構造があります。 要素 1 ~ 31 は、エンドポイント コンテキスト構造を指します。 要素 0 は、デバイスのコンテキスト情報を保持する Slot Context 構造体を指します。
コマンドリング
コマンド リングは、ソフトウェアによってホスト コントローラーにコマンドを渡すために使用されます。 これらのコマンドの中には、ホスト コントローラーに向けられるものと、ホスト コントローラーに接続されている特定のデバイスに向けられるものがあります。
イベントリング
イベント リングは、ホスト コントローラーによってイベントをソフトウェアに渡すために使用されます。 つまり、イベント リングは、ホスト コントローラーがドライバーにアクションの完了を通知するために使用する構造です。
ドアベルレジスター配列
ドアベル レジスタ アレイは、ホスト コントローラに接続されているデバイスごとに 1 つずつあるドアベル レジスタの配列です。 要素 1 ~ 255 はドアベル レジスタです。 要素 0 は、コマンド リングに保留中のコマンドがあるかどうかを示します。
ソフトウェアは、デバイスのドアベル レジスタにコンテキスト情報を書き込むことで、実行するデバイス関連またはエンドポイント関連の作業があることをホスト コントローラーに通知します。
次の図は、前の図の右側に続きます。 単一のエンドポイントを表す追加のデータ構造を示します。
トランスファーリング
各エンドポイントには 1 つ以上の転送リングがあります。 転送リングは、転送要求ブロック (TRB) の配列です。 各 TRB は、単一の単位としてハードウェアとメモリ間で転送される連続データのブロック (最大 64 KB) を指します。
USB 3.0 コア スタックは、USB クライアント ドライバーから転送要求を受信すると、転送のエンドポイント コンテキストを識別し、転送要求を 1 つ以上の転送記述子 (TD) に分割します。 各 TD には 1 つ以上の TRB が含まれます。
エンドポイントコンテキスト
エンドポイント コンテキスト構造は、単一のエンドポイントのコンテキスト情報を保持します。 また、Dequeue メンバーと Enqueue メンバーもあり、ハードウェアによって TRB が消費されている場所と、ソフトウェアによって TRB が追加されている場所を追跡するために使用されます。