[SHELL32] Remove 2 redundant initializations
[reactos.git] / drivers / wdm / audio / hdaudbus / hdaudbus.h
1 #pragma once
2
3 #define YDEBUG
4 #include <ntddk.h>
5 #include <debug.h>
6 #include <initguid.h>
7 #include <hdaudio.h>
8 #include <stdio.h>
9 #include <ntstrsafe.h>
10
11 #define TAG_HDA 'bADH'
12
13
14 // include Haiku headers
15 #include "driver.h"
16
17 #define MAKE_RATE(base, multiply, divide) \
18 ((base == 44100 ? FORMAT_44_1_BASE_RATE : 0) \
19 | ((multiply - 1) << FORMAT_MULTIPLY_RATE_SHIFT) \
20 | ((divide - 1) << FORMAT_DIVIDE_RATE_SHIFT))
21
22 #define HDAC_INPUT_STREAM_OFFSET(index) \
23 ((index) * HDAC_STREAM_SIZE)
24 #define HDAC_OUTPUT_STREAM_OFFSET(num_input_streams, index) \
25 ((num_input_streams + (index)) * HDAC_STREAM_SIZE)
26 #define HDAC_BIDIR_STREAM_OFFSET(num_input_streams, num_output_streams, index) \
27 ((num_input_streams + num_output_streams \
28 + (index)) * HDAC_STREAM_SIZE)
29
30 #define ALIGN(size, align) (((size) + align - 1) & ~(align - 1))
31
32
33 typedef struct {
34 ULONG response;
35 ULONG flags;
36 }RIRB_RESPONSE, *PRIRB_RESPONSE;
37
38 typedef struct
39 {
40 PDEVICE_OBJECT ChildPDO;
41 ULONG FunctionGroup;
42 ULONG NodeId;
43 }HDA_CODEC_AUDIO_GROUP, *PHDA_CODEC_AUDIO_GROUP;
44
45 typedef struct
46 {
47 USHORT VendorId;
48 USHORT ProductId;
49 UCHAR Major;
50 UCHAR Minor;
51 UCHAR Revision;
52 UCHAR Stepping;
53 UCHAR Addr;
54
55 ULONG Responses[MAX_CODEC_RESPONSES];
56 ULONG ResponseCount;
57 KSEMAPHORE ResponseSemaphore;
58
59 PHDA_CODEC_AUDIO_GROUP AudioGroups[HDA_MAX_AUDIO_GROUPS];
60 ULONG AudioGroupCount;
61
62 }HDA_CODEC_ENTRY, *PHDA_CODEC_ENTRY;
63
64
65 typedef struct
66 {
67 BOOLEAN IsFDO;
68 PDEVICE_OBJECT LowerDevice;
69
70 PUCHAR RegBase;
71 SIZE_T RegLength;
72 PKINTERRUPT Interrupt;
73
74 ULONG CorbLength;
75 PULONG CorbBase;
76 ULONG RirbLength;
77 PRIRB_RESPONSE RirbBase;
78 ULONG RirbReadPos;
79 ULONG CorbWritePos;
80 PVOID StreamPositions;
81
82 PHDA_CODEC_ENTRY Codecs[HDA_MAX_CODECS + 1];
83
84 }HDA_FDO_DEVICE_EXTENSION, *PHDA_FDO_DEVICE_EXTENSION;
85
86 typedef struct
87 {
88 BOOLEAN IsFDO;
89 BOOLEAN ReportedMissing;
90 PHDA_CODEC_ENTRY Codec;
91 PHDA_CODEC_AUDIO_GROUP AudioGroup;
92 PDEVICE_OBJECT FDO;
93 }HDA_PDO_DEVICE_EXTENSION, *PHDA_PDO_DEVICE_EXTENSION;
94
95
96 typedef struct {
97 ULONG device : 16;
98 ULONG vendor : 16;
99 ULONG stepping : 8;
100 ULONG revision : 8;
101 ULONG minor : 4;
102 ULONG major : 4;
103 ULONG _reserved0 : 8;
104 ULONG count : 8;
105 ULONG _reserved1 : 8;
106 ULONG start : 8;
107 ULONG _reserved2 : 8;
108 }CODEC_RESPONSE, *PCODEC_RESPONSE;
109
110
111 PVOID
112 AllocateItem(
113 IN POOL_TYPE PoolType,
114 IN SIZE_T NumberOfBytes);
115
116 VOID
117 FreeItem(
118 IN PVOID Item);
119
120 /* fdo.cpp */
121 KSERVICE_ROUTINE HDA_InterruptService;
122 IO_DPC_ROUTINE HDA_DpcForIsr;
123
124 NTSTATUS
125 NTAPI
126 HDA_FDOStartDevice(
127 IN PDEVICE_OBJECT DeviceObject,
128 IN PIRP Irp);
129
130 NTSTATUS
131 NTAPI
132 HDA_FDORemoveDevice(
133 _In_ PDEVICE_OBJECT DeviceObject,
134 _Inout_ PIRP Irp);
135
136 NTSTATUS
137 NTAPI
138 HDA_FDOQueryBusRelations(
139 IN PDEVICE_OBJECT DeviceObject,
140 IN PIRP Irp);
141
142 VOID
143 HDA_SendVerbs(
144 IN PDEVICE_OBJECT DeviceObject,
145 IN PHDA_CODEC_ENTRY Codec,
146 IN PULONG Verbs,
147 OUT PULONG Responses,
148 IN ULONG Count);
149
150 /* pdo.cpp*/
151
152 NTSTATUS
153 HDA_PDORemoveDevice(
154 _In_ PDEVICE_OBJECT DeviceObject);
155
156 NTSTATUS
157 HDA_PDOQueryBusInformation(
158 IN PIRP Irp);
159
160 NTSTATUS
161 NTAPI
162 HDA_PDOQueryId(
163 IN PDEVICE_OBJECT DeviceObject,
164 IN PIRP Irp);
165
166 NTSTATUS
167 HDA_PDOHandleQueryDeviceText(
168 IN PIRP Irp);
169
170 NTSTATUS
171 HDA_PDOQueryBusDeviceCapabilities(
172 IN PIRP Irp);
173
174 NTSTATUS
175 HDA_PDOQueryBusDevicePnpState(
176 IN PIRP Irp);
177
178 /* businterface.cpp */
179
180 NTSTATUS
181 HDA_PDOHandleQueryInterface(
182 IN PDEVICE_OBJECT DeviceObject,
183 IN PIRP Irp);