HD Audio DDI 提供三個稍有不同的版本,如下所示:
HD Audio DDI 的基準版本,由 HDAUDIO_BUS_INTERFACE 結構定義。 音訊和數據機編解碼器的大部分功能驅動程式只需要此 DDI 版本所提供的功能。 此版本可透過 Windows XP 和 Windows Vista 提供的 HD 音訊總線驅動程式取得。
定義於 HDAUDIO_BUS_INTERFACE_V2 結構中的 HD 音訊 DDI 增強版。 此版本的 DDI 提供額外的功能,可彈性地支援 DMA 驅動事件通知。 它可在 Windows Vista 和更新版本的 Windows 中使用。
由 HDAUDIO_BUS_INTERFACE_BDL 結構定義的經過修改的 HD 音訊 DDI 版本。 此版本符合相對較少的音訊和數據機驅動程式的需求,這些驅動程式必須對 DMA 作業的緩衝區描述元清單 (BDLS) 設定有額外的控制。 此版本的 DDI 適用於 Windows XP 和更新版本的 Windows。 不過,請改用 HDAUDIO_BUS_INTERFACE 或 HDAUDIO_BUS_INTERFACE_V2 DDI 版本。 .
在這三個結構中,前五個成員的名稱和類型符合 INTERFACE 結構五個成員的名稱和類型。 如需這些成員值的相關信息,請參閱 取得HDAUDIO_BUS_INTERFACE DDI 物件、 取得HDAUDIO_BUS_INTERFACE_V2 DDI 物件 或 取得HDAUDIO_BUS_INTERFACE_BDL DDI 物件。
HD Audio DDI 三個版本中的例程會執行下列工作:
將命令傳送至編解碼器,並擷取這些命令的回應。
配置並設定 DMA 引擎,以傳輸轉譯和擷取數據流中的數據。
將一或多個 DMA 引擎的數據流狀態變更為執行、暫停、停止或重設。
保留轉譯和擷取數據流的連結頻寬。
提供掛鐘寄存器和連結位置寄存器的直接存取權。
通知用戶端來自編解碼器的未經請求的回應。
註冊核心事件,讓他們可以接收 DMA 進度通知。
DDI 的HDAUDIO_BUS_INTERFACE和HDAUDIO_BUS_INTERFACE_BDL版本有下列差異:
HDAUDIO_BUS_INTERFACE結構會定義兩個例程 AllocateDmaBuffer 和 FreeDmaBuffer,這些例程不存在於 HDAUDIO_BUS_INTERFACE_BDL中。
HDAUDIO_BUS_INTERFACE_BDL結構會定義三個例程 :SetupDmaEngineWithBdl、 AllocateContiguousDmaBuffer 和 FreeContiguousDmaBuffer,這些例程不存在於HDAUDIO_BUS_INTERFACE中。
當用戶端在第一個 DDI 版本中呼叫 AllocateDmaBuffer 例程時,HD 音訊總線驅動程式:
配置 DMA 緩衝區和 BDL 供 DMA 引擎使用。
初始化 BDL。
設定 DMA 引擎以使用緩衝區和 BDL。
相反地,第二個 DDI 版本中的 AllocateContiguousDmaBuffer 例程會配置 DMA 緩衝區和 BDL 的記憶體,但依賴呼叫端來初始化 BDL。 SetupDmaEngineWithBdl 例程會設定 DMA 引擎,以使用緩衝區和呼叫端初始化的 BDL。
BDL 包含 DMA 引擎散佈/收集佇列中的實體記憶體區塊清單。 藉由呼叫 SetupDmaEngineWithBdl 來設定 BDL,用戶端可以指定 DMA 引擎產生中斷之數據流中的點。 用戶端會藉由在選取的 BDL 專案中設定插斷完成 (IOC) 位來執行此動作。 透過這項功能,用戶端可以精確地控制在處理音訊數據流期間發生的 IOC 中斷時間。 音訊數據機驅動程式也會使用第二個 DDI 版本來取得精確的系統時鐘資訊。
如需詳細資訊,請參閱 Intel 高階音訊規格。
不過,幾乎所有客戶端都會使用 DDI 的HDAUDIO_BUS_INTERFACE版本。 只有少數需要精確控制中斷時間的用戶端會使用HDAUDIO_BUS_INTERFACE_BDL版本。