- Fix build
[reactos.git] / reactos / drivers / wdm / audio / backpln / portcls / private.h
1 /*
2 PortCls FDO Extension
3
4 by Andrew Greenwood
5 */
6
7 #ifndef PORTCLS_PRIVATE_H
8 #define PORTCLS_PRIVATE_H
9
10 #include <ntddk.h>
11 #include <portcls.h>
12 #define NDEBUG
13 #include <debug.h>
14
15 #include <dmusicks.h>
16
17 #include "interfaces.h"
18 #include <ks.h>
19 #include <ksmedia.h>
20 #include <stdio.h>
21 #include <math.h>
22 #include <intrin.h>
23
24 #define TAG(A, B, C, D) (ULONG)(((A)<<0) + ((B)<<8) + ((C)<<16) + ((D)<<24))
25 #define TAG_PORTCLASS TAG('P', 'C', 'L', 'S')
26
27 #ifdef _MSC_VER
28 #define STDCALL
29 #define DDKAPI
30 #endif
31
32 #define ASSERT_IRQL(x) ASSERT(KeGetCurrentIrql() <= (x))
33
34 NTSTATUS
35 NTAPI
36 PortClsCreate(
37 IN PDEVICE_OBJECT DeviceObject,
38 IN PIRP Irp);
39
40 NTSTATUS
41 NTAPI
42 PortClsPnp(
43 IN PDEVICE_OBJECT DeviceObject,
44 IN PIRP Irp);
45
46 NTSTATUS
47 NTAPI
48 PortClsPower(
49 IN PDEVICE_OBJECT DeviceObject,
50 IN PIRP Irp);
51
52 NTSTATUS
53 NTAPI
54 PortClsSysControl(
55 IN PDEVICE_OBJECT DeviceObject,
56 IN PIRP Irp);
57
58 NTSTATUS NewMiniportDMusUART(
59 OUT PMINIPORT* OutMiniport,
60 IN REFCLSID ClassId);
61
62 NTSTATUS NewMiniportFmSynth(
63 OUT PMINIPORT* OutMiniport,
64 IN REFCLSID ClassId);
65
66 NTSTATUS NewPortMidi(
67 OUT PPORT* OutPort);
68
69 NTSTATUS NewPortDMus(
70 OUT PPORT* OutPort);
71
72 NTSTATUS NewPortTopology(
73 OUT PPORT* OutPort);
74
75 NTSTATUS NewPortWaveCyclic(
76 OUT PPORT* OutPort);
77
78 NTSTATUS NewPortWavePci(
79 OUT PPORT* OutPort);
80
81 NTSTATUS NewIDrmPort(
82 OUT PDRMPORT2 *OutPort);
83
84 NTSTATUS NewPortClsVersion(
85 OUT PPORTCLSVERSION * OutVersion);
86
87 NTSTATUS NewPortFilterWaveCyclic(
88 OUT IPortFilterWaveCyclic ** OutFilter);
89
90 NTSTATUS NewPortPinWaveCyclic(
91 OUT IPortPinWaveCyclic ** OutPin);
92
93 NTSTATUS
94 NewPortFilterWavePci(
95 OUT IPortFilterWavePci ** OutFilter);
96
97 NTSTATUS NewPortPinWavePci(
98 OUT IPortPinWavePci ** OutPin);
99
100 PDEVICE_OBJECT
101 GetDeviceObjectFromWaveCyclic(
102 IPortWavePci* iface);
103
104 PDEVICE_OBJECT
105 GetDeviceObjectFromPortWavePci(
106 IPortWavePci* iface);
107
108 PMINIPORTWAVEPCI
109 GetWavePciMiniport(
110 PPORTWAVEPCI Port);
111
112 #if (NTDDI_VERSION >= NTDDI_VISTA)
113
114 NTSTATUS
115 NewPortFilterWaveRT(
116 OUT IPortFilterWaveRT ** OutFilter);
117
118 NTSTATUS NewPortPinWaveRT(
119 OUT IPortPinWaveRT ** OutPin);
120
121 PMINIPORTWAVERT
122 GetWaveRTMiniport(
123 IN IPortWaveRT* iface);
124
125 PDEVICE_OBJECT
126 GetDeviceObjectFromPortWaveRT(
127 IPortWaveRT* iface);
128
129 NTSTATUS
130 NewPortWaveRTStream(
131 PPORTWAVERTSTREAM *OutStream);
132
133 #endif
134
135 NTSTATUS
136 NTAPI
137 NewDispatchObject(
138 IN PIRP Irp,
139 IN IIrpTarget * Target);
140
141 PMINIPORTWAVECYCLIC
142 GetWaveCyclicMiniport(
143 IN IPortWaveCyclic* iface);
144
145 PVOID
146 AllocateItem(
147 IN POOL_TYPE PoolType,
148 IN SIZE_T NumberOfBytes,
149 IN ULONG Tag);
150
151 VOID
152 FreeItem(
153 IN PVOID Item,
154 IN ULONG Tag);
155
156 NTSTATUS
157 NTAPI
158 NewIrpQueue(
159 IN IIrpQueue **Queue);
160
161
162 typedef struct
163 {
164 LIST_ENTRY Entry;
165 KSOBJECT_HEADER ObjectHeader;
166 }SUBDEVICE_ENTRY;
167
168 typedef struct
169 {
170 LIST_ENTRY Entry;
171 ISubdevice * FromSubDevice;
172 LPWSTR FromUnicodeString;
173 ULONG FromPin;
174 ISubdevice * ToSubDevice;
175 LPWSTR ToUnicodeString;
176 ULONG ToPin;
177 }PHYSICAL_CONNECTION;
178
179 NTSTATUS
180 NTAPI
181 TopologyPropertyHandler(
182 IN PIRP Irp,
183 IN PKSIDENTIFIER Request,
184 IN OUT PVOID Data);
185
186 NTSTATUS
187 NTAPI
188 PinPropertyHandler(
189 IN PIRP Irp,
190 IN PKSIDENTIFIER Request,
191 IN OUT PVOID Data);
192
193 typedef struct
194 {
195 KSDEVICE_HEADER KsDeviceHeader;
196 PDEVICE_OBJECT PhysicalDeviceObject;
197 PDEVICE_OBJECT PrevDeviceObject;
198 PCPFNSTARTDEVICE StartDevice;
199 ULONG_PTR Unused[4];
200 IAdapterPowerManagement * AdapterPowerManagement;
201 ULONG MaxSubDevices;
202 KSOBJECT_CREATE_ITEM * CreateItems;
203
204 IResourceList* resources;
205 LIST_ENTRY SubDeviceList;
206 LIST_ENTRY PhysicalConnectionList;
207
208 } PCLASS_DEVICE_EXTENSION, *PPCLASS_DEVICE_EXTENSION;
209
210
211 typedef struct
212 {
213 KSSTREAM_HEADER Header;
214 PIRP Irp;
215 }CONTEXT_WRITE, *PCONTEXT_WRITE;
216
217 typedef struct
218 {
219 PVOID Pin;
220 PIO_WORKITEM WorkItem;
221 PIRP Irp;
222 }CLOSESTREAM_CONTEXT, *PCLOSESTREAM_CONTEXT;
223
224 NTSTATUS
225 NTAPI
226 PcDmaMasterDescription(
227 IN PRESOURCELIST ResourceList OPTIONAL,
228 IN BOOLEAN ScatterGather,
229 IN BOOLEAN Dma32BitAddresses,
230 IN BOOLEAN IgnoreCount,
231 IN BOOLEAN Dma64BitAddresses,
232 IN DMA_WIDTH DmaWidth,
233 IN DMA_SPEED DmaSpeed,
234 IN ULONG MaximumLength,
235 IN ULONG DmaPort,
236 OUT PDEVICE_DESCRIPTION DeviceDescription);
237
238 NTSTATUS
239 NTAPI
240 PcDmaSlaveDescription(
241 IN PRESOURCELIST ResourceList OPTIONAL,
242 IN ULONG DmaIndex,
243 IN BOOL DemandMode,
244 IN ULONG AutoInitialize,
245 IN DMA_SPEED DmaSpeed,
246 IN ULONG MaximumLength,
247 IN ULONG DmaPort,
248 OUT PDEVICE_DESCRIPTION DeviceDescription);
249
250 NTSTATUS
251 NTAPI
252 PcCreateSubdeviceDescriptor(
253 OUT SUBDEVICE_DESCRIPTOR ** OutSubdeviceDescriptor,
254 IN ULONG InterfaceCount,
255 IN GUID * InterfaceGuids,
256 IN ULONG IdentifierCount,
257 IN KSIDENTIFIER *Identifier,
258 IN ULONG FilterPropertiesCount,
259 IN KSPROPERTY_SET * FilterProperties,
260 IN ULONG Unknown1,
261 IN ULONG Unknown2,
262 IN ULONG PinPropertiesCount,
263 IN KSPROPERTY_SET * PinProperties,
264 IN ULONG EventSetCount,
265 IN KSEVENT_SET * EventSet,
266 IN PPCFILTER_DESCRIPTOR FilterDescription);
267
268 NTSTATUS
269 NTAPI
270 PcValidateConnectRequest(
271 IN PIRP Irp,
272 IN KSPIN_FACTORY * Descriptor,
273 OUT PKSPIN_CONNECT* Connect);
274
275 NTSTATUS
276 NTAPI
277 PcCreateItemDispatch(
278 IN PDEVICE_OBJECT DeviceObject,
279 IN PIRP Irp);
280
281 NTSTATUS
282 NTAPI
283 PcPropertyHandler(
284 IN PIRP Irp,
285 IN PSUBDEVICE_DESCRIPTOR Descriptor);
286
287 NTSTATUS
288 NTAPI
289 FastPropertyHandler(
290 IN PFILE_OBJECT FileObject,
291 IN PKSPROPERTY UNALIGNED Property,
292 IN ULONG PropertyLength,
293 IN OUT PVOID UNALIGNED Data,
294 IN ULONG DataLength,
295 OUT PIO_STATUS_BLOCK IoStatus,
296 IN ULONG PropertySetsCount,
297 IN const KSPROPERTY_SET *PropertySet,
298 IN PSUBDEVICE_DESCRIPTOR Descriptor,
299 IN ISubdevice *SubDevice);
300
301 PDEVICE_OBJECT
302 GetDeviceObject(
303 IPortWaveCyclic* iface);
304
305 IIrpQueue*
306 NTAPI
307 IPortWavePciStream_GetIrpQueue(
308 IN IPortWavePciStream *iface);
309
310 NTSTATUS
311 NTAPI
312 NewIPortWavePciStream(
313 OUT PPORTWAVEPCISTREAM *Stream);
314
315 #define DEFINE_KSPROPERTY_PINPROPOSEDATAFORMAT(PinSet,\
316 PropGeneral, PropInstances, PropIntersection)\
317 DEFINE_KSPROPERTY_TABLE(PinSet) {\
318 DEFINE_KSPROPERTY_ITEM_PIN_CINSTANCES(PropInstances),\
319 DEFINE_KSPROPERTY_ITEM_PIN_CTYPES(PropGeneral),\
320 DEFINE_KSPROPERTY_ITEM_PIN_DATAFLOW(PropGeneral),\
321 DEFINE_KSPROPERTY_ITEM_PIN_DATARANGES(PropGeneral),\
322 DEFINE_KSPROPERTY_ITEM_PIN_DATAINTERSECTION(PropIntersection),\
323 DEFINE_KSPROPERTY_ITEM_PIN_INTERFACES(PropGeneral),\
324 DEFINE_KSPROPERTY_ITEM_PIN_MEDIUMS(PropGeneral),\
325 DEFINE_KSPROPERTY_ITEM_PIN_COMMUNICATION(PropGeneral),\
326 DEFINE_KSPROPERTY_ITEM_PIN_CATEGORY(PropGeneral),\
327 DEFINE_KSPROPERTY_ITEM_PIN_NAME(PropGeneral),\
328 DEFINE_KSPROPERTY_ITEM_PIN_CONSTRAINEDDATARANGES(PropGeneral),\
329 DEFINE_KSPROPERTY_ITEM_PIN_PROPOSEDATAFORMAT(PropGeneral)\
330 }
331
332 #endif