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_CONNECTIONSET(PinSet,\
318 PropStateHandler, PropDataFormatHandler)\
319 DEFINE_KSPROPERTY_TABLE(PinSet) {\
320 DEFINE_KSPROPERTY_ITEM_CONNECTION_STATE(PropStateHandler, PropStateHandler),\
321 DEFINE_KSPROPERTY_ITEM_CONNECTION_DATAFORMAT(PropDataFormatHandler, PropDataFormatHandler)\
324 #define DEFINE_KSPROPERTY_ITEM_AUDIO_POSITION(GetHandler, SetHandler)\
325 DEFINE_KSPROPERTY_ITEM(\
326 KSPROPERTY_AUDIO_POSITION,\
329 sizeof(KSAUDIO_POSITION),\
331 NULL, 0, NULL, NULL, 0)
333 #define DEFINE_KSPROPERTY_AUDIOSET(PinSet,\
334 PropPositionHandler)\
335 DEFINE_KSPROPERTY_TABLE(PinSet) {\
336 DEFINE_KSPROPERTY_ITEM_AUDIO_POSITION(PropPositionHandler, PropPositionHandler)\
342 #define DEFINE_KSPROPERTY_PINPROPOSEDATAFORMAT(PinSet,\
343 PropGeneral, PropInstances, PropIntersection)\
344 DEFINE_KSPROPERTY_TABLE(PinSet) {\
345 DEFINE_KSPROPERTY_ITEM_PIN_CINSTANCES(PropInstances),\
346 DEFINE_KSPROPERTY_ITEM_PIN_CTYPES(PropGeneral),\
347 DEFINE_KSPROPERTY_ITEM_PIN_DATAFLOW(PropGeneral),\
348 DEFINE_KSPROPERTY_ITEM_PIN_DATARANGES(PropGeneral),\
349 DEFINE_KSPROPERTY_ITEM_PIN_DATAINTERSECTION(PropIntersection),\
350 DEFINE_KSPROPERTY_ITEM_PIN_INTERFACES(PropGeneral),\
351 DEFINE_KSPROPERTY_ITEM_PIN_MEDIUMS(PropGeneral),\
352 DEFINE_KSPROPERTY_ITEM_PIN_COMMUNICATION(PropGeneral),\
353 DEFINE_KSPROPERTY_ITEM_PIN_GLOBALCINSTANCES(PropGeneral),\
354 DEFINE_KSPROPERTY_ITEM_PIN_NECESSARYINSTANCES(PropGeneral),\
355 DEFINE_KSPROPERTY_ITEM_PIN_PHYSICALCONNECTION(PropGeneral),\
356 DEFINE_KSPROPERTY_ITEM_PIN_CATEGORY(PropGeneral),\
357 DEFINE_KSPROPERTY_ITEM_PIN_NAME(PropGeneral),\
358 DEFINE_KSPROPERTY_ITEM_PIN_CONSTRAINEDDATARANGES(PropGeneral),\
359 DEFINE_KSPROPERTY_ITEM_PIN_PROPOSEDATAFORMAT(PropGeneral)\
364 KSDEVICE_HEADER KsDeviceHeader;
365 PDEVICE_OBJECT PhysicalDeviceObject;
366 PDEVICE_OBJECT PrevDeviceObject;
367 PCPFNSTARTDEVICE StartDevice;
369 IAdapterPowerManagement * AdapterPowerManagement;
371 KSOBJECT_CREATE_ITEM * CreateItems;
373 IResourceList* resources;
375 LIST_ENTRY TimerList;
376 KSPIN_LOCK TimerListLock;
378 } PCLASS_DEVICE_EXTENSION, *PPCLASS_DEVICE_EXTENSION;
384 PIO_WORKITEM WorkItem;
386 }CLOSESTREAM_CONTEXT, *PCLOSESTREAM_CONTEXT;
391 PIO_TIMER_ROUTINE pTimerRoutine;
393 }TIMER_CONTEXT, *PTIMER_CONTEXT;