Wanduhr- und Linkpositionsregister

Der HD Audio-Controller enthält ein 32-Bit-Wanduhrzählerregister, das mit der Bittaktrate des HD Audio Link inkrementiert und ungefähr alle 89 Sekunden überrollt. Software verwendet diesen Zähler, um zwischen zwei oder mehr Controllergeräten zu synchronisieren, indem die relative Drift zwischen den Hardwareuhren der Geräte gemessen wird.

Darüber hinaus enthält der HD-Audiocontroller eine Reihe von Linkpositionsregistern. Jede DMA-Engine verfügt über ein Linkpositionsregister, das die aktuelle Lese- oder Schreibposition der Daten angibt, die das Modul über den HD Audio Link sendet. Das Positionsregister drückt die aktuelle Position als Byteoffset vom Anfang des zyklischen Puffers aus:

  • In einem Renderstream gibt das Linkpositionsregister den zyklischen Pufferoffset des nächsten Byte an, den die DMA-Engine über den Link an den Codec sendet.

  • In einem Erfassungsstream gibt das Linkpositionsregister den zyklischen Pufferoffset des nächsten Byte an, den die DMA-Engine vom Codec über den Link empfängt.

Der zyklische Pufferoffset ist einfach der Offset in Bytes der aktuellen Lese- oder Schreibposition vom Anfang des zyklischen Puffers. Am Ende des Puffers wird die Position bis zum Anfang des Puffers umgebrochen, und der zyklische Pufferoffset wird auf 0 zurückgesetzt. Der zyklische Puffer befindet sich im Systemspeicher. Weitere Informationen finden Sie in der Intel High Definition Audio-Spezifikation auf der Intel HD Audio-Website .

Ein Kernelmodus-Funktionstreiber kann die Wanduhr- und Linkpositionsregister direkt lesen. Um den direkten Zugriff zu ermöglichen, ordnet der HD Audio-Bustreiber den physischen Arbeitsspeicher, der die Register enthält, dem virtuellen Systemspeicher zu. Der Funktionstreiber ruft die GetWallClockRegister- oder GetLinkPositionRegister-Routine auf, um einen Virtuellen Adresszeiger des Systems auf das Wanduhrenregister oder ein Linkpositionsregister abzurufen. Diese beiden Routinen sind in beiden Versionen des HD Audio DDI verfügbar.

Die Hardware des HD-Audiocontrollers spiegelt die Register der Wanduhr- und Linkposition in Speicherseiten wieder, die keines der anderen Register im Controller enthalten. Wenn der Funktionstreiber also die gespiegelte Wanduhr oder Positionsregister dem Benutzermodus zuordnet, können keine Benutzermodusprogramme auf andere Register des Controllers zugreifen. Der Treiber erlaubt es einem Benutzermodusprogramm nie, diese anderen Register zu berühren und die Hardware zu programmieren.

Die Registerspiegelung muss die Seitengröße des Hostprozessors berücksichtigen. Je nach Hostprozessorarchitektur kann eine typische Seitengröße 4.096 oder 8.192 Bytes betragen.