HD オーディオ DDI バージョン間の相違点
HD オーディオ DDI は、次のように定義されている 3 つの微妙に異なるバージョンで利用できます。
HDAUDIO_BUS_INTERFACE 構造によって定義されている HD Audio DDI のベースライン バージョン。 オーディオ コーデックとモデム コーデックのほとんどのファンクション ドライバーには、この DDI バージョンが提供する機能のみが必要です。 このバージョンは、Windows XP と Windows Vista で提供されている HD オーディオ バス ドライバーを通じて利用できます。
HDAUDIO_BUS_INTERFACE_V2 構造体によって定義される HD Audio DDI の拡張バージョン。 このバージョンの DDI では、DMA 駆動のイベント通知を柔軟にサポートするために必要な、追加機能が提供されています。 この追加機能は、Windows Vista 以降のバージョンの Windows で使用することができます。
HDAUDIO_BUS_INTERFACE_BDL 構造体によって定義される HD Audio DDI の変更バージョン。 このバージョンでは、DMA 関数用のバッファー記述子リスト (BDL) のセットアップを追加で制御する必要がある、比較的少数のオーディオ ドライバーとモデム ドライバーの要件に対応しています。 このバージョンの DDI は、Windows XP 以降のバージョンの Windows で使用できます。 ただし、代わりに HDAUDIO_BUS_INTERFACE または HDAUDIO_BUS_INTERFACE_V2 DDI バージョンを使用してください。 .
3 つの構造体すべてで、最初の 5 つのメンバーの名前と型は、INTERFACE 構造体の 5 つのメンバーの名前と型と一致します。 これらのメンバーの値については、「HDAUDIO_BUS_INTERFACE DDI オブジェクトの取得」、「HDAUDIO_BUS_INTERFACE_V2 DDI オブジェクトの取得」、または「HDAUDIO_BUS_INTERFACE_BDL DDI オブジェクトの取得」を参照してください。
HD オーディオ DDI の 3 つのバージョンのルーチンは、次のタスクを実行します。
コマンドをコーデックに転送し、それらのコマンドへの応答を取得します。
レンダー ストリームとキャプチャ ストリームでデータを転送するように DMA エンジンを割り当てて設定します。
1 つ以上の DMA エンジンのストリーム状態を、実行中、一時停止、停止、またはリセットに変更します。
レンダー ストリームとキャプチャ ストリームのリンク帯域幅を予約します。
ウォール クロック レジスタとリンク位置レジスタへの直接アクセスを提供します。
コーデックからの未承諾の応答をクライアントに通知します。
DMA の進行状況通知を受信できるようにカーネル イベントを登録します。
DDI の HDAUDIO_BUS_INTERFACE バージョンと HDAUDIO_BUS_INTERFACE_BDL バージョンには、次の違いがあります。
HDAUDIO_BUS_INTERFACE 構造体は、HDAUDIO_BUS_INTERFACE_BDLに存在しない 2 つのルーチン、AllocateDmaBuffer と FreeDmaBuffer を定義します。
HDAUDIO_BUS_INTERFACE_BDL 構造体は、HDAUDIO_BUS_INTERFACE に存在しない、SetupDmaEngineWithBdl、AllocateContiguousDmaBuffer、FreeContiguousDmaBuffer の 3 つのルーチンを定義します。
クライアントが最初の DDI バージョンで AllocateDmaBuffer ルーチンを呼び出すと、HD オーディオ バス ドライバーは次を実行します。
DMA エンジンが使用する DMA バッファーと BDL を割り当てます。
BDL を初期化します。
バッファーと BDL を使用するように DMA エンジンを設定します。
これに対し、2 番目の DDI バージョンの AllocateContiguousDmaBuffer ルーチンは、DMA バッファーと BDL にストレージを割り当てますが、呼び出し元に依存して BDL を初期化します。 SetupDmaEngineWithBdl ルーチンは、バッファーと呼び出し元によって初期化された BDL を使用するように DMA エンジンを設定します。
BDL には、DMA エンジンのスキャッター/ギャザー キュー内の物理メモリ ブロックの一覧が含まれています。 SetupDmaEngineWithBdl を呼び出して BDL を設定することで、クライアントは、データ ストリーム内で DMA エンジンが割り込みを生成するポイントを指定できます。 クライアントは、選択した BDL エントリに interrupt-on-completion (IOC) ビットを設定することでこれを行います。 この機能により、クライアントはオーディオ ストリームの処理中に発生する IOC 割り込みのタイミングを正確に制御できます。 また、オーディオ モデム ドライバーは、2 番目の DDI バージョンを使用して、正確なシステム クロック情報を取得します。
詳細については、Intel High Definition Audio Specificationを参照してください。
ただし、ほぼすべてのクライアントが DDI のHDAUDIO_BUS_INTERFACE バージョンを使用します。 割り込みのタイミングを正確に制御する必要がある少数のクライアントのみが、HDAUDIO_BUS_INTERFACE_BDL バージョンを使用します。