Synchronize up to trunk's revision r57784.
[reactos.git] / 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
71 LIST_ENTRY WdmAudClientList;
72 }WDMAUD_DEVICE_EXTENSION, *PWDMAUD_DEVICE_EXTENSION;
73
74 typedef struct
75 {
76 PWDMAUD_CLIENT ClientInfo;
77 PWDMAUD_DEVICE_EXTENSION DeviceExtension;
78 SOUND_DEVICE_TYPE DeviceType;
79 }PIN_CREATE_CONTEXT, *PPIN_CREATE_CONTEXT;
80
81
82 NTSTATUS
83 NTAPI
84 OpenWavePin(
85 IN PWDMAUD_DEVICE_EXTENSION DeviceExtension,
86 IN ULONG FilterId,
87 IN ULONG PinId,
88 IN LPWAVEFORMATEX WaveFormatEx,
89 IN ACCESS_MASK DesiredAccess,
90 OUT PHANDLE PinHandle);
91
92 NTSTATUS
93 WdmAudRegisterDeviceInterface(
94 IN PDEVICE_OBJECT PhysicalDeviceObject,
95 IN PWDMAUD_DEVICE_EXTENSION DeviceExtension);
96
97 NTSTATUS
98 WdmAudOpenSysAudioDevices(
99 IN PDEVICE_OBJECT DeviceObject,
100 IN PWDMAUD_DEVICE_EXTENSION DeviceExtension);
101
102 NTSTATUS
103 WdmAudOpenSysaudio(
104 IN PDEVICE_OBJECT DeviceObject,
105 IN PWDMAUD_CLIENT *pClient);
106
107 NTSTATUS
108 NTAPI
109 WdmAudDeviceControl(
110 IN PDEVICE_OBJECT DeviceObject,
111 IN PIRP Irp);
112
113 NTSTATUS
114 NTAPI
115 WdmAudReadWrite(
116 IN PDEVICE_OBJECT DeviceObject,
117 IN PIRP Irp);
118
119 NTSTATUS
120 NTAPI
121 WdmAudWrite(
122 IN PDEVICE_OBJECT DeviceObject,
123 IN PIRP Irp);
124
125 NTSTATUS
126 WdmAudControlOpenMixer(
127 IN PDEVICE_OBJECT DeviceObject,
128 IN PIRP Irp,
129 IN PWDMAUD_DEVICE_INFO DeviceInfo,
130 IN PWDMAUD_CLIENT ClientInfo);
131
132 NTSTATUS
133 WdmAudControlOpenWave(
134 IN PDEVICE_OBJECT DeviceObject,
135 IN PIRP Irp,
136 IN PWDMAUD_DEVICE_INFO DeviceInfo,
137 IN PWDMAUD_CLIENT ClientInfo);
138
139 NTSTATUS
140 WdmAudControlOpenMidi(
141 IN PDEVICE_OBJECT DeviceObject,
142 IN PIRP Irp,
143 IN PWDMAUD_DEVICE_INFO DeviceInfo,
144 IN PWDMAUD_CLIENT ClientInfo);
145
146 ULONG
147 GetNumOfMixerDevices(
148 IN PDEVICE_OBJECT DeviceObject);
149
150 NTSTATUS
151 SetIrpIoStatus(
152 IN PIRP Irp,
153 IN NTSTATUS Status,
154 IN ULONG Length);
155
156 NTSTATUS
157 WdmAudOpenSysAudioDevice(
158 IN LPWSTR DeviceName,
159 OUT PHANDLE Handle);
160
161 NTSTATUS
162 FindProductName(
163 IN LPWSTR PnpName,
164 IN ULONG ProductNameSize,
165 OUT LPWSTR ProductName);
166
167 NTSTATUS
168 WdmAudMixerCapabilities(
169 IN PDEVICE_OBJECT DeviceObject,
170 IN PWDMAUD_DEVICE_INFO DeviceInfo,
171 IN PWDMAUD_CLIENT ClientInfo,
172 IN PWDMAUD_DEVICE_EXTENSION DeviceExtension);
173
174 NTSTATUS
175 WdmAudWaveCapabilities(
176 IN PDEVICE_OBJECT DeviceObject,
177 IN PWDMAUD_DEVICE_INFO DeviceInfo,
178 IN PWDMAUD_CLIENT ClientInfo,
179 IN PWDMAUD_DEVICE_EXTENSION DeviceExtension);
180
181 NTSTATUS
182 WdmAudMidiCapabilities(
183 IN PDEVICE_OBJECT DeviceObject,
184 IN PWDMAUD_DEVICE_INFO DeviceInfo,
185 IN PWDMAUD_CLIENT ClientInfo,
186 IN PWDMAUD_DEVICE_EXTENSION DeviceExtension);
187
188 NTSTATUS
189 NTAPI
190 WdmAudFrameSize(
191 IN PDEVICE_OBJECT DeviceObject,
192 IN PIRP Irp,
193 IN PWDMAUD_DEVICE_INFO DeviceInfo,
194 IN PWDMAUD_CLIENT ClientInfo);
195
196 NTSTATUS
197 NTAPI
198 WdmAudGetLineInfo(
199 IN PDEVICE_OBJECT DeviceObject,
200 IN PIRP Irp,
201 IN PWDMAUD_DEVICE_INFO DeviceInfo,
202 IN PWDMAUD_CLIENT ClientInfo);
203
204 NTSTATUS
205 NTAPI
206 WdmAudGetLineControls(
207 IN PDEVICE_OBJECT DeviceObject,
208 IN PIRP Irp,
209 IN PWDMAUD_DEVICE_INFO DeviceInfo,
210 IN PWDMAUD_CLIENT ClientInfo);
211
212 NTSTATUS
213 NTAPI
214 WdmAudSetControlDetails(
215 IN PDEVICE_OBJECT DeviceObject,
216 IN PIRP Irp,
217 IN PWDMAUD_DEVICE_INFO DeviceInfo,
218 IN PWDMAUD_CLIENT ClientInfo);
219
220 NTSTATUS
221 NTAPI
222 WdmAudGetMixerEvent(
223 IN PDEVICE_OBJECT DeviceObject,
224 IN PIRP Irp,
225 IN PWDMAUD_DEVICE_INFO DeviceInfo,
226 IN PWDMAUD_CLIENT ClientInfo);
227
228 NTSTATUS
229 NTAPI
230 WdmAudGetControlDetails(
231 IN PDEVICE_OBJECT DeviceObject,
232 IN PIRP Irp,
233 IN PWDMAUD_DEVICE_INFO DeviceInfo,
234 IN PWDMAUD_CLIENT ClientInfo);
235
236 NTSTATUS
237 WdmAudMixerInitialize(
238 IN PDEVICE_OBJECT DeviceObject);
239
240 NTSTATUS
241 NTAPI
242 WdmAudWaveInitialize(
243 IN PDEVICE_OBJECT DeviceObject);
244
245 ULONG
246 ClosePin(
247 IN PWDMAUD_CLIENT ClientInfo,
248 IN ULONG FilterId,
249 IN ULONG PinId,
250 IN SOUND_DEVICE_TYPE DeviceType);
251
252 NTSTATUS
253 InsertPinHandle(
254 IN PWDMAUD_CLIENT ClientInfo,
255 IN ULONG FilterId,
256 IN ULONG PinId,
257 IN SOUND_DEVICE_TYPE DeviceType,
258 IN HANDLE PinHandle,
259 IN ULONG FreeIndex);
260
261 NTSTATUS
262 GetSysAudioDevicePnpName(
263 IN PDEVICE_OBJECT DeviceObject,
264 IN ULONG DeviceIndex,
265 OUT LPWSTR * Device);
266
267 NTSTATUS
268 OpenSysAudioDeviceByIndex(
269 IN PDEVICE_OBJECT DeviceObject,
270 IN ULONG DeviceIndex,
271 IN PHANDLE DeviceHandle,
272 IN PFILE_OBJECT * FileObject);
273
274 NTSTATUS
275 OpenDevice(
276 IN LPWSTR Device,
277 OUT PHANDLE DeviceHandle,
278 OUT PFILE_OBJECT * FileObject);
279
280 ULONG
281 WdmAudGetMixerDeviceCount(VOID);
282
283 ULONG
284 WdmAudGetWaveInDeviceCount(VOID);
285
286 ULONG
287 WdmAudGetWaveOutDeviceCount(VOID);
288
289 ULONG
290 WdmAudGetMidiInDeviceCount(VOID);
291
292 ULONG
293 WdmAudGetMidiOutDeviceCount(VOID);
294
295 NTSTATUS
296 WdmAudGetPnpNameByIndexAndType(
297 IN ULONG DeviceIndex,
298 IN SOUND_DEVICE_TYPE DeviceType,
299 OUT LPWSTR *Device);
300
301
302 /* sup.c */
303
304 ULONG
305 GetSysAudioDeviceCount(
306 IN PDEVICE_OBJECT DeviceObject);
307
308
309 PVOID
310 AllocateItem(
311 IN POOL_TYPE PoolType,
312 IN SIZE_T NumberOfBytes);
313
314 VOID
315 FreeItem(
316 IN PVOID Item);
317