- Use InterlockedIncrement, InterlockedDecrement over intrinsics
[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 YDEBUG
13 #include <debug.h>
14
15 #include <portcls.h>
16 #include <dmusicks.h>
17
18 #include "interfaces.h"
19 #include <ks.h>
20 #include <ksmedia.h>
21 #include <stdio.h>
22 #include <math.h>
23 #include <intrin.h>
24
25 #define TAG(A, B, C, D) (ULONG)(((A)<<0) + ((B)<<8) + ((C)<<16) + ((D)<<24))
26 #define TAG_PORTCLASS TAG('P', 'C', 'L', 'S')
27
28 #ifdef _MSC_VER
29 #define STDCALL
30 #define DDKAPI
31 #endif
32
33 NTSTATUS
34 NTAPI
35 PortClsCreate(
36 IN PDEVICE_OBJECT DeviceObject,
37 IN PIRP Irp);
38
39 NTSTATUS
40 NTAPI
41 PortClsPnp(
42 IN PDEVICE_OBJECT DeviceObject,
43 IN PIRP Irp);
44
45 NTSTATUS
46 NTAPI
47 PortClsPower(
48 IN PDEVICE_OBJECT DeviceObject,
49 IN PIRP Irp);
50
51 NTSTATUS
52 NTAPI
53 PortClsSysControl(
54 IN PDEVICE_OBJECT DeviceObject,
55 IN PIRP Irp);
56
57 NTSTATUS NewMiniportDMusUART(
58 OUT PMINIPORT* OutMiniport,
59 IN REFCLSID ClassId);
60
61 NTSTATUS NewMiniportFmSynth(
62 OUT PMINIPORT* OutMiniport,
63 IN REFCLSID ClassId);
64
65 NTSTATUS NewPortMidi(
66 OUT PPORT* OutPort);
67
68 NTSTATUS NewPortDMus(
69 OUT PPORT* OutPort);
70
71 NTSTATUS NewPortTopology(
72 OUT PPORT* OutPort);
73
74 NTSTATUS NewPortWaveCyclic(
75 OUT PPORT* OutPort);
76
77 NTSTATUS NewPortWavePci(
78 OUT PPORT* OutPort);
79
80 NTSTATUS NewIDrmPort(
81 OUT PDRMPORT2 *OutPort);
82
83 NTSTATUS NewPortClsVersion(
84 OUT PPORTCLSVERSION * OutVersion);
85
86 NTSTATUS NewPortFilterWaveCyclic(
87 OUT IPortFilterWaveCyclic ** OutFilter);
88
89 PVOID AllocateItem(IN POOL_TYPE PoolType, IN SIZE_T NumberOfBytes, IN ULONG Tag);
90
91 VOID
92 FreeItem(
93 IN PVOID Item,
94 IN ULONG Tag);
95
96 NTSTATUS StringFromCLSID(
97 const CLSID *id,
98 LPWSTR idstr);
99
100
101 typedef struct
102 {
103 LIST_ENTRY Entry;
104 KSOBJECT_HEADER ObjectHeader;
105 }SUBDEVICE_ENTRY;
106
107 typedef struct
108 {
109 LIST_ENTRY Entry;
110 ISubdevice * FromSubDevice;
111 LPWSTR FromUnicodeString;
112 ULONG FromPin;
113 ISubdevice * ToSubDevice;
114 LPWSTR ToUnicodeString;
115 ULONG ToPin;
116 }PHYSICAL_CONNECTION;
117
118
119 typedef struct
120 {
121 PDEVICE_OBJECT PhysicalDeviceObject;
122 PDEVICE_OBJECT PrevDeviceObject;
123 PCPFNSTARTDEVICE StartDevice;
124 KSDEVICE_HEADER KsDeviceHeader;
125 IAdapterPowerManagement * AdapterPowerManagement;
126 ULONG MaxSubDevices;
127 KSOBJECT_CREATE_ITEM * CreateItems;
128
129
130 IResourceList* resources;
131 LIST_ENTRY SubDeviceList;
132 LIST_ENTRY PhysicalConnectionList;
133
134 } PCExtension;
135
136
137 NTSTATUS
138 NTAPI
139 PcDmaMasterDescription(
140 IN PRESOURCELIST ResourceList OPTIONAL,
141 IN BOOLEAN ScatterGather,
142 IN BOOLEAN Dma32BitAddresses,
143 IN BOOLEAN IgnoreCount,
144 IN BOOLEAN Dma64BitAddresses,
145 IN DMA_WIDTH DmaWidth,
146 IN DMA_SPEED DmaSpeed,
147 IN ULONG MaximumLength,
148 IN ULONG DmaPort,
149 OUT PDEVICE_DESCRIPTION DeviceDescription);
150
151 NTSTATUS
152 NTAPI
153 PcDmaSlaveDescription(
154 IN PRESOURCELIST ResourceList OPTIONAL,
155 IN ULONG DmaIndex,
156 IN BOOL DemandMode,
157 IN ULONG AutoInitialize,
158 IN DMA_SPEED DmaSpeed,
159 IN ULONG MaximumLength,
160 IN ULONG DmaPort,
161 OUT PDEVICE_DESCRIPTION DeviceDescription);
162
163 NTSTATUS
164 NTAPI
165 PcCreateSubdeviceDescriptor(
166 OUT SUBDEVICE_DESCRIPTOR ** OutSubdeviceDescriptor,
167 IN ULONG InterfaceCount,
168 IN GUID * InterfaceGuids,
169 IN ULONG IdentifierCount,
170 IN KSIDENTIFIER *Identifier,
171 IN ULONG FilterPropertiesCount,
172 IN KSPROPERTY_SET * FilterProperties,
173 IN ULONG Unknown1,
174 IN ULONG Unknown2,
175 IN ULONG PinPropertiesCount,
176 IN KSPROPERTY_SET * PinProperties,
177 IN ULONG EventSetCount,
178 IN KSEVENT_SET * EventSet,
179 IN PPCFILTER_DESCRIPTOR FilterDescription);
180
181 #endif