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