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