- Remove dead code
[reactos.git] / reactos / drivers / wdm / audio / backpln / portcls / private.hpp
1 /*
2 PortCls FDO Extension
3
4 by Andrew Greenwood
5 */
6
7 #ifndef PORTCLS_PRIVATE_H
8 #define PORTCLS_PRIVATE_H
9
10 //#define _KS_NO_ANONYMOUS_STRUCTURES_
11 #define PC_IMPLEMENTATION
12
13 #include <ntddk.h>
14 #include <portcls.h>
15 #define YDEBUG
16 #include <debug.h>
17
18 #include <dmusicks.h>
19 #include <kcom.h>
20 #include "stdunk.h"
21 #include "interfaces.hpp"
22 #include <ks.h>
23 #include <ksmedia.h>
24 #include <stdio.h>
25 #include <math.h>
26 #include <intrin.h>
27
28 #include <assert.h>
29
30 #define TAG_PORTCLASS 'SLCP'
31
32 #define PC_ASSERT(exp) \
33 (VOID)((!(exp)) ? \
34 RtlAssert((PVOID) #exp, (PVOID)__FILE__, __LINE__, NULL ), FALSE : TRUE)
35
36 #define PC_ASSERT_IRQL(x) PC_ASSERT(KeGetCurrentIrql() <= (x))
37 #define PC_ASSERT_IRQL_EQUAL(x) PC_ASSERT(KeGetCurrentIrql()==(x))
38
39 extern
40 "C"
41 NTSTATUS
42 NTAPI
43 PortClsCreate(
44 IN PDEVICE_OBJECT DeviceObject,
45 IN PIRP Irp);
46
47 extern
48 "C"
49 NTSTATUS
50 NTAPI
51 PortClsPnp(
52 IN PDEVICE_OBJECT DeviceObject,
53 IN PIRP Irp);
54
55 extern
56 "C"
57 NTSTATUS
58 NTAPI
59 PortClsPower(
60 IN PDEVICE_OBJECT DeviceObject,
61 IN PIRP Irp);
62
63 extern
64 "C"
65 NTSTATUS
66 NTAPI
67 PortClsSysControl(
68 IN PDEVICE_OBJECT DeviceObject,
69 IN PIRP Irp);
70
71 NTSTATUS
72 NewMiniportDMusUART(
73 OUT PMINIPORT* OutMiniport,
74 IN REFCLSID ClassId);
75
76 NTSTATUS
77 NewMiniportFmSynth(
78 OUT PMINIPORT* OutMiniport,
79 IN REFCLSID ClassId);
80
81 NTSTATUS
82 NewPortDMus(
83 OUT PPORT* OutPort);
84
85 NTSTATUS
86 NewPortTopology(
87 OUT PPORT* OutPort);
88
89 NTSTATUS
90 NewPortWaveCyclic(
91 OUT PPORT* OutPort);
92
93 NTSTATUS
94 NewPortWavePci(
95 OUT PPORT* OutPort);
96
97 NTSTATUS
98 NewIDrmPort(
99 OUT PDRMPORT2 *OutPort);
100
101 NTSTATUS
102 NewPortClsVersion(
103 OUT PPORTCLSVERSION * OutVersion);
104
105 NTSTATUS
106 NewPortFilterWaveCyclic(
107 OUT IPortFilterWaveCyclic ** OutFilter);
108
109 NTSTATUS
110 NewPortPinWaveCyclic(
111 OUT IPortPinWaveCyclic ** OutPin);
112
113 NTSTATUS
114 NewPortFilterWavePci(
115 OUT IPortFilterWavePci ** OutFilter);
116
117 NTSTATUS
118 NewPortPinWavePci(
119 OUT IPortPinWavePci ** OutPin);
120
121 PDEVICE_OBJECT
122 GetDeviceObjectFromWaveCyclic(
123 IPortWavePci* iface);
124
125 PDEVICE_OBJECT
126 GetDeviceObjectFromPortWavePci(
127 IPortWavePci* iface);
128
129 PMINIPORTWAVEPCI
130 GetWavePciMiniport(
131 PPORTWAVEPCI Port);
132
133
134 NTSTATUS
135 NewPortFilterDMus(
136 OUT PPORTFILTERDMUS * OutFilter);
137
138
139 NTSTATUS
140 NewPortPinDMus(
141 OUT PPORTPINDMUS * OutPin);
142
143 VOID
144 GetDMusMiniport(
145 IN IPortDMus * iface,
146 IN PMINIPORTDMUS * Miniport,
147 IN PMINIPORTMIDI * MidiMiniport);
148
149 #if (NTDDI_VERSION >= NTDDI_VISTA)
150
151 NTSTATUS
152 NewPortFilterWaveRT(
153 OUT IPortFilterWaveRT ** OutFilter);
154
155 NTSTATUS
156 NewPortPinWaveRT(
157 OUT IPortPinWaveRT ** OutPin);
158
159 PMINIPORTWAVERT
160 GetWaveRTMiniport(
161 IN IPortWaveRT* iface);
162
163 PDEVICE_OBJECT
164 GetDeviceObjectFromPortWaveRT(
165 IPortWaveRT* iface);
166
167
168 NTSTATUS
169 NewPortWaveRTStream(
170 PPORTWAVERTSTREAM *OutStream);
171
172 NTSTATUS
173 NewPortWaveRT(
174 OUT PPORT* OutPort);
175
176
177 #endif
178
179 NTSTATUS
180 NewPortFilterTopology(
181 OUT IPortFilterTopology ** OutFilter);
182
183 PMINIPORTTOPOLOGY
184 GetTopologyMiniport(
185 PPORTTOPOLOGY Port);
186
187 NTSTATUS
188 NTAPI
189 NewDispatchObject(
190 IN PIRP Irp,
191 IN IIrpTarget * Target,
192 IN ULONG ObjectCreateItemCount,
193 IN PKSOBJECT_CREATE_ITEM ObjectCreateItem);
194
195 PMINIPORTWAVECYCLIC
196 GetWaveCyclicMiniport(
197 IN IPortWaveCyclic* iface);
198
199 PVOID
200 AllocateItem(
201 IN POOL_TYPE PoolType,
202 IN SIZE_T NumberOfBytes,
203 IN ULONG Tag);
204
205 VOID
206 FreeItem(
207 IN PVOID Item,
208 IN ULONG Tag);
209
210 NTSTATUS
211 NTAPI
212 NewIrpQueue(
213 IN IIrpQueue **Queue);
214
215 NTSTATUS
216 NTAPI
217 TopologyPropertyHandler(
218 IN PIRP Irp,
219 IN PKSIDENTIFIER Request,
220 IN OUT PVOID Data);
221
222 NTSTATUS
223 NTAPI
224 PinPropertyHandler(
225 IN PIRP Irp,
226 IN PKSIDENTIFIER Request,
227 IN OUT PVOID Data);
228
229 extern
230 "C"
231 NTSTATUS
232 NTAPI
233 PcDmaMasterDescription(
234 IN PRESOURCELIST ResourceList OPTIONAL,
235 IN BOOLEAN ScatterGather,
236 IN BOOLEAN Dma32BitAddresses,
237 IN BOOLEAN IgnoreCount,
238 IN BOOLEAN Dma64BitAddresses,
239 IN DMA_WIDTH DmaWidth,
240 IN DMA_SPEED DmaSpeed,
241 IN ULONG MaximumLength,
242 IN ULONG DmaPort,
243 OUT PDEVICE_DESCRIPTION DeviceDescription);
244
245 extern
246 "C"
247 NTSTATUS
248 NTAPI
249 PcDmaSlaveDescription(
250 IN PRESOURCELIST ResourceList OPTIONAL,
251 IN ULONG DmaIndex,
252 IN BOOL DemandMode,
253 IN ULONG AutoInitialize,
254 IN DMA_SPEED DmaSpeed,
255 IN ULONG MaximumLength,
256 IN ULONG DmaPort,
257 OUT PDEVICE_DESCRIPTION DeviceDescription);
258
259 extern
260 "C"
261 NTSTATUS
262 NTAPI
263 PcCreateSubdeviceDescriptor(
264 OUT SUBDEVICE_DESCRIPTOR ** OutSubdeviceDescriptor,
265 IN ULONG InterfaceCount,
266 IN GUID * InterfaceGuids,
267 IN ULONG IdentifierCount,
268 IN KSIDENTIFIER *Identifier,
269 IN ULONG FilterPropertiesCount,
270 IN KSPROPERTY_SET * FilterProperties,
271 IN ULONG Unknown1,
272 IN ULONG Unknown2,
273 IN ULONG PinPropertiesCount,
274 IN KSPROPERTY_SET * PinProperties,
275 IN ULONG EventSetCount,
276 IN KSEVENT_SET * EventSet,
277 IN PPCFILTER_DESCRIPTOR FilterDescription);
278
279 extern
280 "C"
281 NTSTATUS
282 NTAPI
283 PcValidateConnectRequest(
284 IN PIRP Irp,
285 IN KSPIN_FACTORY * Descriptor,
286 OUT PKSPIN_CONNECT* Connect);
287
288 NTSTATUS
289 NTAPI
290 PcCreateItemDispatch(
291 IN PDEVICE_OBJECT DeviceObject,
292 IN PIRP Irp);
293
294 NTSTATUS
295 NTAPI
296 PcPropertyHandler(
297 IN PIRP Irp,
298 IN PSUBDEVICE_DESCRIPTOR Descriptor);
299
300 NTSTATUS
301 NTAPI
302 FastPropertyHandler(
303 IN PFILE_OBJECT FileObject,
304 IN PKSPROPERTY UNALIGNED Property,
305 IN ULONG PropertyLength,
306 IN OUT PVOID UNALIGNED Data,
307 IN ULONG DataLength,
308 OUT PIO_STATUS_BLOCK IoStatus,
309 IN ULONG PropertySetsCount,
310 IN const KSPROPERTY_SET *PropertySet,
311 IN PSUBDEVICE_DESCRIPTOR Descriptor,
312 IN ISubdevice *SubDevice);
313
314 PDEVICE_OBJECT
315 GetDeviceObject(
316 IPortWaveCyclic* iface);
317
318 VOID
319 NTAPI
320 PcIoTimerRoutine(
321 IN PDEVICE_OBJECT DeviceObject,
322 IN PVOID Context);
323
324 NTSTATUS
325 NTAPI
326 NewIUnregisterSubdevice(
327 OUT PUNREGISTERSUBDEVICE *OutDevice);
328
329 NTSTATUS
330 NTAPI
331 NewIUnregisterPhysicalConnection(
332 OUT PUNREGISTERPHYSICALCONNECTION *OutConnection);
333
334 #define DEFINE_KSPROPERTY_PINPROPOSEDATAFORMAT(PinSet,\
335 PropGeneral, PropInstances, PropIntersection)\
336 DEFINE_KSPROPERTY_TABLE(PinSet) {\
337 DEFINE_KSPROPERTY_ITEM_PIN_CINSTANCES(PropInstances),\
338 DEFINE_KSPROPERTY_ITEM_PIN_CTYPES(PropGeneral),\
339 DEFINE_KSPROPERTY_ITEM_PIN_DATAFLOW(PropGeneral),\
340 DEFINE_KSPROPERTY_ITEM_PIN_DATARANGES(PropGeneral),\
341 DEFINE_KSPROPERTY_ITEM_PIN_DATAINTERSECTION(PropIntersection),\
342 DEFINE_KSPROPERTY_ITEM_PIN_INTERFACES(PropGeneral),\
343 DEFINE_KSPROPERTY_ITEM_PIN_MEDIUMS(PropGeneral),\
344 DEFINE_KSPROPERTY_ITEM_PIN_COMMUNICATION(PropGeneral),\
345 DEFINE_KSPROPERTY_ITEM_PIN_GLOBALCINSTANCES(PropGeneral),\
346 DEFINE_KSPROPERTY_ITEM_PIN_NECESSARYINSTANCES(PropGeneral),\
347 DEFINE_KSPROPERTY_ITEM_PIN_PHYSICALCONNECTION(PropGeneral),\
348 DEFINE_KSPROPERTY_ITEM_PIN_CATEGORY(PropGeneral),\
349 DEFINE_KSPROPERTY_ITEM_PIN_NAME(PropGeneral),\
350 DEFINE_KSPROPERTY_ITEM_PIN_CONSTRAINEDDATARANGES(PropGeneral),\
351 DEFINE_KSPROPERTY_ITEM_PIN_PROPOSEDATAFORMAT(PropGeneral)\
352 }
353
354 typedef struct
355 {
356 LIST_ENTRY Entry;
357 UNICODE_STRING SymbolicLink;
358 }SYMBOLICLINK_ENTRY, *PSYMBOLICLINK_ENTRY;
359
360
361 typedef struct
362 {
363 LIST_ENTRY Entry;
364 ISubdevice *SubDevice;
365 UNICODE_STRING Name;
366 LIST_ENTRY SymbolicLinkList;
367 }SUBDEVICE_ENTRY, *PSUBDEVICE_ENTRY;
368
369 typedef struct
370 {
371 LIST_ENTRY Entry;
372 ISubdevice * FromSubDevice;
373 UNICODE_STRING FromUnicodeString;
374 ULONG FromPin;
375 ISubdevice * ToSubDevice;
376 UNICODE_STRING ToUnicodeString;
377 ULONG ToPin;
378 }PHYSICAL_CONNECTION, *PPHYSICAL_CONNECTION;
379
380 typedef struct
381 {
382 KSDEVICE_HEADER KsDeviceHeader;
383 PDEVICE_OBJECT PhysicalDeviceObject;
384 PDEVICE_OBJECT PrevDeviceObject;
385 PCPFNSTARTDEVICE StartDevice;
386 ULONG_PTR Unused[4];
387 IAdapterPowerManagement * AdapterPowerManagement;
388 ULONG MaxSubDevices;
389 KSOBJECT_CREATE_ITEM * CreateItems;
390
391 IResourceList* resources;
392 LIST_ENTRY SubDeviceList;
393 LIST_ENTRY PhysicalConnectionList;
394
395 LIST_ENTRY TimerList;
396 KSPIN_LOCK TimerListLock;
397
398 } PCLASS_DEVICE_EXTENSION, *PPCLASS_DEVICE_EXTENSION;
399
400
401 typedef struct
402 {
403 KSSTREAM_HEADER Header;
404 PIRP Irp;
405 }CONTEXT_WRITE, *PCONTEXT_WRITE;
406
407 typedef struct
408 {
409 PVOID Pin;
410 PIO_WORKITEM WorkItem;
411 PIRP Irp;
412 }CLOSESTREAM_CONTEXT, *PCLOSESTREAM_CONTEXT;
413
414 typedef struct
415 {
416 LIST_ENTRY Entry;
417 PIO_TIMER_ROUTINE pTimerRoutine;
418 PVOID Context;
419 }TIMER_CONTEXT, *PTIMER_CONTEXT;
420
421 #endif