5 #pragma warning(disable:4201)
6 #pragma warning(disable:4214)
9 DEFINE_GUID(GUID_HDAUDIO_BUS_INTERFACE
, 0xd2eaf88b, 0xab18, 0x41a8, 0xb6, 0x64, 0x8d, 0x59, 0x21, 0x67, 0x67, 0x1b);
10 DEFINE_GUID(GUID_HDAUDIO_BUS_INTERFACE_BDL
, 0xb4d65397, 0x5634, 0x40b0, 0xb0, 0x68, 0xf5, 0xb9, 0xf8, 0xb9, 0x67, 0xa5);
11 DEFINE_GUID(GUID_HDAUDIO_BUS_INTERFACE_V2
, 0xb52af5fb, 0x424b, 0x4bb9, 0xa1, 0x60, 0x5b, 0x38, 0xbe, 0x94, 0xe5, 0x68);
12 DEFINE_GUID(GUID_HDAUDIO_BUS_CLASS
, 0xbbd1a745, 0xadd6, 0x4575, 0x9c, 0x2e, 0x9b, 0x42, 0x8d, 0x1c, 0x32, 0x66);
14 #ifndef _HDAUDIO_CODEC_TRANSFER_
15 #define _HDAUDIO_CODEC_TRANSFER_
17 typedef struct _HDAUDIO_CODEC_COMMAND
{
33 } HDAUDIO_CODEC_COMMAND
, *PHDAUDIO_CODEC_COMMAND
;
35 typedef struct _HDAUDIO_CODEC_RESPONSE
{
46 ULONG IsUnsolicitedResponse
:1;
48 ULONG HasFifoOverrun
:1;
51 ULONGLONG CompleteResponse
;
53 } HDAUDIO_CODEC_RESPONSE
, *PHDAUDIO_CODEC_RESPONSE
;
55 typedef struct _HDAUDIO_CODEC_TRANSFER
{
56 HDAUDIO_CODEC_COMMAND Output
;
57 HDAUDIO_CODEC_RESPONSE Input
;
58 } HDAUDIO_CODEC_TRANSFER
, *PHDAUDIO_CODEC_TRANSFER
;
60 #endif /* _HDAUDIO_CODEC_TRANSFER_ */
62 typedef struct _HDAUDIO_STREAM_FORMAT
{
64 USHORT ValidBitsPerSample
;
66 USHORT NumberOfChannels
;
67 } HDAUDIO_STREAM_FORMAT
, *PHDAUDIO_STREAM_FORMAT
;
69 typedef struct _HDAUDIO_CONVERTER_FORMAT
{
72 USHORT NumberOfChannels
:4;
73 USHORT BitsPerSample
:3;
78 USHORT ConverterFormat
;
80 } HDAUDIO_CONVERTER_FORMAT
, *PHDAUDIO_CONVERTER_FORMAT
;
82 typedef enum _HDAUDIO_STREAM_STATE
{
87 } HDAUDIO_STREAM_STATE
, *PHDAUDIO_STREAM_STATE
;
90 (NTAPI
*PHDAUDIO_TRANSFER_COMPLETE_CALLBACK
)(
91 HDAUDIO_CODEC_TRANSFER
*,
95 (NTAPI
*PHDAUDIO_UNSOLICITED_RESPONSE_CALLBACK
)(
96 HDAUDIO_CODEC_RESPONSE
,
99 typedef struct _HDAUDIO_DEVICE_INFORMATION
{
100 USHORT Size
; /* size of this structure */
101 USHORT DeviceVersion
; /* maj.min (maj is high byte, min is low byte) */
102 USHORT DriverVersion
; /* maj.min (maj is high byte, min is low byte) */
103 USHORT CodecsDetected
; /* mask of codecs present. Bit number == SDI line number */
104 BOOLEAN IsStripingSupported
; /* TRUE if striping (2 SDO lines) is supported */
105 } HDAUDIO_DEVICE_INFORMATION
, *PHDAUDIO_DEVICE_INFORMATION
;
107 typedef struct _HDAUDIO_BUFFER_DESCRIPTOR
{
108 PHYSICAL_ADDRESS Address
;
110 ULONG InterruptOnCompletion
;
111 } HDAUDIO_BUFFER_DESCRIPTOR
, *PHDAUDIO_BUFFER_DESCRIPTOR
;
114 (NTAPI
*PTRANSFER_CODEC_VERBS
)(
117 IN OUT PHDAUDIO_CODEC_TRANSFER CodecTransfer
,
118 IN PHDAUDIO_TRANSFER_COMPLETE_CALLBACK Callback
,
122 (NTAPI
*PALLOCATE_CAPTURE_DMA_ENGINE
)(
124 IN UCHAR CodecAddress
,
125 IN PHDAUDIO_STREAM_FORMAT StreamFormat
,
127 OUT PHDAUDIO_CONVERTER_FORMAT ConverterFormat
);
130 (NTAPI
*PALLOCATE_RENDER_DMA_ENGINE
)(
132 IN PHDAUDIO_STREAM_FORMAT StreamFormat
,
135 OUT PHDAUDIO_CONVERTER_FORMAT ConverterFormat
);
138 (NTAPI
*PCHANGE_BANDWIDTH_ALLOCATION
)(
141 IN PHDAUDIO_STREAM_FORMAT StreamFormat
,
142 OUT PHDAUDIO_CONVERTER_FORMAT ConverterFormat
);
145 (NTAPI
*PALLOCATE_DMA_BUFFER
)(
148 IN SIZE_T RequestedBufferSize
,
150 OUT PSIZE_T AllocatedBufferSize
,
152 OUT PULONG FifoSize
);
155 (NTAPI
*PFREE_DMA_BUFFER
)(
160 (NTAPI
*PFREE_DMA_ENGINE
)(
165 (NTAPI
*PSET_DMA_ENGINE_STATE
)(
167 IN HDAUDIO_STREAM_STATE StreamState
,
168 IN ULONG NumberOfHandles
,
172 (NTAPI
*PGET_WALL_CLOCK_REGISTER
)(
174 OUT PULONG
*Wallclock
);
177 (NTAPI
*PGET_LINK_POSITION_REGISTER
)(
180 OUT PULONG
*Position
);
183 (NTAPI
*PREGISTER_EVENT_CALLBACK
)(
185 IN PHDAUDIO_UNSOLICITED_RESPONSE_CALLBACK Routine
,
190 (NTAPI
*PUNREGISTER_EVENT_CALLBACK
)(
195 (NTAPI
*PGET_DEVICE_INFORMATION
)(
197 IN OUT PHDAUDIO_DEVICE_INFORMATION DeviceInformation
);
200 (NTAPI
*PGET_RESOURCE_INFORMATION
)(
202 OUT PUCHAR CodecAddress
,
203 OUT PUCHAR FunctionGroupStartNode
);
205 typedef struct _HDAUDIO_BUS_INTERFACE
{
209 PINTERFACE_REFERENCE InterfaceReference
;
210 PINTERFACE_DEREFERENCE InterfaceDereference
;
211 PTRANSFER_CODEC_VERBS TransferCodecVerbs
;
212 PALLOCATE_CAPTURE_DMA_ENGINE AllocateCaptureDmaEngine
;
213 PALLOCATE_RENDER_DMA_ENGINE AllocateRenderDmaEngine
;
214 PCHANGE_BANDWIDTH_ALLOCATION ChangeBandwidthAllocation
;
215 PALLOCATE_DMA_BUFFER AllocateDmaBuffer
;
216 PFREE_DMA_BUFFER FreeDmaBuffer
;
217 PFREE_DMA_ENGINE FreeDmaEngine
;
218 PSET_DMA_ENGINE_STATE SetDmaEngineState
;
219 PGET_WALL_CLOCK_REGISTER GetWallClockRegister
;
220 PGET_LINK_POSITION_REGISTER GetLinkPositionRegister
;
221 PREGISTER_EVENT_CALLBACK RegisterEventCallback
;
222 PUNREGISTER_EVENT_CALLBACK UnregisterEventCallback
;
223 PGET_DEVICE_INFORMATION GetDeviceInformation
;
224 PGET_RESOURCE_INFORMATION GetResourceInformation
;
225 } HDAUDIO_BUS_INTERFACE
, *PHDAUDIO_BUS_INTERFACE
;
228 (NTAPI
*PHDAUDIO_BDL_ISR
)(
230 IN ULONG InterruptBitMask
);
233 (NTAPI
*PALLOCATE_CONTIGUOUS_DMA_BUFFER
)(
236 ULONG RequestedBufferSize
,
237 OUT PVOID
*DataBuffer
,
238 OUT PHDAUDIO_BUFFER_DESCRIPTOR
*BdlBuffer
);
241 (NTAPI
*PFREE_CONTIGUOUS_DMA_BUFFER
)(
246 (NTAPI
*PSETUP_DMA_ENGINE_WITH_BDL
)(
249 IN ULONG BufferLength
,
251 IN PHDAUDIO_BDL_ISR Isr
,
254 OUT PULONG FifoSize
);
256 typedef struct _HDAUDIO_BUS_INTERFACE_BDL
{
260 PINTERFACE_REFERENCE InterfaceReference
;
261 PINTERFACE_DEREFERENCE InterfaceDereference
;
262 PTRANSFER_CODEC_VERBS TransferCodecVerbs
;
263 PALLOCATE_CAPTURE_DMA_ENGINE AllocateCaptureDmaEngine
;
264 PALLOCATE_RENDER_DMA_ENGINE AllocateRenderDmaEngine
;
265 PCHANGE_BANDWIDTH_ALLOCATION ChangeBandwidthAllocation
;
266 PALLOCATE_CONTIGUOUS_DMA_BUFFER AllocateContiguousDmaBuffer
;
267 PSETUP_DMA_ENGINE_WITH_BDL SetupDmaEngineWithBdl
;
268 PFREE_CONTIGUOUS_DMA_BUFFER FreeContiguousDmaBuffer
;
269 PFREE_DMA_ENGINE FreeDmaEngine
;
270 PSET_DMA_ENGINE_STATE SetDmaEngineState
;
271 PGET_WALL_CLOCK_REGISTER GetWallClockRegister
;
272 PGET_LINK_POSITION_REGISTER GetLinkPositionRegister
;
273 PREGISTER_EVENT_CALLBACK RegisterEventCallback
;
274 PUNREGISTER_EVENT_CALLBACK UnregisterEventCallback
;
275 PGET_DEVICE_INFORMATION GetDeviceInformation
;
276 PGET_RESOURCE_INFORMATION GetResourceInformation
;
277 } HDAUDIO_BUS_INTERFACE_BDL
, *PHDAUDIO_BUS_INTERFACE_BDL
;
280 (NTAPI
*PALLOCATE_DMA_BUFFER_WITH_NOTIFICATION
)(
283 IN ULONG NotificationCount
,
284 IN SIZE_T RequestedBufferSize
,
286 OUT PSIZE_T AllocatedBufferSize
,
287 OUT PSIZE_T OffsetFromFirstPage
,
289 OUT PULONG FifoSize
);
292 (NTAPI
*PFREE_DMA_BUFFER_WITH_NOTIFICATION
)(
296 IN SIZE_T BufferSize
);
299 (NTAPI
*PREGISTER_NOTIFICATION_EVENT
)(
302 IN PKEVENT NotificationEvent
);
305 (NTAPI
*PUNREGISTER_NOTIFICATION_EVENT
)(
308 IN PKEVENT NotificationEvent
);
310 typedef struct _HDAUDIO_BUS_INTERFACE_V2
{
314 PINTERFACE_REFERENCE InterfaceReference
;
315 PINTERFACE_DEREFERENCE InterfaceDereference
;
316 PTRANSFER_CODEC_VERBS TransferCodecVerbs
;
317 PALLOCATE_CAPTURE_DMA_ENGINE AllocateCaptureDmaEngine
;
318 PALLOCATE_RENDER_DMA_ENGINE AllocateRenderDmaEngine
;
319 PCHANGE_BANDWIDTH_ALLOCATION ChangeBandwidthAllocation
;
320 PALLOCATE_DMA_BUFFER AllocateDmaBuffer
;
321 PFREE_DMA_BUFFER FreeDmaBuffer
;
322 PFREE_DMA_ENGINE FreeDmaEngine
;
323 PSET_DMA_ENGINE_STATE SetDmaEngineState
;
324 PGET_WALL_CLOCK_REGISTER GetWallClockRegister
;
325 PGET_LINK_POSITION_REGISTER GetLinkPositionRegister
;
326 PREGISTER_EVENT_CALLBACK RegisterEventCallback
;
327 PUNREGISTER_EVENT_CALLBACK UnregisterEventCallback
;
328 PGET_DEVICE_INFORMATION GetDeviceInformation
;
329 PGET_RESOURCE_INFORMATION GetResourceInformation
;
330 PALLOCATE_DMA_BUFFER_WITH_NOTIFICATION AllocateDmaBufferWithNotification
;
331 PFREE_DMA_BUFFER_WITH_NOTIFICATION FreeDmaBufferWithNotification
;
332 PREGISTER_NOTIFICATION_EVENT RegisterNotificationEvent
;
333 PUNREGISTER_NOTIFICATION_EVENT UnregisterNotificationEvent
;
334 } HDAUDIO_BUS_INTERFACE_V2
, *PHDAUDIO_BUS_INTERFACE_V2
;
337 #pragma warning(default:4201)
338 #pragma warning(default:4214)
341 #endif /* _HDAUDIO_H_ */