mirror of
https://github.com/reactos/reactos.git
synced 2024-08-28 14:18:41 +00:00
380 lines
10 KiB
C
380 lines
10 KiB
C
#ifndef _HDAUDIO_H_
|
|
#define _HDAUDIO_H_
|
|
|
|
#ifdef _MSC_VER
|
|
#pragma warning(disable:4201)
|
|
#pragma warning(disable:4214)
|
|
#endif
|
|
|
|
DEFINE_GUID(GUID_HDAUDIO_BUS_INTERFACE, 0xd2eaf88b, 0xab18, 0x41a8, 0xb6, 0x64, 0x8d, 0x59, 0x21, 0x67, 0x67, 0x1b);
|
|
DEFINE_GUID(GUID_HDAUDIO_BUS_INTERFACE_BDL, 0xb4d65397, 0x5634, 0x40b0, 0xb0, 0x68, 0xf5, 0xb9, 0xf8, 0xb9, 0x67, 0xa5);
|
|
DEFINE_GUID(GUID_HDAUDIO_BUS_INTERFACE_V2, 0xb52af5fb, 0x424b, 0x4bb9, 0xa1, 0x60, 0x5b, 0x38, 0xbe, 0x94, 0xe5, 0x68);
|
|
DEFINE_GUID(GUID_HDAUDIO_BUS_CLASS, 0xbbd1a745, 0xadd6, 0x4575, 0x9c, 0x2e, 0x9b, 0x42, 0x8d, 0x1c, 0x32, 0x66);
|
|
|
|
#ifndef _HDAUDIO_CODEC_TRANSFER_
|
|
#define _HDAUDIO_CODEC_TRANSFER_
|
|
|
|
typedef struct _HDAUDIO_CODEC_COMMAND {
|
|
union {
|
|
struct {
|
|
ULONG Data:8;
|
|
ULONG VerbId:12;
|
|
ULONG Node:8;
|
|
ULONG CodecAddress:4;
|
|
} Verb8;
|
|
struct {
|
|
ULONG Data:16;
|
|
ULONG VerbId:4;
|
|
ULONG Node:8;
|
|
ULONG CodecAddress:4;
|
|
} Verb16;
|
|
ULONG Command;
|
|
};
|
|
} HDAUDIO_CODEC_COMMAND, *PHDAUDIO_CODEC_COMMAND;
|
|
|
|
typedef struct _HDAUDIO_CODEC_RESPONSE {
|
|
union {
|
|
struct {
|
|
union {
|
|
struct {
|
|
ULONG Response:26;
|
|
ULONG Tag:6;
|
|
} Unsolicited;
|
|
ULONG Response;
|
|
};
|
|
ULONG SDataIn:4;
|
|
ULONG IsUnsolicitedResponse:1;
|
|
ULONG :25;
|
|
ULONG HasFifoOverrun:1;
|
|
ULONG IsValid:1;
|
|
};
|
|
ULONGLONG CompleteResponse;
|
|
};
|
|
} HDAUDIO_CODEC_RESPONSE, *PHDAUDIO_CODEC_RESPONSE;
|
|
|
|
typedef struct _HDAUDIO_CODEC_TRANSFER {
|
|
HDAUDIO_CODEC_COMMAND Output;
|
|
HDAUDIO_CODEC_RESPONSE Input;
|
|
} HDAUDIO_CODEC_TRANSFER, *PHDAUDIO_CODEC_TRANSFER;
|
|
|
|
#endif /* _HDAUDIO_CODEC_TRANSFER_ */
|
|
|
|
typedef struct _HDAUDIO_STREAM_FORMAT {
|
|
ULONG SampleRate;
|
|
USHORT ValidBitsPerSample;
|
|
USHORT ContainerSize;
|
|
USHORT NumberOfChannels;
|
|
} HDAUDIO_STREAM_FORMAT, *PHDAUDIO_STREAM_FORMAT;
|
|
|
|
typedef struct _HDAUDIO_CONVERTER_FORMAT {
|
|
union {
|
|
struct {
|
|
USHORT NumberOfChannels:4;
|
|
USHORT BitsPerSample:3;
|
|
USHORT :1;
|
|
USHORT SampleRate:7;
|
|
USHORT StreamType:1;
|
|
};
|
|
USHORT ConverterFormat;
|
|
};
|
|
} HDAUDIO_CONVERTER_FORMAT, *PHDAUDIO_CONVERTER_FORMAT;
|
|
|
|
typedef enum _HDAUDIO_STREAM_STATE {
|
|
ResetState = 0,
|
|
StopState = 1,
|
|
PauseState = 1,
|
|
RunState = 2
|
|
} HDAUDIO_STREAM_STATE, *PHDAUDIO_STREAM_STATE;
|
|
|
|
typedef VOID
|
|
(NTAPI *PHDAUDIO_TRANSFER_COMPLETE_CALLBACK)(
|
|
HDAUDIO_CODEC_TRANSFER *,
|
|
PVOID);
|
|
|
|
typedef VOID
|
|
(NTAPI *PHDAUDIO_UNSOLICITED_RESPONSE_CALLBACK)(
|
|
HDAUDIO_CODEC_RESPONSE,
|
|
PVOID);
|
|
|
|
typedef struct _HDAUDIO_DEVICE_INFORMATION {
|
|
USHORT Size; /* size of this structure */
|
|
USHORT DeviceVersion; /* maj.min (maj is high byte, min is low byte) */
|
|
USHORT DriverVersion; /* maj.min (maj is high byte, min is low byte) */
|
|
USHORT CodecsDetected; /* mask of codecs present. Bit number == SDI line number */
|
|
BOOLEAN IsStripingSupported; /* TRUE if striping (2 SDO lines) is supported */
|
|
} HDAUDIO_DEVICE_INFORMATION, *PHDAUDIO_DEVICE_INFORMATION;
|
|
|
|
typedef struct _HDAUDIO_BUFFER_DESCRIPTOR {
|
|
PHYSICAL_ADDRESS Address;
|
|
ULONG Length;
|
|
ULONG InterruptOnCompletion;
|
|
} HDAUDIO_BUFFER_DESCRIPTOR, *PHDAUDIO_BUFFER_DESCRIPTOR;
|
|
|
|
typedef
|
|
_Must_inspect_result_
|
|
NTSTATUS
|
|
(NTAPI *PTRANSFER_CODEC_VERBS)(
|
|
_In_ PVOID _context,
|
|
_In_ ULONG Count,
|
|
_Inout_updates_(Count) PHDAUDIO_CODEC_TRANSFER CodecTransfer,
|
|
_In_opt_ PHDAUDIO_TRANSFER_COMPLETE_CALLBACK Callback,
|
|
_In_opt_ PVOID Context);
|
|
|
|
typedef
|
|
_Must_inspect_result_
|
|
NTSTATUS
|
|
(NTAPI *PALLOCATE_CAPTURE_DMA_ENGINE)(
|
|
_In_ PVOID _context,
|
|
_In_ UCHAR CodecAddress,
|
|
_In_ PHDAUDIO_STREAM_FORMAT StreamFormat,
|
|
_Out_ PHANDLE Handle,
|
|
_Out_ PHDAUDIO_CONVERTER_FORMAT ConverterFormat);
|
|
|
|
typedef
|
|
_Must_inspect_result_
|
|
NTSTATUS
|
|
(NTAPI *PALLOCATE_RENDER_DMA_ENGINE)(
|
|
_In_ PVOID _context,
|
|
_In_ PHDAUDIO_STREAM_FORMAT StreamFormat,
|
|
_In_ BOOLEAN Stripe,
|
|
_Out_ PHANDLE Handle,
|
|
_Out_ PHDAUDIO_CONVERTER_FORMAT ConverterFormat);
|
|
|
|
typedef
|
|
_Must_inspect_result_
|
|
NTSTATUS
|
|
(NTAPI *PCHANGE_BANDWIDTH_ALLOCATION)(
|
|
_In_ PVOID _context,
|
|
_In_ HANDLE Handle,
|
|
_In_ PHDAUDIO_STREAM_FORMAT StreamFormat,
|
|
_Out_ PHDAUDIO_CONVERTER_FORMAT ConverterFormat);
|
|
|
|
typedef
|
|
_Must_inspect_result_
|
|
NTSTATUS
|
|
(NTAPI *PALLOCATE_DMA_BUFFER)(
|
|
_In_ PVOID _context,
|
|
_In_ HANDLE Handle,
|
|
_In_ SIZE_T RequestedBufferSize,
|
|
_Out_ PMDL *BufferMdl,
|
|
_Out_ PSIZE_T AllocatedBufferSize,
|
|
_Out_ PUCHAR StreamId,
|
|
_Out_ PULONG FifoSize);
|
|
|
|
typedef
|
|
_Must_inspect_result_
|
|
NTSTATUS
|
|
(NTAPI *PFREE_DMA_BUFFER)(
|
|
_In_ PVOID _context,
|
|
_In_ HANDLE Handle);
|
|
|
|
typedef
|
|
_Must_inspect_result_
|
|
NTSTATUS
|
|
(NTAPI *PFREE_DMA_ENGINE)(
|
|
_In_ PVOID _context,
|
|
_In_ HANDLE Handle);
|
|
|
|
typedef
|
|
_Must_inspect_result_
|
|
NTSTATUS
|
|
(NTAPI *PSET_DMA_ENGINE_STATE)(
|
|
_In_ PVOID _context,
|
|
_In_ HDAUDIO_STREAM_STATE StreamState,
|
|
_In_ ULONG NumberOfHandles,
|
|
_In_reads_(NumberOfHandles) PHANDLE Handles);
|
|
|
|
typedef VOID
|
|
(NTAPI *PGET_WALL_CLOCK_REGISTER)(
|
|
_In_ PVOID _context,
|
|
_Out_ PULONG *Wallclock);
|
|
|
|
typedef
|
|
_Must_inspect_result_
|
|
NTSTATUS
|
|
(NTAPI *PGET_LINK_POSITION_REGISTER)(
|
|
_In_ PVOID _context,
|
|
_In_ HANDLE Handle,
|
|
_Out_ PULONG *Position);
|
|
|
|
typedef
|
|
_Must_inspect_result_
|
|
NTSTATUS
|
|
(NTAPI *PREGISTER_EVENT_CALLBACK)(
|
|
_In_ PVOID _context,
|
|
_In_ PHDAUDIO_UNSOLICITED_RESPONSE_CALLBACK Routine,
|
|
_In_opt_ PVOID Context,
|
|
_Out_ PUCHAR Tag);
|
|
|
|
typedef
|
|
_Must_inspect_result_
|
|
NTSTATUS
|
|
(NTAPI *PUNREGISTER_EVENT_CALLBACK)(
|
|
_In_ PVOID _context,
|
|
_In_ UCHAR Tag);
|
|
|
|
typedef
|
|
_Must_inspect_result_
|
|
NTSTATUS
|
|
(NTAPI *PGET_DEVICE_INFORMATION)(
|
|
_In_ PVOID _context,
|
|
_Out_ PHDAUDIO_DEVICE_INFORMATION DeviceInformation);
|
|
|
|
typedef VOID
|
|
(NTAPI *PGET_RESOURCE_INFORMATION)(
|
|
_In_ PVOID _context,
|
|
_Out_ PUCHAR CodecAddress,
|
|
_Out_ PUCHAR FunctionGroupStartNode);
|
|
|
|
typedef struct _HDAUDIO_BUS_INTERFACE {
|
|
USHORT Size;
|
|
USHORT Version;
|
|
PVOID Context;
|
|
PINTERFACE_REFERENCE InterfaceReference;
|
|
PINTERFACE_DEREFERENCE InterfaceDereference;
|
|
PTRANSFER_CODEC_VERBS TransferCodecVerbs;
|
|
PALLOCATE_CAPTURE_DMA_ENGINE AllocateCaptureDmaEngine;
|
|
PALLOCATE_RENDER_DMA_ENGINE AllocateRenderDmaEngine;
|
|
PCHANGE_BANDWIDTH_ALLOCATION ChangeBandwidthAllocation;
|
|
PALLOCATE_DMA_BUFFER AllocateDmaBuffer;
|
|
PFREE_DMA_BUFFER FreeDmaBuffer;
|
|
PFREE_DMA_ENGINE FreeDmaEngine;
|
|
PSET_DMA_ENGINE_STATE SetDmaEngineState;
|
|
PGET_WALL_CLOCK_REGISTER GetWallClockRegister;
|
|
PGET_LINK_POSITION_REGISTER GetLinkPositionRegister;
|
|
PREGISTER_EVENT_CALLBACK RegisterEventCallback;
|
|
PUNREGISTER_EVENT_CALLBACK UnregisterEventCallback;
|
|
PGET_DEVICE_INFORMATION GetDeviceInformation;
|
|
PGET_RESOURCE_INFORMATION GetResourceInformation;
|
|
} HDAUDIO_BUS_INTERFACE, *PHDAUDIO_BUS_INTERFACE;
|
|
|
|
typedef void
|
|
(NTAPI *PHDAUDIO_BDL_ISR)(
|
|
_In_ VOID *Context,
|
|
_In_ ULONG InterruptBitMask);
|
|
|
|
typedef
|
|
_Must_inspect_result_
|
|
NTSTATUS
|
|
(NTAPI *PALLOCATE_CONTIGUOUS_DMA_BUFFER)(
|
|
_In_ PVOID _context,
|
|
_In_ HANDLE Handle,
|
|
ULONG RequestedBufferSize,
|
|
_Out_ PVOID *DataBuffer,
|
|
_Out_ PHDAUDIO_BUFFER_DESCRIPTOR *BdlBuffer);
|
|
|
|
typedef
|
|
_Must_inspect_result_
|
|
NTSTATUS
|
|
(NTAPI *PFREE_CONTIGUOUS_DMA_BUFFER)(
|
|
_In_ PVOID _context,
|
|
_In_ HANDLE Handle);
|
|
|
|
typedef
|
|
_Must_inspect_result_
|
|
NTSTATUS
|
|
(NTAPI *PSETUP_DMA_ENGINE_WITH_BDL)(
|
|
_In_reads_bytes_(BufferLength) PVOID _context,
|
|
_In_ HANDLE Handle,
|
|
_In_ ULONG BufferLength,
|
|
_In_ ULONG Lvi,
|
|
_In_ PHDAUDIO_BDL_ISR Isr,
|
|
_In_ PVOID Context,
|
|
_Out_ PUCHAR StreamId,
|
|
_Out_ PULONG FifoSize);
|
|
|
|
typedef struct _HDAUDIO_BUS_INTERFACE_BDL {
|
|
USHORT Size;
|
|
USHORT Version;
|
|
PVOID Context;
|
|
PINTERFACE_REFERENCE InterfaceReference;
|
|
PINTERFACE_DEREFERENCE InterfaceDereference;
|
|
PTRANSFER_CODEC_VERBS TransferCodecVerbs;
|
|
PALLOCATE_CAPTURE_DMA_ENGINE AllocateCaptureDmaEngine;
|
|
PALLOCATE_RENDER_DMA_ENGINE AllocateRenderDmaEngine;
|
|
PCHANGE_BANDWIDTH_ALLOCATION ChangeBandwidthAllocation;
|
|
PALLOCATE_CONTIGUOUS_DMA_BUFFER AllocateContiguousDmaBuffer;
|
|
PSETUP_DMA_ENGINE_WITH_BDL SetupDmaEngineWithBdl;
|
|
PFREE_CONTIGUOUS_DMA_BUFFER FreeContiguousDmaBuffer;
|
|
PFREE_DMA_ENGINE FreeDmaEngine;
|
|
PSET_DMA_ENGINE_STATE SetDmaEngineState;
|
|
PGET_WALL_CLOCK_REGISTER GetWallClockRegister;
|
|
PGET_LINK_POSITION_REGISTER GetLinkPositionRegister;
|
|
PREGISTER_EVENT_CALLBACK RegisterEventCallback;
|
|
PUNREGISTER_EVENT_CALLBACK UnregisterEventCallback;
|
|
PGET_DEVICE_INFORMATION GetDeviceInformation;
|
|
PGET_RESOURCE_INFORMATION GetResourceInformation;
|
|
} HDAUDIO_BUS_INTERFACE_BDL, *PHDAUDIO_BUS_INTERFACE_BDL;
|
|
|
|
typedef
|
|
_Must_inspect_result_
|
|
NTSTATUS
|
|
(NTAPI *PALLOCATE_DMA_BUFFER_WITH_NOTIFICATION)(
|
|
_In_ PVOID _context,
|
|
_In_ HANDLE Handle,
|
|
_In_ ULONG NotificationCount,
|
|
_In_ SIZE_T RequestedBufferSize,
|
|
_Out_ PMDL *BufferMdl,
|
|
_Out_ PSIZE_T AllocatedBufferSize,
|
|
_Out_ PSIZE_T OffsetFromFirstPage,
|
|
_Out_ PUCHAR StreamId,
|
|
_Out_ PULONG FifoSize);
|
|
|
|
typedef
|
|
_Must_inspect_result_
|
|
NTSTATUS
|
|
(NTAPI *PFREE_DMA_BUFFER_WITH_NOTIFICATION)(
|
|
_In_ PVOID _context,
|
|
_In_ HANDLE Handle,
|
|
_In_ PMDL BufferMdl,
|
|
_In_ SIZE_T BufferSize);
|
|
|
|
typedef
|
|
_Must_inspect_result_
|
|
NTSTATUS
|
|
(NTAPI *PREGISTER_NOTIFICATION_EVENT)(
|
|
_In_ PVOID _context,
|
|
_In_ HANDLE Handle,
|
|
_In_ PKEVENT NotificationEvent);
|
|
|
|
typedef
|
|
_Must_inspect_result_
|
|
NTSTATUS
|
|
(NTAPI *PUNREGISTER_NOTIFICATION_EVENT)(
|
|
_In_ PVOID _context,
|
|
_In_ HANDLE Handle,
|
|
_In_ PKEVENT NotificationEvent);
|
|
|
|
typedef struct _HDAUDIO_BUS_INTERFACE_V2 {
|
|
USHORT Size;
|
|
USHORT Version;
|
|
PVOID Context;
|
|
PINTERFACE_REFERENCE InterfaceReference;
|
|
PINTERFACE_DEREFERENCE InterfaceDereference;
|
|
PTRANSFER_CODEC_VERBS TransferCodecVerbs;
|
|
PALLOCATE_CAPTURE_DMA_ENGINE AllocateCaptureDmaEngine;
|
|
PALLOCATE_RENDER_DMA_ENGINE AllocateRenderDmaEngine;
|
|
PCHANGE_BANDWIDTH_ALLOCATION ChangeBandwidthAllocation;
|
|
PALLOCATE_DMA_BUFFER AllocateDmaBuffer;
|
|
PFREE_DMA_BUFFER FreeDmaBuffer;
|
|
PFREE_DMA_ENGINE FreeDmaEngine;
|
|
PSET_DMA_ENGINE_STATE SetDmaEngineState;
|
|
PGET_WALL_CLOCK_REGISTER GetWallClockRegister;
|
|
PGET_LINK_POSITION_REGISTER GetLinkPositionRegister;
|
|
PREGISTER_EVENT_CALLBACK RegisterEventCallback;
|
|
PUNREGISTER_EVENT_CALLBACK UnregisterEventCallback;
|
|
PGET_DEVICE_INFORMATION GetDeviceInformation;
|
|
PGET_RESOURCE_INFORMATION GetResourceInformation;
|
|
PALLOCATE_DMA_BUFFER_WITH_NOTIFICATION AllocateDmaBufferWithNotification;
|
|
PFREE_DMA_BUFFER_WITH_NOTIFICATION FreeDmaBufferWithNotification;
|
|
PREGISTER_NOTIFICATION_EVENT RegisterNotificationEvent;
|
|
PUNREGISTER_NOTIFICATION_EVENT UnregisterNotificationEvent;
|
|
} HDAUDIO_BUS_INTERFACE_V2, *PHDAUDIO_BUS_INTERFACE_V2;
|
|
|
|
#ifdef _MSC_VER
|
|
#pragma warning(default:4201)
|
|
#pragma warning(default:4214)
|
|
#endif
|
|
|
|
#endif /* _HDAUDIO_H_ */
|