時鐘和連結位置暫存器
HD Audio 控制器包含 32 位時鐘計數器暫存器,其會以 HD 音訊連結的位時脈速率遞增,並大約每 89 秒變換一次。 軟體會使用這個計數器,藉由測量裝置硬體時鐘之間的相對漂移,在兩個以上的控制器裝置之間進行同步處理。
此外,HD 音訊控制器包含一組連結位置暫存器。 每個 DMA 引擎都有連結位置暫存器,指出引擎透過 HD 音訊連結傳輸的資料目前讀取或寫入位置。 位置暫存器會將目前位置表示為迴圈緩衝區開頭的位元組位移:
在轉譯資料流程中,連結位置暫存器會指出 DMA 引擎將透過連結傳送至編解碼器之下一個位元組的迴圈緩衝區位移。
在擷取資料流程中,連結位置暫存器會指出 DMA 引擎從連結上的編解碼器收到的下一個位元組迴圈緩衝區位移。
迴圈緩衝區位移只是目前讀取或寫入位置從迴圈緩衝區開頭的位元組位移。 到達緩衝區結尾時,位置會包裝到緩衝區的開頭,而迴圈緩衝區位移會重設為零。 迴圈緩衝區位於系統記憶體中。 如需詳細資訊,請參閱Intel HD 音訊網站的Intel 高畫質音訊規格。
核心模式函式驅動程式可以直接讀取時鐘和連結位置暫存器。 為了啟用直接存取,HD 音訊匯流排驅動程式會將包含暫存器的實體記憶體對應至系統虛擬記憶體。 函式驅動程式會呼叫 GetWallClockRegister 或 GetLinkPositionRegister 常式,以取得時鐘暫存器或連結位置暫存器的系統虛擬位址指標。 這兩個常式可在兩個版本的 HD 音訊 DDI 中使用。
HD Audio 控制器硬體會將時鐘和連結位置暫存器鏡像到記憶體分頁,而記憶體頁面不包含控制器中的其他任何暫存器。 因此,如果函式驅動程式將鏡像時鐘或位置暫存器對應至使用者模式,則沒有任何使用者模式程式可以存取任何控制器的其他暫存器。 驅動程式絕不允許使用者模式程式觸碰這些其他暫存器和程式設計硬體。
註冊鏡像必須容納主機處理器的頁面大小。 視主機處理器架構而定,典型的頁面大小可能是 4,096 或 8,192 個位元組。