7 #ifndef PORTCLS_PRIVATE_H
8 #define PORTCLS_PRIVATE_H
10 //#define _KS_NO_ANONYMOUS_STRUCTURES_
11 #define PC_IMPLEMENTATION
20 #include "interfaces.hpp"
25 #define TAG_PORTCLASS 'SLCP'
27 #define PC_ASSERT(exp) \
29 RtlAssert((PVOID) #exp, (PVOID)__FILE__, __LINE__, NULL ), FALSE : TRUE)
31 #define PC_ASSERT_IRQL(x) PC_ASSERT(KeGetCurrentIrql() <= (x))
32 #define PC_ASSERT_IRQL_EQUAL(x) PC_ASSERT(KeGetCurrentIrql()==(x))
39 IN PDEVICE_OBJECT DeviceObject,
47 IN PDEVICE_OBJECT DeviceObject,
55 IN PDEVICE_OBJECT DeviceObject,
63 IN PDEVICE_OBJECT DeviceObject,
68 OUT PMINIPORT* OutMiniport,
73 OUT PMINIPORT* OutMiniport,
94 OUT PDRMPORT2 *OutPort);
98 OUT PPORTCLSVERSION * OutVersion);
101 NewPortFilterWaveCyclic(
102 OUT IPortFilterWaveCyclic ** OutFilter);
105 NewPortPinWaveCyclic(
106 OUT IPortPinWaveCyclic ** OutPin);
109 NewPortFilterWavePci(
110 OUT IPortFilterWavePci ** OutFilter);
114 OUT IPortPinWavePci ** OutPin);
117 GetDeviceObjectFromWaveCyclic(
118 IPortWavePci* iface);
121 GetDeviceObjectFromPortWavePci(
122 IPortWavePci* iface);
131 OUT PPORTFILTERDMUS * OutFilter);
136 OUT PPORTPINDMUS * OutPin);
140 IN IPortDMus * iface,
141 IN PMINIPORTDMUS * Miniport,
142 IN PMINIPORTMIDI * MidiMiniport);
144 #if (NTDDI_VERSION >= NTDDI_VISTA)
148 OUT IPortFilterWaveRT ** OutFilter);
152 OUT IPortPinWaveRT ** OutPin);
156 IN IPortWaveRT* iface);
159 GetDeviceObjectFromPortWaveRT(
165 PPORTWAVERTSTREAM *OutStream);
175 NewPortFilterTopology(
176 OUT IPortFilterTopology ** OutFilter);
186 IN IIrpTarget * Target,
187 IN ULONG ObjectCreateItemCount,
188 IN PKSOBJECT_CREATE_ITEM ObjectCreateItem);
191 GetWaveCyclicMiniport(
192 IN IPortWaveCyclic* iface);
196 IN POOL_TYPE PoolType,
197 IN SIZE_T NumberOfBytes,
208 IN IIrpQueue **Queue);
212 TopologyPropertyHandler(
214 IN PKSIDENTIFIER Request,
221 IN PKSIDENTIFIER Request,
228 PcDmaMasterDescription(
229 IN PRESOURCELIST ResourceList OPTIONAL,
230 IN BOOLEAN ScatterGather,
231 IN BOOLEAN Dma32BitAddresses,
232 IN BOOLEAN IgnoreCount,
233 IN BOOLEAN Dma64BitAddresses,
234 IN DMA_WIDTH DmaWidth,
235 IN DMA_SPEED DmaSpeed,
236 IN ULONG MaximumLength,
238 OUT PDEVICE_DESCRIPTION DeviceDescription);
244 PcDmaSlaveDescription(
245 IN PRESOURCELIST ResourceList OPTIONAL,
248 IN ULONG AutoInitialize,
249 IN DMA_SPEED DmaSpeed,
250 IN ULONG MaximumLength,
252 OUT PDEVICE_DESCRIPTION DeviceDescription);
258 PcCreateSubdeviceDescriptor(
259 OUT SUBDEVICE_DESCRIPTOR ** OutSubdeviceDescriptor,
260 IN ULONG InterfaceCount,
261 IN GUID * InterfaceGuids,
262 IN ULONG IdentifierCount,
263 IN KSIDENTIFIER *Identifier,
264 IN ULONG FilterPropertiesCount,
265 IN KSPROPERTY_SET * FilterProperties,
268 IN ULONG PinPropertiesCount,
269 IN KSPROPERTY_SET * PinProperties,
270 IN ULONG EventSetCount,
271 IN KSEVENT_SET * EventSet,
272 IN PPCFILTER_DESCRIPTOR FilterDescription);
278 PcValidateConnectRequest(
280 IN KSPIN_FACTORY * Descriptor,
281 OUT PKSPIN_CONNECT* Connect);
285 PcCreateItemDispatch(
286 IN PDEVICE_OBJECT DeviceObject,
291 IPortWaveCyclic* iface);
296 IN PDEVICE_OBJECT DeviceObject,
301 NewIUnregisterSubdevice(
302 OUT PUNREGISTERSUBDEVICE *OutDevice);
306 NewIUnregisterPhysicalConnection(
307 OUT PUNREGISTERPHYSICALCONNECTION *OutConnection);
311 PcHandlePropertyWithTable(
313 IN ULONG PropertySetCount,
314 IN PKSPROPERTY_SET PropertySet,
315 IN PSUBDEVICE_DESCRIPTOR Descriptor);
317 #define DEFINE_KSPROPERTY_PINPROPOSEDATAFORMAT(PinSet,\
318 PropGeneral, PropInstances, PropIntersection)\
319 DEFINE_KSPROPERTY_TABLE(PinSet) {\
320 DEFINE_KSPROPERTY_ITEM_PIN_CINSTANCES(PropInstances),\
321 DEFINE_KSPROPERTY_ITEM_PIN_CTYPES(PropGeneral),\
322 DEFINE_KSPROPERTY_ITEM_PIN_DATAFLOW(PropGeneral),\
323 DEFINE_KSPROPERTY_ITEM_PIN_DATARANGES(PropGeneral),\
324 DEFINE_KSPROPERTY_ITEM_PIN_DATAINTERSECTION(PropIntersection),\
325 DEFINE_KSPROPERTY_ITEM_PIN_INTERFACES(PropGeneral),\
326 DEFINE_KSPROPERTY_ITEM_PIN_MEDIUMS(PropGeneral),\
327 DEFINE_KSPROPERTY_ITEM_PIN_COMMUNICATION(PropGeneral),\
328 DEFINE_KSPROPERTY_ITEM_PIN_GLOBALCINSTANCES(PropGeneral),\
329 DEFINE_KSPROPERTY_ITEM_PIN_NECESSARYINSTANCES(PropGeneral),\
330 DEFINE_KSPROPERTY_ITEM_PIN_PHYSICALCONNECTION(PropGeneral),\
331 DEFINE_KSPROPERTY_ITEM_PIN_CATEGORY(PropGeneral),\
332 DEFINE_KSPROPERTY_ITEM_PIN_NAME(PropGeneral),\
333 DEFINE_KSPROPERTY_ITEM_PIN_CONSTRAINEDDATARANGES(PropGeneral),\
334 DEFINE_KSPROPERTY_ITEM_PIN_PROPOSEDATAFORMAT(PropGeneral)\
339 KSDEVICE_HEADER KsDeviceHeader;
340 PDEVICE_OBJECT PhysicalDeviceObject;
341 PDEVICE_OBJECT PrevDeviceObject;
342 PCPFNSTARTDEVICE StartDevice;
344 IAdapterPowerManagement * AdapterPowerManagement;
346 KSOBJECT_CREATE_ITEM * CreateItems;
348 IResourceList* resources;
350 LIST_ENTRY TimerList;
351 KSPIN_LOCK TimerListLock;
353 } PCLASS_DEVICE_EXTENSION, *PPCLASS_DEVICE_EXTENSION;
358 KSSTREAM_HEADER Header;
360 }CONTEXT_WRITE, *PCONTEXT_WRITE;
365 PIO_WORKITEM WorkItem;
367 }CLOSESTREAM_CONTEXT, *PCLOSESTREAM_CONTEXT;
372 PIO_TIMER_ROUTINE pTimerRoutine;
374 }TIMER_CONTEXT, *PTIMER_CONTEXT;