HD Audio DDI Routines

As explained in Differences Between the HD Audio DDI Versions, three versions of the HD Audio DDI exist. These three DDI versions are defined by the HDAUDIO_BUS_INTERFACE, HDAUDIO_BUS_INTERFACE_V2, and HDAUDIO_BUS_INTERFACE_BDL structures.

The three DDI versions are accessible only in kernel mode.

Each DDI version provides access to the hardware resources that the HD Audio bus controller manages. These resources include codecs, DMA engines, link bandwidth, link position registers, and a wall clock register. The HD Audio bus driver implements the DDI and exposes the DDI to its children. The children are instances of kernel-mode function drivers that use the DDI to manage the hardware codecs that are connected to the HD Audio controller.

To obtain access to a DDI version, a function driver must query the HD Audio bus driver for a DDI context object. For more information, see Obtaining an HDAUDIO_BUS_INTERFACE DDI Object, Obtaining an HDAUDIO_BUS_INTERFACE_V2 DDI Object, and Obtaining an HDAUDIO_BUS_INTERFACE_BDL DDI Object.

Each routine in the three DDI versions takes a pointer to the context object as its first call parameter.

The HDAUDIO_BUS_INTERFACE structure defines a DDI that contains the following routines:

AllocateCaptureDmaEngine

AllocateDmaBuffer

AllocateRenderDmaEngine

ChangeBandwidthAllocation

FreeDmaBuffer

FreeDmaEngine

GetDeviceInformation

GetLinkPositionRegister

GetResourceInformation

GetWallClockRegister

RegisterEventCallback

SetDmaEngineState

TransferCodecVerbs

UnregisterEventCallback

The HDAUDIO_BUS_INTERFACE_V2 structure is available in Windows Vista and later versions of Windows, and it defines a DDI that contains the following routines:

AllocateCaptureDmaEngine

AllocateDmaBuffer

AllocateDmaBufferWithNotification

AllocateRenderDmaEngine

ChangeBandwidthAllocation

FreeDmaBuffer

FreeDmaBufferWithNotification

FreeDmaEngine

GetDeviceInformation

GetLinkPositionRegister

GetResourceInformation

GetWallClockRegister

RegisterEventCallback

RegisterNotificationEvent

SetDmaEngineState

TransferCodecVerbs

UnregisterEventCallback

UnregisterNotificationEvent

The HDAUDIO_BUS_INTERFACE version of the HD Audio DDI is supported in Windows Vista and later versions of Windows. In addition, a version of the HD Audio bus driver that supports this DDI can be installed in Windows 2000, Windows XP, and Windows Server 2003.

The HDAUDIO_BUS_INTERFACE_BDL structure defines a DDI that contains the following routines:

AllocateCaptureDmaEngine

AllocateContiguousDmaBuffer

AllocateRenderDmaEngine

ChangeBandwidthAllocation

FreeContiguousDmaBuffer

FreeDmaEngine

GetDeviceInformation

GetLinkPositionRegister

GetResourceInformation

GetWallClockRegister

RegisterEventCallback

SetDmaEngineState

SetupDmaEngineWithBdl

TransferCodecVerbs

UnregisterEventCallback

A version of the HD Audio bus driver that supports the HDAUDIO_BUS_INTERFACE_BDL version of the HD Audio DDI can be installed in Windows 2000, Windows XP, and Windows Server 2003. However, Windows Vista provides no support for this DDI version.

Most of the routines in the two DDIs are identical in both name and operation. However, the following two routines, which are part of the HDAUDIO_BUS_INTERFACE version of the DDI, are not included in the HDAUDIO_BUS_INTERFACE_BDL version:

AllocateDmaBuffer

FreeDmaBuffer

Similarly, the following three routines in the HDAUDIO_BUS_INTERFACE_BDL version of the DDI are not part of the HDAUDIO_BUS_INTERFACE version:

AllocateContiguousDmaBuffer

FreeContiguousDmaBuffer

SetupDmaEngineWithBdl

This section describes the following DDI routines:

AllocateCaptureDmaEngine

AllocateContiguousDmaBuffer

AllocateDmaBuffer

AllocateRenderDmaEngine

ChangeBandwidthAllocation

FreeContiguousDmaBuffer

FreeDmaBuffer

FreeDmaEngine

GetDeviceInformation

GetLinkPositionRegister

GetResourceInformation

GetWallClockRegister

RegisterEventCallback

SetDmaEngineState

SetupDmaEngineWithBdl which works with PHDAUDIO_BDL_ISR

TransferCodecVerbs

UnregisterEventCallback

The preceding list contains all the routines that appear in either or both versions of the DDI.