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 _Must_inspect_result_
116 (NTAPI
*PTRANSFER_CODEC_VERBS
)(
119 _Inout_updates_(Count
) PHDAUDIO_CODEC_TRANSFER CodecTransfer
,
120 _In_opt_ PHDAUDIO_TRANSFER_COMPLETE_CALLBACK Callback
,
121 _In_opt_ PVOID Context
);
124 _Must_inspect_result_
126 (NTAPI
*PALLOCATE_CAPTURE_DMA_ENGINE
)(
128 _In_ UCHAR CodecAddress
,
129 _In_ PHDAUDIO_STREAM_FORMAT StreamFormat
,
130 _Out_ PHANDLE Handle
,
131 _Out_ PHDAUDIO_CONVERTER_FORMAT ConverterFormat
);
134 _Must_inspect_result_
136 (NTAPI
*PALLOCATE_RENDER_DMA_ENGINE
)(
138 _In_ PHDAUDIO_STREAM_FORMAT StreamFormat
,
140 _Out_ PHANDLE Handle
,
141 _Out_ PHDAUDIO_CONVERTER_FORMAT ConverterFormat
);
144 _Must_inspect_result_
146 (NTAPI
*PCHANGE_BANDWIDTH_ALLOCATION
)(
149 _In_ PHDAUDIO_STREAM_FORMAT StreamFormat
,
150 _Out_ PHDAUDIO_CONVERTER_FORMAT ConverterFormat
);
153 _Must_inspect_result_
155 (NTAPI
*PALLOCATE_DMA_BUFFER
)(
158 _In_ SIZE_T RequestedBufferSize
,
159 _Out_ PMDL
*BufferMdl
,
160 _Out_ PSIZE_T AllocatedBufferSize
,
161 _Out_ PUCHAR StreamId
,
162 _Out_ PULONG FifoSize
);
165 _Must_inspect_result_
167 (NTAPI
*PFREE_DMA_BUFFER
)(
172 _Must_inspect_result_
174 (NTAPI
*PFREE_DMA_ENGINE
)(
179 _Must_inspect_result_
181 (NTAPI
*PSET_DMA_ENGINE_STATE
)(
183 _In_ HDAUDIO_STREAM_STATE StreamState
,
184 _In_ ULONG NumberOfHandles
,
185 _In_reads_(NumberOfHandles
) PHANDLE Handles
);
188 (NTAPI
*PGET_WALL_CLOCK_REGISTER
)(
190 _Out_ PULONG
*Wallclock
);
193 _Must_inspect_result_
195 (NTAPI
*PGET_LINK_POSITION_REGISTER
)(
198 _Out_ PULONG
*Position
);
201 _Must_inspect_result_
203 (NTAPI
*PREGISTER_EVENT_CALLBACK
)(
205 _In_ PHDAUDIO_UNSOLICITED_RESPONSE_CALLBACK Routine
,
206 _In_opt_ PVOID Context
,
210 _Must_inspect_result_
212 (NTAPI
*PUNREGISTER_EVENT_CALLBACK
)(
217 _Must_inspect_result_
219 (NTAPI
*PGET_DEVICE_INFORMATION
)(
221 _Out_ PHDAUDIO_DEVICE_INFORMATION DeviceInformation
);
224 (NTAPI
*PGET_RESOURCE_INFORMATION
)(
226 _Out_ PUCHAR CodecAddress
,
227 _Out_ PUCHAR FunctionGroupStartNode
);
229 typedef struct _HDAUDIO_BUS_INTERFACE
{
233 PINTERFACE_REFERENCE InterfaceReference
;
234 PINTERFACE_DEREFERENCE InterfaceDereference
;
235 PTRANSFER_CODEC_VERBS TransferCodecVerbs
;
236 PALLOCATE_CAPTURE_DMA_ENGINE AllocateCaptureDmaEngine
;
237 PALLOCATE_RENDER_DMA_ENGINE AllocateRenderDmaEngine
;
238 PCHANGE_BANDWIDTH_ALLOCATION ChangeBandwidthAllocation
;
239 PALLOCATE_DMA_BUFFER AllocateDmaBuffer
;
240 PFREE_DMA_BUFFER FreeDmaBuffer
;
241 PFREE_DMA_ENGINE FreeDmaEngine
;
242 PSET_DMA_ENGINE_STATE SetDmaEngineState
;
243 PGET_WALL_CLOCK_REGISTER GetWallClockRegister
;
244 PGET_LINK_POSITION_REGISTER GetLinkPositionRegister
;
245 PREGISTER_EVENT_CALLBACK RegisterEventCallback
;
246 PUNREGISTER_EVENT_CALLBACK UnregisterEventCallback
;
247 PGET_DEVICE_INFORMATION GetDeviceInformation
;
248 PGET_RESOURCE_INFORMATION GetResourceInformation
;
249 } HDAUDIO_BUS_INTERFACE
, *PHDAUDIO_BUS_INTERFACE
;
252 (NTAPI
*PHDAUDIO_BDL_ISR
)(
254 _In_ ULONG InterruptBitMask
);
257 _Must_inspect_result_
259 (NTAPI
*PALLOCATE_CONTIGUOUS_DMA_BUFFER
)(
262 ULONG RequestedBufferSize
,
263 _Out_ PVOID
*DataBuffer
,
264 _Out_ PHDAUDIO_BUFFER_DESCRIPTOR
*BdlBuffer
);
267 _Must_inspect_result_
269 (NTAPI
*PFREE_CONTIGUOUS_DMA_BUFFER
)(
274 _Must_inspect_result_
276 (NTAPI
*PSETUP_DMA_ENGINE_WITH_BDL
)(
277 _In_reads_bytes_(BufferLength
) PVOID _context
,
279 _In_ ULONG BufferLength
,
281 _In_ PHDAUDIO_BDL_ISR Isr
,
283 _Out_ PUCHAR StreamId
,
284 _Out_ PULONG FifoSize
);
286 typedef struct _HDAUDIO_BUS_INTERFACE_BDL
{
290 PINTERFACE_REFERENCE InterfaceReference
;
291 PINTERFACE_DEREFERENCE InterfaceDereference
;
292 PTRANSFER_CODEC_VERBS TransferCodecVerbs
;
293 PALLOCATE_CAPTURE_DMA_ENGINE AllocateCaptureDmaEngine
;
294 PALLOCATE_RENDER_DMA_ENGINE AllocateRenderDmaEngine
;
295 PCHANGE_BANDWIDTH_ALLOCATION ChangeBandwidthAllocation
;
296 PALLOCATE_CONTIGUOUS_DMA_BUFFER AllocateContiguousDmaBuffer
;
297 PSETUP_DMA_ENGINE_WITH_BDL SetupDmaEngineWithBdl
;
298 PFREE_CONTIGUOUS_DMA_BUFFER FreeContiguousDmaBuffer
;
299 PFREE_DMA_ENGINE FreeDmaEngine
;
300 PSET_DMA_ENGINE_STATE SetDmaEngineState
;
301 PGET_WALL_CLOCK_REGISTER GetWallClockRegister
;
302 PGET_LINK_POSITION_REGISTER GetLinkPositionRegister
;
303 PREGISTER_EVENT_CALLBACK RegisterEventCallback
;
304 PUNREGISTER_EVENT_CALLBACK UnregisterEventCallback
;
305 PGET_DEVICE_INFORMATION GetDeviceInformation
;
306 PGET_RESOURCE_INFORMATION GetResourceInformation
;
307 } HDAUDIO_BUS_INTERFACE_BDL
, *PHDAUDIO_BUS_INTERFACE_BDL
;
310 _Must_inspect_result_
312 (NTAPI
*PALLOCATE_DMA_BUFFER_WITH_NOTIFICATION
)(
315 _In_ ULONG NotificationCount
,
316 _In_ SIZE_T RequestedBufferSize
,
317 _Out_ PMDL
*BufferMdl
,
318 _Out_ PSIZE_T AllocatedBufferSize
,
319 _Out_ PSIZE_T OffsetFromFirstPage
,
320 _Out_ PUCHAR StreamId
,
321 _Out_ PULONG FifoSize
);
324 _Must_inspect_result_
326 (NTAPI
*PFREE_DMA_BUFFER_WITH_NOTIFICATION
)(
330 _In_ SIZE_T BufferSize
);
333 _Must_inspect_result_
335 (NTAPI
*PREGISTER_NOTIFICATION_EVENT
)(
338 _In_ PKEVENT NotificationEvent
);
341 _Must_inspect_result_
343 (NTAPI
*PUNREGISTER_NOTIFICATION_EVENT
)(
346 _In_ PKEVENT NotificationEvent
);
348 typedef struct _HDAUDIO_BUS_INTERFACE_V2
{
352 PINTERFACE_REFERENCE InterfaceReference
;
353 PINTERFACE_DEREFERENCE InterfaceDereference
;
354 PTRANSFER_CODEC_VERBS TransferCodecVerbs
;
355 PALLOCATE_CAPTURE_DMA_ENGINE AllocateCaptureDmaEngine
;
356 PALLOCATE_RENDER_DMA_ENGINE AllocateRenderDmaEngine
;
357 PCHANGE_BANDWIDTH_ALLOCATION ChangeBandwidthAllocation
;
358 PALLOCATE_DMA_BUFFER AllocateDmaBuffer
;
359 PFREE_DMA_BUFFER FreeDmaBuffer
;
360 PFREE_DMA_ENGINE FreeDmaEngine
;
361 PSET_DMA_ENGINE_STATE SetDmaEngineState
;
362 PGET_WALL_CLOCK_REGISTER GetWallClockRegister
;
363 PGET_LINK_POSITION_REGISTER GetLinkPositionRegister
;
364 PREGISTER_EVENT_CALLBACK RegisterEventCallback
;
365 PUNREGISTER_EVENT_CALLBACK UnregisterEventCallback
;
366 PGET_DEVICE_INFORMATION GetDeviceInformation
;
367 PGET_RESOURCE_INFORMATION GetResourceInformation
;
368 PALLOCATE_DMA_BUFFER_WITH_NOTIFICATION AllocateDmaBufferWithNotification
;
369 PFREE_DMA_BUFFER_WITH_NOTIFICATION FreeDmaBufferWithNotification
;
370 PREGISTER_NOTIFICATION_EVENT RegisterNotificationEvent
;
371 PUNREGISTER_NOTIFICATION_EVENT UnregisterNotificationEvent
;
372 } HDAUDIO_BUS_INTERFACE_V2
, *PHDAUDIO_BUS_INTERFACE_V2
;
375 #pragma warning(default:4201)
376 #pragma warning(default:4214)
379 #endif /* _HDAUDIO_H_ */