Unterschiede zwischen den HD Audio DDI-Versionen

Der HD Audio DDI ist in drei leicht unterschiedlichen Versionen verfügbar, die wie folgt definiert sind:

  • Eine Basisversion von HD Audio DDI, die durch die HDAUDIO_BUS_INTERFACE-Struktur definiert wird. Die meisten Funktionstreiber für Audio- und Modemcodecs erfordern nur die Funktionen, die diese DDI-Version bietet. Diese Version ist über die HD Audio Bus-Treiber verfügbar, die mit Windows XP und Windows Vista bereitgestellt werden.

  • Eine erweiterte Version von HD Audio DDI, die durch die HDAUDIO_BUS_INTERFACE_V2-Struktur definiert wird. Diese Version des DDI bietet die zusätzlichen Funktionen, die erforderlich sind, um DMA-gesteuerte Ereignisbenachrichtigungen flexibel zu unterstützen. Es ist in Windows Vista und höheren Versionen von Windows verfügbar.

  • Eine geänderte Version von HD Audio DDI, die durch die HDAUDIO_BUS_INTERFACE_BDL-Struktur definiert wird. Diese Version erfüllt die Anforderungen von relativ wenigen Audio- und Modemtreibern, die zusätzliche Kontrolle über die Einrichtung von Pufferdeskriptorlisten (BDLs) für DMA-Vorgänge haben müssen. Diese Version des DDI ist für Windows XP und höhere Versionen von Windows verfügbar. Verwenden Sie jedoch stattdessen entweder die HDAUDIO_BUS_INTERFACE oder die HDAUDIO_BUS_INTERFACE_V2 DDI-Version. .

In allen drei Strukturen stimmen die Namen und Typen der ersten fünf Member mit denen der fünf Member der INTERFACE-Struktur überein. Informationen zu den Werten dieser Member finden Sie unter Abrufen eines HDAUDIO_BUS_INTERFACE DDI-Objekts, Abrufen eines HDAUDIO_BUS_INTERFACE_V2 DDI-Objekts oder Abrufen eines HDAUDIO_BUS_INTERFACE_BDL DDI-Objekts.

Die Routinen in den drei Versionen von HD Audio DDI führen die folgenden Aufgaben aus:

  • Übertragen Sie Befehle an Codecs, und rufen Sie die Antworten auf diese Befehle ab.

  • Ordnen Sie DMA-Engines zu, und richten Sie sie ein, um die Daten in Render- und Erfassungsdatenströmen zu übertragen.

  • Ändern Sie den Streamstatus einer oder mehrerer DMA-Engines in wird ausgeführt, angehalten, beendet oder zurückgesetzt.

  • Reservierte Linkbandbreite für Render- und Aufzeichnungsstreams.

  • Bieten Sie direkten Zugriff auf das Wanduhrregister und verknüpfen Sie Positionsregister.

  • Benachrichtigen Sie Clients über unerwünschte Antworten von Codecs.

  • Registrieren Sie Kernelereignisse, damit sie DMA-Statusbenachrichtigungen empfangen können.

Die HDAUDIO_BUS_INTERFACE- und HDAUDIO_BUS_INTERFACE_BDL-Versionen des DDI weisen die folgenden Unterschiede auf:

Wenn ein Client die AllocateDmaBuffer-Routine in der ersten DDI-Version aufruft, führt der HD-Audiobustreiber folgendes aus:

  • Ordnet einen DMA-Puffer und eine BDL für eine zu verwendende DMA-Engine zu.

  • Initialisiert die BDL.

  • Richtet die DMA-Engine für die Verwendung des Puffers und der BDL ein.

Im Gegensatz dazu weist die AllocateContiguousDmaBuffer-Routine in der zweiten DDI-Version Speicher für einen DMA-Puffer und eine BDL zu, basiert jedoch auf dem Aufrufer, um die BDL zu initialisieren. Die SetupDmaEngineWithBdl-Routine richtet die DMA-Engine ein, um den Puffer und die vom Aufrufer initialisierte BDL zu verwenden.

Die BDL enthält die Liste der physischen Speicherblöcke in der Scatter/Gather-Warteschlange der DMA-Engine. Durch Aufrufen von SetupDmaEngineWithBdl zum Einrichten der BDL kann der Client die Punkte im Datenstrom angeben, an denen die DMA-Engine Interrupts generiert. Dazu legt der Client das Interrupt-On-Completion-Bit (IOC) in ausgewählten BDL-Einträgen fest. Mit dieser Funktion kann der Client den Zeitpunkt der IOC-Unterbrechungen, die während der Verarbeitung des Audiostreams auftreten, präzise steuern. Audiomodemtreiber verwenden auch die zweite DDI-Version, um genaue Systemuhrinformationen zu erhalten.

Weitere Informationen finden Sie in der Intel High Definition Audio-Spezifikation.

Fast alle Clients verwenden jedoch die HDAUDIO_BUS_INTERFACE Version des DDI. Nur wenige Clients, die eine präzise Kontrolle über das Timing von Interrupts benötigen, verwenden die HDAUDIO_BUS_INTERFACE_BDL Version.