[DDK]
authorJohannes Anderwald <johannes.anderwald@reactos.org>
Fri, 26 Jun 2015 14:42:09 +0000 (14:42 +0000)
committerJohannes Anderwald <johannes.anderwald@reactos.org>
Fri, 26 Jun 2015 14:42:09 +0000 (14:42 +0000)
- add hdaudio.h

svn path=/trunk/; revision=68276

reactos/include/ddk/hdaudio.h [new file with mode: 0644]

diff --git a/reactos/include/ddk/hdaudio.h b/reactos/include/ddk/hdaudio.h
new file mode 100644 (file)
index 0000000..fedf093
--- /dev/null
@@ -0,0 +1,253 @@
+#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
+
+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 (*PHDAUDIO_TRANSFER_COMPLETE_CALLBACK)(HDAUDIO_CODEC_TRANSFER *, PVOID);
+
+typedef VOID (*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 NTSTATUS (*PTRANSFER_CODEC_VERBS) (IN PVOID _context, IN ULONG Count, IN OUT PHDAUDIO_CODEC_TRANSFER CodecTransfer, IN PHDAUDIO_TRANSFER_COMPLETE_CALLBACK Callback, IN PVOID Context);
+typedef NTSTATUS (*PALLOCATE_CAPTURE_DMA_ENGINE) (IN PVOID _context, IN UCHAR CodecAddress, IN PHDAUDIO_STREAM_FORMAT StreamFormat, OUT PHANDLE Handle, OUT PHDAUDIO_CONVERTER_FORMAT ConverterFormat);
+typedef NTSTATUS (*PALLOCATE_RENDER_DMA_ENGINE) (IN PVOID _context, IN PHDAUDIO_STREAM_FORMAT StreamFormat, IN BOOLEAN Stripe, OUT PHANDLE Handle, OUT PHDAUDIO_CONVERTER_FORMAT ConverterFormat);
+typedef NTSTATUS (*PCHANGE_BANDWIDTH_ALLOCATION) (IN PVOID _context, IN HANDLE Handle, IN PHDAUDIO_STREAM_FORMAT StreamFormat, OUT PHDAUDIO_CONVERTER_FORMAT ConverterFormat);
+typedef NTSTATUS (*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 NTSTATUS (*PFREE_DMA_BUFFER) (IN PVOID _context, IN HANDLE Handle);
+typedef NTSTATUS (*PFREE_DMA_ENGINE) (IN PVOID _context, IN HANDLE Handle);
+typedef NTSTATUS (*PSET_DMA_ENGINE_STATE) (IN PVOID _context, IN HDAUDIO_STREAM_STATE StreamState, IN ULONG NumberOfHandles, IN PHANDLE Handles);
+typedef VOID     (*PGET_WALL_CLOCK_REGISTER) (IN PVOID _context, OUT PULONG *Wallclock);
+typedef NTSTATUS (*PGET_LINK_POSITION_REGISTER) (IN PVOID _context, IN HANDLE Handle, OUT PULONG *Position);
+typedef NTSTATUS (*PREGISTER_EVENT_CALLBACK) (IN PVOID _context, IN PHDAUDIO_UNSOLICITED_RESPONSE_CALLBACK Routine, IN PVOID Context, OUT PUCHAR Tag);
+typedef NTSTATUS (*PUNREGISTER_EVENT_CALLBACK) (IN PVOID _context, IN UCHAR Tag);
+typedef NTSTATUS (*PGET_DEVICE_INFORMATION) (IN PVOID _context, IN OUT PHDAUDIO_DEVICE_INFORMATION DeviceInformation);
+typedef VOID     (*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 (*PHDAUDIO_BDL_ISR) (IN VOID *Context, IN ULONG InterruptBitMask); 
+
+typedef NTSTATUS (*PALLOCATE_CONTIGUOUS_DMA_BUFFER) (IN PVOID _context, IN HANDLE Handle,
+  ULONG RequestedBufferSize, OUT PVOID *DataBuffer, OUT PHDAUDIO_BUFFER_DESCRIPTOR *BdlBuffer);
+typedef NTSTATUS (*PFREE_CONTIGUOUS_DMA_BUFFER) (IN PVOID _context, IN HANDLE Handle);
+typedef NTSTATUS (*PSETUP_DMA_ENGINE_WITH_BDL) (IN 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 NTSTATUS (*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 NTSTATUS (*PFREE_DMA_BUFFER_WITH_NOTIFICATION) (IN PVOID _context,
+                                                        IN HANDLE Handle,
+                                                        IN PMDL BufferMdl,
+                                                        IN SIZE_T BufferSize);
+
+typedef NTSTATUS (*PREGISTER_NOTIFICATION_EVENT) (IN PVOID _context,
+                                                  IN HANDLE Handle,
+                                                  IN PKEVENT NotificationEvent);
+
+typedef NTSTATUS (*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_
+