xref: /reactos/drivers/wdm/audio/legacy/wdmaud/wdmaud.h (revision 595b846d)
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 WdmAudControlCloseMixer(
133     IN  PDEVICE_OBJECT DeviceObject,
134     IN  PIRP Irp,
135     IN  PWDMAUD_DEVICE_INFO DeviceInfo,
136     IN  PWDMAUD_CLIENT ClientInfo,
137     IN  ULONG Index);
138 
139 VOID
140 WdmAudCloseAllMixers(
141     IN PDEVICE_OBJECT DeviceObject,
142     IN PWDMAUD_CLIENT ClientInfo,
143     IN ULONG Index);
144 
145 NTSTATUS
146 WdmAudControlOpenWave(
147     IN  PDEVICE_OBJECT DeviceObject,
148     IN  PIRP Irp,
149     IN  PWDMAUD_DEVICE_INFO DeviceInfo,
150     IN  PWDMAUD_CLIENT ClientInfo);
151 
152 NTSTATUS
153 WdmAudControlOpenMidi(
154     IN  PDEVICE_OBJECT DeviceObject,
155     IN  PIRP Irp,
156     IN  PWDMAUD_DEVICE_INFO DeviceInfo,
157     IN  PWDMAUD_CLIENT ClientInfo);
158 
159 ULONG
160 GetNumOfMixerDevices(
161     IN  PDEVICE_OBJECT DeviceObject);
162 
163 NTSTATUS
164 SetIrpIoStatus(
165     IN PIRP Irp,
166     IN NTSTATUS Status,
167     IN ULONG Length);
168 
169 NTSTATUS
170 WdmAudOpenSysAudioDevice(
171     IN LPWSTR DeviceName,
172     OUT PHANDLE Handle);
173 
174 NTSTATUS
175 FindProductName(
176     IN LPWSTR PnpName,
177     IN ULONG ProductNameSize,
178     OUT LPWSTR ProductName);
179 
180 NTSTATUS
181 WdmAudMixerCapabilities(
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 WdmAudWaveCapabilities(
189     IN PDEVICE_OBJECT DeviceObject,
190     IN  PWDMAUD_DEVICE_INFO DeviceInfo,
191     IN  PWDMAUD_CLIENT ClientInfo,
192     IN PWDMAUD_DEVICE_EXTENSION DeviceExtension);
193 
194 NTSTATUS
195 WdmAudMidiCapabilities(
196     IN PDEVICE_OBJECT DeviceObject,
197     IN PWDMAUD_DEVICE_INFO DeviceInfo,
198     IN PWDMAUD_CLIENT ClientInfo,
199     IN PWDMAUD_DEVICE_EXTENSION DeviceExtension);
200 
201 NTSTATUS
202 NTAPI
203 WdmAudFrameSize(
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 WdmAudGetLineInfo(
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 WdmAudGetLineControls(
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 WdmAudSetControlDetails(
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 WdmAudGetMixerEvent(
236     IN  PDEVICE_OBJECT DeviceObject,
237     IN  PIRP Irp,
238     IN  PWDMAUD_DEVICE_INFO DeviceInfo,
239     IN  PWDMAUD_CLIENT ClientInfo);
240 
241 NTSTATUS
242 NTAPI
243 WdmAudGetControlDetails(
244     IN  PDEVICE_OBJECT DeviceObject,
245     IN  PIRP Irp,
246     IN  PWDMAUD_DEVICE_INFO DeviceInfo,
247     IN  PWDMAUD_CLIENT ClientInfo);
248 
249 NTSTATUS
250 WdmAudMixerInitialize(
251     IN PDEVICE_OBJECT DeviceObject);
252 
253 NTSTATUS
254 NTAPI
255 WdmAudWaveInitialize(
256     IN PDEVICE_OBJECT DeviceObject);
257 
258 ULONG
259 ClosePin(
260     IN  PWDMAUD_CLIENT ClientInfo,
261     IN  ULONG FilterId,
262     IN  ULONG PinId,
263     IN  SOUND_DEVICE_TYPE DeviceType);
264 
265 NTSTATUS
266 InsertPinHandle(
267     IN  PWDMAUD_CLIENT ClientInfo,
268     IN  ULONG FilterId,
269     IN  ULONG PinId,
270     IN  SOUND_DEVICE_TYPE DeviceType,
271     IN  HANDLE PinHandle,
272     IN  ULONG FreeIndex);
273 
274 NTSTATUS
275 GetSysAudioDevicePnpName(
276     IN  PDEVICE_OBJECT DeviceObject,
277     IN  ULONG DeviceIndex,
278     OUT LPWSTR * Device);
279 
280 NTSTATUS
281 OpenSysAudioDeviceByIndex(
282     IN  PDEVICE_OBJECT DeviceObject,
283     IN  ULONG DeviceIndex,
284     IN  PHANDLE DeviceHandle,
285     IN  PFILE_OBJECT * FileObject);
286 
287 NTSTATUS
288 OpenDevice(
289     IN LPWSTR Device,
290     OUT PHANDLE DeviceHandle,
291     OUT PFILE_OBJECT * FileObject);
292 
293 ULONG
294 WdmAudGetMixerDeviceCount(VOID);
295 
296 ULONG
297 WdmAudGetWaveInDeviceCount(VOID);
298 
299 ULONG
300 WdmAudGetWaveOutDeviceCount(VOID);
301 
302 ULONG
303 WdmAudGetMidiInDeviceCount(VOID);
304 
305 ULONG
306 WdmAudGetMidiOutDeviceCount(VOID);
307 
308 NTSTATUS
309 WdmAudGetPnpNameByIndexAndType(
310     IN ULONG DeviceIndex,
311     IN SOUND_DEVICE_TYPE DeviceType,
312     OUT LPWSTR *Device);
313 
314 
315 /* sup.c */
316 
317 ULONG
318 GetSysAudioDeviceCount(
319     IN  PDEVICE_OBJECT DeviceObject);
320 
321 
322 PVOID
323 AllocateItem(
324     IN POOL_TYPE PoolType,
325     IN SIZE_T NumberOfBytes);
326 
327 VOID
328 FreeItem(
329     IN PVOID Item);
330 
331 #endif /* _WDMAUD_PCH_ */
332