e463a699e73b2521d203aef070359e7c90430471
[reactos.git] / reactos / drivers / wdm / audio / legacy / wdmaud / wdmaud.h
1 #include <pseh/pseh2.h>
2 #include <ntddk.h>
3 #include <portcls.h>
4 #include <ks.h>
5 #define NDEBUG
6 #include <debug.h>
7 #include <ksmedia.h>
8 #include <mmreg.h>
9 #include <mmsystem.h>
10 #include <stdlib.h>
11 #include <stdio.h>
12 #include <wchar.h>
13 #include "mmixer.h"
14
15 #include "interface.h"
16
17 typedef struct
18 {
19 PMDL Mdl;
20 ULONG Length;
21 ULONG Function;
22 }WDMAUD_COMPLETION_CONTEXT, *PWDMAUD_COMPLETION_CONTEXT;
23
24
25 typedef struct
26 {
27 HANDLE Handle;
28 SOUND_DEVICE_TYPE Type;
29 ULONG FilterId;
30 ULONG PinId;
31 PRKEVENT NotifyEvent;
32 }WDMAUD_HANDLE, *PWDMAUD_HANDLE;
33
34 typedef struct
35 {
36 LIST_ENTRY Entry;
37 HANDLE hProcess;
38 ULONG NumPins;
39 WDMAUD_HANDLE * hPins;
40
41 LIST_ENTRY MixerEventList;
42 }WDMAUD_CLIENT, *PWDMAUD_CLIENT;
43
44 typedef struct
45 {
46 LIST_ENTRY Entry;
47 ULONG NotificationType;
48 ULONG Value;
49 HANDLE hMixer;
50 }EVENT_ENTRY, *PEVENT_ENTRY;
51
52 typedef struct
53 {
54 LIST_ENTRY Entry;
55 UNICODE_STRING SymbolicLink;
56 }SYSAUDIO_ENTRY, *PSYSAUDIO_ENTRY;
57
58 typedef struct
59 {
60 KSDEVICE_HEADER DeviceHeader;
61 PVOID SysAudioNotification;
62
63 BOOL DeviceInterfaceSupport;
64
65 KSPIN_LOCK Lock;
66 ULONG NumSysAudioDevices;
67 LIST_ENTRY SysAudioDeviceList;
68 HANDLE hSysAudio;
69 PFILE_OBJECT FileObject;
70 LIST_ENTRY WdmAudClientList;
71
72 ULONG SysAudioDeviceCount;
73 PIO_WORKITEM WorkItem;
74 KEVENT InitializationCompletionEvent;
75 ULONG WorkItemActive;
76
77 }WDMAUD_DEVICE_EXTENSION, *PWDMAUD_DEVICE_EXTENSION;
78
79 typedef struct
80 {
81 PWDMAUD_CLIENT ClientInfo;
82 PWDMAUD_DEVICE_EXTENSION DeviceExtension;
83 SOUND_DEVICE_TYPE DeviceType;
84 }PIN_CREATE_CONTEXT, *PPIN_CREATE_CONTEXT;
85
86
87 NTSTATUS
88 NTAPI
89 OpenWavePin(
90 IN PWDMAUD_DEVICE_EXTENSION DeviceExtension,
91 IN ULONG FilterId,
92 IN ULONG PinId,
93 IN LPWAVEFORMATEX WaveFormatEx,
94 IN ACCESS_MASK DesiredAccess,
95 OUT PHANDLE PinHandle);
96
97 NTSTATUS
98 WdmAudRegisterDeviceInterface(
99 IN PDEVICE_OBJECT PhysicalDeviceObject,
100 IN PWDMAUD_DEVICE_EXTENSION DeviceExtension);
101
102 NTSTATUS
103 WdmAudOpenSysAudioDevices(
104 IN PDEVICE_OBJECT DeviceObject,
105 IN PWDMAUD_DEVICE_EXTENSION DeviceExtension);
106
107 NTSTATUS
108 WdmAudOpenSysaudio(
109 IN PDEVICE_OBJECT DeviceObject,
110 IN PWDMAUD_CLIENT *pClient);
111
112 NTSTATUS
113 NTAPI
114 WdmAudDeviceControl(
115 IN PDEVICE_OBJECT DeviceObject,
116 IN PIRP Irp);
117
118 NTSTATUS
119 NTAPI
120 WdmAudReadWrite(
121 IN PDEVICE_OBJECT DeviceObject,
122 IN PIRP Irp);
123
124 NTSTATUS
125 NTAPI
126 WdmAudWrite(
127 IN PDEVICE_OBJECT DeviceObject,
128 IN PIRP Irp);
129
130 NTSTATUS
131 WdmAudControlOpenMixer(
132 IN PDEVICE_OBJECT DeviceObject,
133 IN PIRP Irp,
134 IN PWDMAUD_DEVICE_INFO DeviceInfo,
135 IN PWDMAUD_CLIENT ClientInfo);
136
137 NTSTATUS
138 WdmAudControlOpenWave(
139 IN PDEVICE_OBJECT DeviceObject,
140 IN PIRP Irp,
141 IN PWDMAUD_DEVICE_INFO DeviceInfo,
142 IN PWDMAUD_CLIENT ClientInfo);
143
144 NTSTATUS
145 WdmAudControlOpenMidi(
146 IN PDEVICE_OBJECT DeviceObject,
147 IN PIRP Irp,
148 IN PWDMAUD_DEVICE_INFO DeviceInfo,
149 IN PWDMAUD_CLIENT ClientInfo);
150
151 ULONG
152 GetNumOfMixerDevices(
153 IN PDEVICE_OBJECT DeviceObject);
154
155 NTSTATUS
156 SetIrpIoStatus(
157 IN PIRP Irp,
158 IN NTSTATUS Status,
159 IN ULONG Length);
160
161 NTSTATUS
162 WdmAudOpenSysAudioDevice(
163 IN LPWSTR DeviceName,
164 OUT PHANDLE Handle);
165
166 NTSTATUS
167 FindProductName(
168 IN LPWSTR PnpName,
169 IN ULONG ProductNameSize,
170 OUT LPWSTR ProductName);
171
172 NTSTATUS
173 WdmAudMixerCapabilities(
174 IN PDEVICE_OBJECT DeviceObject,
175 IN PWDMAUD_DEVICE_INFO DeviceInfo,
176 IN PWDMAUD_CLIENT ClientInfo,
177 IN PWDMAUD_DEVICE_EXTENSION DeviceExtension);
178
179 NTSTATUS
180 WdmAudWaveCapabilities(
181 IN PDEVICE_OBJECT DeviceObject,
182 IN PWDMAUD_DEVICE_INFO DeviceInfo,
183 IN PWDMAUD_CLIENT ClientInfo,
184 IN PWDMAUD_DEVICE_EXTENSION DeviceExtension);
185
186 NTSTATUS
187 WdmAudMidiCapabilities(
188 IN PDEVICE_OBJECT DeviceObject,
189 IN PWDMAUD_DEVICE_INFO DeviceInfo,
190 IN PWDMAUD_CLIENT ClientInfo,
191 IN PWDMAUD_DEVICE_EXTENSION DeviceExtension);
192
193 NTSTATUS
194 NTAPI
195 WdmAudFrameSize(
196 IN PDEVICE_OBJECT DeviceObject,
197 IN PIRP Irp,
198 IN PWDMAUD_DEVICE_INFO DeviceInfo,
199 IN PWDMAUD_CLIENT ClientInfo);
200
201 NTSTATUS
202 NTAPI
203 WdmAudGetLineInfo(
204 IN PDEVICE_OBJECT DeviceObject,
205 IN PIRP Irp,
206 IN PWDMAUD_DEVICE_INFO DeviceInfo,
207 IN PWDMAUD_CLIENT ClientInfo);
208
209 NTSTATUS
210 NTAPI
211 WdmAudGetLineControls(
212 IN PDEVICE_OBJECT DeviceObject,
213 IN PIRP Irp,
214 IN PWDMAUD_DEVICE_INFO DeviceInfo,
215 IN PWDMAUD_CLIENT ClientInfo);
216
217 NTSTATUS
218 NTAPI
219 WdmAudSetControlDetails(
220 IN PDEVICE_OBJECT DeviceObject,
221 IN PIRP Irp,
222 IN PWDMAUD_DEVICE_INFO DeviceInfo,
223 IN PWDMAUD_CLIENT ClientInfo);
224
225 NTSTATUS
226 NTAPI
227 WdmAudGetMixerEvent(
228 IN PDEVICE_OBJECT DeviceObject,
229 IN PIRP Irp,
230 IN PWDMAUD_DEVICE_INFO DeviceInfo,
231 IN PWDMAUD_CLIENT ClientInfo);
232
233 NTSTATUS
234 NTAPI
235 WdmAudGetControlDetails(
236 IN PDEVICE_OBJECT DeviceObject,
237 IN PIRP Irp,
238 IN PWDMAUD_DEVICE_INFO DeviceInfo,
239 IN PWDMAUD_CLIENT ClientInfo);
240
241 NTSTATUS
242 WdmAudMixerInitialize(
243 IN PDEVICE_OBJECT DeviceObject);
244
245 NTSTATUS
246 NTAPI
247 WdmAudWaveInitialize(
248 IN PDEVICE_OBJECT DeviceObject);
249
250 ULONG
251 ClosePin(
252 IN PWDMAUD_CLIENT ClientInfo,
253 IN ULONG FilterId,
254 IN ULONG PinId,
255 IN SOUND_DEVICE_TYPE DeviceType);
256
257 NTSTATUS
258 InsertPinHandle(
259 IN PWDMAUD_CLIENT ClientInfo,
260 IN ULONG FilterId,
261 IN ULONG PinId,
262 IN SOUND_DEVICE_TYPE DeviceType,
263 IN HANDLE PinHandle,
264 IN ULONG FreeIndex);
265
266 NTSTATUS
267 GetSysAudioDevicePnpName(
268 IN PDEVICE_OBJECT DeviceObject,
269 IN ULONG DeviceIndex,
270 OUT LPWSTR * Device);
271
272 NTSTATUS
273 OpenSysAudioDeviceByIndex(
274 IN PDEVICE_OBJECT DeviceObject,
275 IN ULONG DeviceIndex,
276 IN PHANDLE DeviceHandle,
277 IN PFILE_OBJECT * FileObject);
278
279 NTSTATUS
280 OpenDevice(
281 IN LPWSTR Device,
282 OUT PHANDLE DeviceHandle,
283 OUT PFILE_OBJECT * FileObject);
284
285 ULONG
286 WdmAudGetMixerDeviceCount(VOID);
287
288 ULONG
289 WdmAudGetWaveInDeviceCount(VOID);
290
291 ULONG
292 WdmAudGetWaveOutDeviceCount(VOID);
293
294 ULONG
295 WdmAudGetMidiInDeviceCount(VOID);
296
297 ULONG
298 WdmAudGetMidiOutDeviceCount(VOID);
299
300 NTSTATUS
301 WdmAudGetPnpNameByIndexAndType(
302 IN ULONG DeviceIndex,
303 IN SOUND_DEVICE_TYPE DeviceType,
304 OUT LPWSTR *Device);
305
306
307 /* sup.c */
308
309 ULONG
310 GetSysAudioDeviceCount(
311 IN PDEVICE_OBJECT DeviceObject);
312
313
314 PVOID
315 AllocateItem(
316 IN POOL_TYPE PoolType,
317 IN SIZE_T NumberOfBytes);
318
319 VOID
320 FreeItem(
321 IN PVOID Item);
322