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:
Die HDAUDIO_BUS_INTERFACE-Struktur definiert zwei Routinen, AllocateDmaBuffer und FreeDmaBuffer, die in HDAUDIO_BUS_INTERFACE_BDL nicht vorhanden sind.
Die HDAUDIO_BUS_INTERFACE_BDL-Struktur definiert die drei Routinen SetupDmaEngineWithBdl, AllocateContiguousDmaBuffer und FreeContiguousDmaBuffer, die in HDAUDIO_BUS_INTERFACE nicht vorhanden sind.
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.