ReactOS  0.4.13-dev-464-g6b95727
port_wavepci.cpp
Go to the documentation of this file.
1 /*
2  * COPYRIGHT: See COPYING in the top level directory
3  * PROJECT: ReactOS Kernel Streaming
4  * FILE: drivers/wdm/audio/backpln/portcls/port_wavepci.cpp
5  * PURPOSE: Wave PCI Port driver
6  * PROGRAMMER: Johannes Anderwald
7  */
8 
9 #include "private.hpp"
10 
11 #ifndef YDEBUG
12 #define NDEBUG
13 #endif
14 
15 #include <debug.h>
16 
17 class CPortWavePci : public IPortWavePci,
18  public IPortEvents,
19  public ISubdevice,
20  public IServiceSink
21 {
22 public:
24 
26  {
28  return m_Ref;
29  }
31  {
33 
34  if (!m_Ref)
35  {
36  delete this;
37  return 0;
38  }
39  return m_Ref;
40  }
45  CPortWavePci(IUnknown *OuterUnknown){}
46  virtual ~CPortWavePci() {}
47 
48 protected:
49 
57  IPortFilterWavePci * m_Filter;
58 
61 
63 
64  friend PDEVICE_OBJECT GetDeviceObjectFromPortWavePci(IPortWavePci* iface);
66 
67 };
68 
69 static GUID InterfaceGuids[3] =
70 {
71  {
73  0x6994AD04, 0x93EF, 0x11D0, {0xA3, 0xCC, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
74  },
75  {
77  0x65E8773EL, 0x8F56, 0x11D0, {0xA3, 0xB9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
78  },
79  {
81  0x65E8773DL, 0x8F56, 0x11D0, {0xA3, 0xB9, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96}
82  }
83 };
84 
85 DEFINE_KSPROPERTY_TOPOLOGYSET(PortFilterWavePciTopologySet, TopologyPropertyHandler);
87 
88 KSPROPERTY_SET WavePciPropertySet[] =
89 {
90  {
92  sizeof(PortFilterWavePciTopologySet) / sizeof(KSPROPERTY_ITEM),
93  (const KSPROPERTY_ITEM*)&PortFilterWavePciTopologySet,
94  0,
95  NULL
96  },
97  {
99  sizeof(PortFilterWavePciPinSet) / sizeof(KSPROPERTY_ITEM),
100  (const KSPROPERTY_ITEM*)&PortFilterWavePciPinSet,
101  0,
102  NULL
103  }
104 };
105 
106 
107 //---------------------------------------------------------------
108 // IPortEvents
109 //
110 
111 void
112 NTAPI
113 CPortWavePci::AddEventToEventList(
114  IN PKSEVENT_ENTRY EventEntry)
115 {
116  KIRQL OldIrql;
117 
119 
121  InsertTailList(&m_EventList, &EventEntry->ListEntry);
123 }
124 
125 
126 
127 void
128 NTAPI
129 CPortWavePci::GenerateEventList(
130  IN GUID* Set OPTIONAL,
131  IN ULONG EventId,
132  IN BOOL PinEvent,
133  IN ULONG PinId,
134  IN BOOL NodeEvent,
135  IN ULONG NodeId)
136 {
138 }
139 //---------------------------------------------------------------
140 // IServiceSink
141 //
142 
143 VOID
144 NTAPI
145 CPortWavePci::RequestService()
146 {
147  //DPRINT("IServiceSink_fnRequestService entered\n");
148  if (m_Miniport)
149  {
150  m_Miniport->Service();
151  }
152 }
153 
154 //---------------------------------------------------------------
155 // IPortWavePci
156 //
157 
158 NTSTATUS
159 NTAPI
161  IN REFIID refiid,
162  OUT PVOID* Output)
163 {
165 
166  DPRINT("IPortWavePci_fnQueryInterface entered\n");
167 
168  if (IsEqualGUIDAligned(refiid, IID_IPortWavePci) ||
169  IsEqualGUIDAligned(refiid, IID_IUnknown) ||
170  IsEqualGUIDAligned(refiid, IID_IPort))
171  {
172  *Output = PVOID(PPORTWAVEPCI(this));
173  PUNKNOWN(*Output)->AddRef();
174  return STATUS_SUCCESS;
175  }
176  else if (IsEqualGUIDAligned(refiid, IID_IServiceSink))
177  {
178  *Output = PVOID(PSERVICESINK(this));
179  PUNKNOWN(*Output)->AddRef();
180  return STATUS_SUCCESS;
181  }
182  else if (IsEqualGUIDAligned(refiid, IID_IPortEvents))
183  {
184  *Output = PVOID(PPORTEVENTS(this));
185  PUNKNOWN(*Output)->AddRef();
186  return STATUS_SUCCESS;
187  }
188  else if (IsEqualGUIDAligned(refiid, IID_ISubdevice))
189  {
190  *Output = PVOID(PSUBDEVICE(this));
191  PUNKNOWN(*Output)->AddRef();
192  return STATUS_SUCCESS;
193  }
194  else if (IsEqualGUIDAligned(refiid, IID_IDrmPort) ||
195  IsEqualGUIDAligned(refiid, IID_IDrmPort2))
196  {
197  return NewIDrmPort((PDRMPORT2*)Output);
198  }
199  else if (IsEqualGUIDAligned(refiid, IID_IPortClsVersion))
200  {
202  }
203  else if (IsEqualGUIDAligned(refiid, IID_IUnregisterSubdevice))
204  {
206  }
207  else if (IsEqualGUIDAligned(refiid, IID_IUnregisterPhysicalConnection))
208  {
210  }
211 
213  {
214  DPRINT("IPortWavePci_fnQueryInterface no interface!!! iface %S\n", GuidString.Buffer);
216  }
217 
218  return STATUS_UNSUCCESSFUL;
219 }
220 
221 NTSTATUS
222 NTAPI
225  IN PIRP Irp,
226  IN PUNKNOWN UnknownMiniport,
227  IN PUNKNOWN UnknownAdapter OPTIONAL,
229 {
230  IMiniportWavePci * Miniport;
231  PSERVICEGROUP ServiceGroup = 0;
234  PPOWERNOTIFY PowerNotify;
235 
236  DPRINT("IPortWavePci_fnInit entered with This %p, DeviceObject %p Irp %p UnknownMiniport %p, UnknownAdapter %p ResourceList %p\n",
237  this, DeviceObject, Irp, UnknownMiniport, UnknownAdapter, ResourceList);
239 
240  Status = UnknownMiniport->QueryInterface(IID_IMiniportWavePci, (PVOID*)&Miniport);
241  if (!NT_SUCCESS(Status))
242  {
243  DPRINT("IPortWavePci_fnInit called with invalid IMiniport adapter\n");
245  }
246 
247  // Initialize port object
248  m_Miniport = Miniport;
250 
253 
254  // increment reference on miniport adapter
255  Miniport->AddRef();
256 
257  Status = Miniport->Init(UnknownAdapter, ResourceList, this, &ServiceGroup);
258  if (!NT_SUCCESS(Status))
259  {
260  DPRINT("IPortWavePci_fnInit failed with %x\n", Status);
261 
262  // release reference on miniport adapter
263  Miniport->Release();
264  return Status;
265  }
266 
267  // check if the miniport adapter provides a valid device descriptor
268  Status = Miniport->GetDescription(&m_pDescriptor);
269  if (!NT_SUCCESS(Status))
270  {
271  DPRINT("failed to get description\n");
272  Miniport->Release();
273  return Status;
274  }
275 
276  // create the subdevice descriptor
278  3,
280  0,
281  NULL,
282  2,
284  0,
285  0,
286  0,
287  NULL,
288  0,
289  NULL,
290  m_pDescriptor);
291 
292 
293  if (!NT_SUCCESS(Status))
294  {
295  DPRINT("PcCreateSubdeviceDescriptor failed with %x\n", Status);
296  Miniport->Release();
297  return Status;
298  }
299 
300  // did we get a service group
301  if (ServiceGroup)
302  {
303  // store service group in context
304  m_ServiceGroup = ServiceGroup;
305 
306  // add ourselves to service group which is called when miniport receives an isr
307  m_ServiceGroup->AddMember(PSERVICESINK(this));
308 
309  // increment reference on service group
310  m_ServiceGroup->AddRef();
311  }
312 
313  // store for node property requests
314  m_SubDeviceDescriptor->UnknownMiniport = UnknownMiniport;
315 
316  // check if it supports IPinCount interface
317  Status = UnknownMiniport->QueryInterface(IID_IPinCount, (PVOID*)&PinCount);
318  if (NT_SUCCESS(Status))
319  {
320  // store IPinCount interface
322  }
323 
324  // does the Miniport adapter support IPowerNotify interface*/
325  Status = UnknownMiniport->QueryInterface(IID_IPowerNotify, (PVOID*)&PowerNotify);
326  if (NT_SUCCESS(Status))
327  {
328  // store reference
329  m_pPowerNotify = PowerNotify;
330  }
331 
332  DPRINT("IPortWavePci_Init successfully initialized\n");
333  return STATUS_SUCCESS;
334 }
335 
336 NTSTATUS
337 NTAPI
338 CPortWavePci::NewRegistryKey(
339  OUT PREGISTRYKEY *OutRegistryKey,
340  IN PUNKNOWN OuterUnknown OPTIONAL,
341  IN ULONG RegistryKeyType,
346 {
347  DPRINT("IPortWavePci_fnNewRegistryKey entered\n");
349 
350  return PcNewRegistryKey(OutRegistryKey,
351  OuterUnknown,
352  RegistryKeyType,
355  (ISubdevice*)this,
358  Disposition);
359 }
360 
361 NTSTATUS
362 NTAPI
363 CPortWavePci::GetDeviceProperty(
364  IN DEVICE_REGISTRY_PROPERTY DeviceRegistryProperty,
366  OUT PVOID PropertyBuffer,
368 {
369  DPRINT("IPortWavePci_fnGetDeviceProperty entered\n");
371 
372  return IoGetDeviceProperty(m_pDeviceObject, DeviceRegistryProperty, BufferLength, PropertyBuffer, ReturnLength);
373 }
374 
375 NTSTATUS
376 NTAPI
377 CPortWavePci::NewMasterDmaChannel(
378  OUT PDMACHANNEL *DmaChannel,
379  IN PUNKNOWN OuterUnknown OPTIONAL,
383  IN BOOLEAN Dma32BitAddresses,
385  IN BOOLEAN IgnoreCount,
386  IN DMA_WIDTH DmaWidth,
387  IN DMA_SPEED DmaSpeed,
389  IN ULONG DmaPort)
390 {
393 
394  DPRINT("IPortWavePci_fnNewMasterDmaChannel This %p entered\n", this);
396 
397  Status = PcDmaMasterDescription(ResourceList, ScatterGather, Dma32BitAddresses, IgnoreCount, Dma64BitAddresses, DmaWidth, DmaSpeed, MaximumLength, DmaPort, &DeviceDescription);
398  if (NT_SUCCESS(Status))
399  {
400  return PcNewDmaChannel(DmaChannel, OuterUnknown, PoolType, &DeviceDescription, m_pDeviceObject);
401  }
402 
403  return Status;
404 }
405 
406 VOID
407 NTAPI
409  IN PSERVICEGROUP ServiceGroup)
410 {
411  //DPRINT("IPortWavePci_fnNotify entered %p, ServiceGroup %p\n", This, ServiceGroup);
412 
413  if (ServiceGroup)
414  {
415  ServiceGroup->RequestService ();
416  }
417 }
418 
419 //---------------------------------------------------------------
420 // ISubdevice interface
421 //
422 
423 NTSTATUS
424 NTAPI
425 CPortWavePci::NewIrpTarget(
426  OUT struct IIrpTarget **OutTarget,
427  IN PCWSTR Name,
431  IN PIRP Irp,
432  IN KSOBJECT_CREATE *CreateObject)
433 {
435  IPortFilterWavePci * Filter;
436 
437  DPRINT("ISubDevice_NewIrpTarget this %p\n", this);
438 
439  if (m_Filter)
440  {
441  *OutTarget = (IIrpTarget*)m_Filter;
442  return STATUS_SUCCESS;
443  }
444 
446  if (!NT_SUCCESS(Status))
447  {
448  return Status;
449  }
450 
451  Status = Filter->Init((IPortWavePci*)this);
452  if (!NT_SUCCESS(Status))
453  {
454  Filter->Release();
455  return Status;
456  }
457 
458  *OutTarget = (IIrpTarget*)Filter;
459  m_Filter = Filter;
460  return Status;
461 }
462 
463 NTSTATUS
464 NTAPI
465 CPortWavePci::ReleaseChildren()
466 {
468  return STATUS_UNSUCCESSFUL;
469 }
470 
471 NTSTATUS
472 NTAPI
473 CPortWavePci::GetDescriptor(
475 {
476  DPRINT("ISubDevice_GetDescriptor this %p\n", this);
478  return STATUS_SUCCESS;
479 }
480 
481 NTSTATUS
482 NTAPI
483 CPortWavePci::DataRangeIntersection(
484  IN ULONG PinId,
485  IN PKSDATARANGE DataRange,
486  IN PKSDATARANGE MatchingDataRange,
488  OUT PVOID ResultantFormat OPTIONAL,
489  OUT PULONG ResultantFormatLength)
490 {
491  DPRINT("ISubDevice_DataRangeIntersection this %p\n", this);
492 
493  if (m_Miniport)
494  {
495  return m_Miniport->DataRangeIntersection (PinId, DataRange, MatchingDataRange, OutputBufferLength, ResultantFormat, ResultantFormatLength);
496  }
497 
498  return STATUS_UNSUCCESSFUL;
499 }
500 
501 NTSTATUS
502 NTAPI
503 CPortWavePci::PowerChangeNotify(
505 {
506  if (m_pPowerNotify)
507  {
508  m_pPowerNotify->PowerChangeNotify(PowerState);
509  }
510 
511  return STATUS_SUCCESS;
512 }
513 
514 NTSTATUS
515 NTAPI
517  IN ULONG PinId,
518  IN OUT PULONG FilterNecessary,
519  IN OUT PULONG FilterCurrent,
520  IN OUT PULONG FilterPossible,
521  IN OUT PULONG GlobalCurrent,
522  IN OUT PULONG GlobalPossible)
523 {
524  if (m_pPinCount)
525  {
526  m_pPinCount->PinCount(PinId, FilterNecessary, FilterCurrent, FilterPossible, GlobalCurrent, GlobalPossible);
527  return STATUS_SUCCESS;
528  }
529 
530  // FIXME
531  // scan filter descriptor
532 
533  return STATUS_UNSUCCESSFUL;
534 }
535 
536 
537 NTSTATUS
539  OUT PPORT* OutPort)
540 {
541  CPortWavePci * Port;
543 
545  if (!Port)
547 
548  Status = Port->QueryInterface(IID_IPort, (PVOID*)OutPort);
549 
550  if (!NT_SUCCESS(Status))
551  {
552  delete Port;
553  }
554 
555  DPRINT("NewPortWavePci %p Status %u\n", Port, Status);
556  return Status;
557 
558 }
559 
560 
563  IPortWavePci* iface)
564 {
565  CPortWavePci * This = (CPortWavePci*)iface;
566  return This->m_pDeviceObject;
567 }
568 
571  PPORTWAVEPCI iface)
572 {
573  CPortWavePci * This = (CPortWavePci*)iface;
574  return This->m_Miniport;
575 }
IServiceGroup * PSERVICEGROUP
Definition: portcls.h:614
DEVICE_REGISTRY_PROPERTY
Definition: iotypes.h:1153
BOOL WINAPI SHIM_OBJ_NAME() Notify(DWORD fdwReason, PVOID ptr)
IPortEvents * PPORTEVENTS
Definition: portcls.h:2065
IN PUNICODE_STRING IN POBJECT_ATTRIBUTES ObjectAttributes
Definition: conport.c:35
IN CINT OUT PVOID IN ULONG OUT PULONG ReturnLength
Definition: dumpinfo.c:39
static PWSTR GuidString
Definition: apphelp.c:91
NTSTATUS NTAPI PinPropertyHandler(IN PIRP Irp, IN PKSIDENTIFIER Request, IN OUT PVOID Data)
CPPORT Port[4]
Definition: headless.c:34
const uint16_t * PCWSTR
Definition: typedefs.h:55
#define IN
Definition: typedefs.h:38
IDmaChannel * PDMACHANNEL
Definition: portcls.h:772
#define REFIID
Definition: guiddef.h:113
_In_ UCHAR _In_ POWER_STATE PowerState
Definition: pofuncs.h:42
#define STATUS_INSUFFICIENT_RESOURCES
Definition: udferr_usr.h:158
_In_ BOOLEAN Release
Definition: classpnp.h:929
IPinCount * PPINCOUNT
Definition: portcls.h:2036
_In_ PIRP Irp
Definition: csq.h:116
#define STATUS_INVALID_PARAMETER
Definition: udferr_usr.h:135
IUnknown * PUNKNOWN
Definition: com_apitest.h:45
#define TAG_PORTCLASS
Definition: private.hpp:24
STDMETHODIMP QueryInterface(REFIID InterfaceId, PVOID *Interface)
LONG NTSTATUS
Definition: precomp.h:26
_Must_inspect_result_ _In_ PFILE_OBJECT _In_ ULONG _In_ ULONG _In_ ULONG OutputBufferLength
Definition: fltkernel.h:1374
enum _DMA_WIDTH DMA_WIDTH
IServiceSink * PSERVICESINK
Definition: portcls.h:569
KSPROPERTY_SET WavePciPropertySet[]
IUnregisterSubdevice * PUNREGISTERSUBDEVICE
Definition: portcls.h:633
BOOL Init(PUSERCONNECT UserCon)
Definition: dllmain.c:367
NTSTATUS NewPortWavePci(OUT PPORT *OutPort)
#define InsertTailList(ListHead, Entry)
_In_ const GUID _In_ ULONG PinCount
Definition: strmini.h:504
DEFINE_KSPROPERTY_TOPOLOGYSET(PortFilterWavePciTopologySet, TopologyPropertyHandler)
const MUI_LANGUAGE_RESOURCE ResourceList[]
Definition: muilanguages.h:414
_In_ ACCESS_MASK _In_ POBJECT_ATTRIBUTES _Reserved_ ULONG _In_opt_ PUNICODE_STRING _In_ ULONG _Out_opt_ PULONG Disposition
Definition: cmfuncs.h:50
PDEVICE_OBJECT m_pDeviceObject
static BOOL Set
Definition: pageheap.c:10
#define IsEqualGUIDAligned(guid1, guid2)
Definition: wdm.template.h:233
UCHAR KIRQL
Definition: env_spec_w32.h:591
PSUBDEVICE_DESCRIPTOR m_SubDeviceDescriptor
PMINIPORTWAVEPCI GetWavePciMiniport(PPORTWAVEPCI iface)
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
Definition: IoEaTest.cpp:117
unsigned int BOOL
Definition: ntddk_ex.h:94
long LONG
Definition: pedump.c:60
_In_ ULONG BufferLength
Definition: usbdlib.h:225
_Must_inspect_result_ _In_opt_ PFLT_FILTER Filter
Definition: fltkernel.h:1802
#define STDMETHODIMP
Definition: basetyps.h:43
FORCEINLINE VOID KeInitializeSpinLock(_Out_ PKSPIN_LOCK SpinLock)
Definition: kefuncs.h:251
_In_ BOOLEAN Dma64BitAddresses
Definition: ndis.h:4652
IPort * PPORT
Definition: portcls.h:1093
DEFINE_KSPROPERTY_PINPROPOSEDATAFORMAT(PortFilterWavePciPinSet, PinPropertyHandler, PinPropertyHandler, PinPropertyHandler)
unsigned char BOOLEAN
NTSTATUS NTAPI PcCreateSubdeviceDescriptor(OUT SUBDEVICE_DESCRIPTOR **OutSubdeviceDescriptor, IN ULONG InterfaceCount, IN GUID *InterfaceGuids, IN ULONG IdentifierCount, IN KSIDENTIFIER *Identifier, IN ULONG FilterPropertiesCount, IN KSPROPERTY_SET *FilterProperties, IN ULONG Unknown1, IN ULONG Unknown2, IN ULONG PinPropertiesCount, IN KSPROPERTY_SET *PinProperties, IN ULONG EventSetCount, IN KSEVENT_SET *EventSet, IN PPCFILTER_DESCRIPTOR FilterDescription)
Definition: undoc.cpp:730
smooth NULL
Definition: ftsmooth.c:416
NTSTATUS NTAPI IoGetDeviceProperty(IN PDEVICE_OBJECT DeviceObject, IN DEVICE_REGISTRY_PROPERTY DeviceProperty, IN ULONG BufferLength, OUT PVOID PropertyBuffer, OUT PULONG ResultLength)
Definition: pnpmgr.c:4210
void DPRINT(...)
Definition: polytest.cpp:61
IMiniportWavePci * PMINIPORTWAVEPCI
Definition: portcls.h:1660
void * PVOID
Definition: retypes.h:9
LIST_ENTRY m_EventList
IUnregisterPhysicalConnection * PUNREGISTERPHYSICALCONNECTION
Definition: portcls.h:675
#define KSPROPSETID_Topology
Definition: ks.h:872
_Must_inspect_result_ _In_ PDEVICE_DESCRIPTION DeviceDescription
Definition: iofuncs.h:1015
IN PVOID IN PVOID IN USHORT IN USHORT IN PINTERFACE Interface
Definition: pci.h:359
STDMETHODIMP_(ULONG) AddRef()
IRegistryKey * PREGISTRYKEY
Definition: portcls.h:999
IDrmPort2 * PDRMPORT2
Definition: portcls.h:2172
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
INT POOL_TYPE
Definition: typedefs.h:76
const GUID IID_IUnknown
#define KeAcquireSpinLock(sl, irql)
Definition: env_spec_w32.h:609
nsrefcnt Release()
static GUID InterfaceGuids[3]
NTSYSAPI VOID NTAPI RtlFreeUnicodeString(PUNICODE_STRING UnicodeString)
_Must_inspect_result_ _In_opt_ PFLT_INSTANCE _Out_ PHANDLE _In_ ACCESS_MASK _In_ POBJECT_ATTRIBUTES _Out_ PIO_STATUS_BLOCK _In_opt_ PLARGE_INTEGER _In_ ULONG _In_ ULONG _In_ ULONG _In_ ULONG CreateOptions
Definition: fltkernel.h:1230
NTSTATUS NTAPI TopologyPropertyHandler(IN PIRP Irp, IN PKSIDENTIFIER Request, IN OUT PVOID Data)
friend PMINIPORTWAVEPCI GetWavePciMiniport(PPORTWAVEPCI iface)
#define PC_ASSERT_IRQL_EQUAL(x)
Definition: private.hpp:31
ULONG AddRef()
#define STATUS_UNSUCCESSFUL
Definition: udferr_usr.h:132
friend PDEVICE_OBJECT GetDeviceObjectFromPortWavePci(IPortWavePci *iface)
static const WCHAR L[]
Definition: oid.c:1250
NTSTATUS NTAPI PcNewRegistryKey(OUT PREGISTRYKEY *OutRegistryKey, IN PUNKNOWN OuterUnknown OPTIONAL, IN ULONG RegistryKeyType, IN ACCESS_MASK DesiredAccess, IN PVOID DeviceObject OPTIONAL, IN PVOID SubDevice OPTIONAL, IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, IN ULONG CreateOptions OPTIONAL, OUT PULONG Disposition OPTIONAL)
Definition: registry.cpp:281
#define InterlockedDecrement
Definition: armddk.h:52
_Requires_lock_held_ Interrupt _Releases_lock_ Interrupt _In_ _IRQL_restores_ KIRQL OldIrql
Definition: kefuncs.h:803
Definition: arc.h:85
NTSTATUS NTAPI NewIUnregisterSubdevice(OUT PUNREGISTERSUBDEVICE *OutDevice)
Definition: unregister.cpp:143
Definition: typedefs.h:117
NTSYSAPI NTSTATUS WINAPI RtlStringFromGUID(REFGUID, PUNICODE_STRING)
NTSTATUS NewPortFilterWavePci(OUT IPortFilterWavePci **OutFilter)
#define PASSIVE_LEVEL
Definition: env_spec_w32.h:693
STDMETHODIMP_(ULONG) Release()
Status
Definition: gdiplustypes.h:24
enum _DMA_SPEED DMA_SPEED
IResourceList * PRESOURCELIST
Definition: portcls.h:442
UnicodeString MaximumLength
Definition: rtlfuncs.h:2982
IN PDEVICE_OBJECT DeviceObject
Definition: fatprocs.h:1560
ISubdevice * PSUBDEVICE
Definition: interfaces.hpp:305
NTSTATUS NTAPI PcNewDmaChannel(OUT PDMACHANNEL *OutDmaChannel, IN PUNKNOWN OuterUnknown OPTIONAL, IN POOL_TYPE PoolType, IN PDEVICE_DESCRIPTION DeviceDescription, IN PDEVICE_OBJECT DeviceObject)
Definition: dma_slave.cpp:478
PSERVICEGROUP m_ServiceGroup
#define InterlockedIncrement
Definition: armddk.h:53
NTSTATUS NewPortClsVersion(OUT PPORTCLSVERSION *OutVersion)
Definition: version.cpp:93
PPCFILTER_DESCRIPTOR m_pDescriptor
NTSTATUS NTAPI PcDmaMasterDescription(IN PRESOURCELIST ResourceList OPTIONAL, IN BOOLEAN ScatterGather, IN BOOLEAN Dma32BitAddresses, IN BOOLEAN IgnoreCount, IN BOOLEAN Dma64BitAddresses, IN DMA_WIDTH DmaWidth, IN DMA_SPEED DmaSpeed, IN ULONG MaximumLength, IN ULONG DmaPort, OUT PDEVICE_DESCRIPTION DeviceDescription)
Definition: api.cpp:213
#define InitializeListHead(ListHead)
Definition: env_spec_w32.h:944
PPINCOUNT m_pPinCount
IPortWavePci * PPORTWAVEPCI
Definition: portcls.h:1236
_In_ PIO_STACK_LOCATION _Inout_ PFILE_OBJECT _Inout_ PVCB _Outptr_result_maybenull_ PDCB _In_ PDCB _In_ PDIRENT _In_ ULONG _In_ ULONG _In_ PUNICODE_STRING _In_ PACCESS_MASK DesiredAccess
Definition: create.c:4157
ULONG KSPIN_LOCK
Definition: env_spec_w32.h:72
PPOWERNOTIFY m_pPowerNotify
#define KSPROPSETID_Pin
Definition: ks.h:647
unsigned int * PULONG
Definition: retypes.h:1
_In_ struct _IRP _In_ struct _SCATTER_GATHER_LIST * ScatterGather
Definition: iotypes.h:2258
#define KeReleaseSpinLock(sl, irql)
Definition: env_spec_w32.h:627
static ULONG WINAPI AddRef(IStream *iface)
Definition: clist.c:90
virtual ~CPortWavePci()
HRESULT QueryInterface([in] REFIID riid, [out, iid_is(riid)] void **ppvObject)
IPowerNotify * PPOWERNOTIFY
Definition: portcls.h:2003
PMINIPORTWAVEPCI m_Miniport
#define OUT
Definition: typedefs.h:39
unsigned int ULONG
Definition: retypes.h:1
#define UNIMPLEMENTED
Definition: debug.h:114
NTSTATUS NTAPI NewIUnregisterPhysicalConnection(OUT PUNREGISTERPHYSICALCONNECTION *OutConnection)
Definition: connection.cpp:148
struct _KSEVENT_ENTRY * PKSEVENT_ENTRY
Definition: ks.h:2131
NTSTATUS NewIDrmPort(OUT PDRMPORT2 *OutPort)
Definition: drm_port.cpp:145
PDEVICE_OBJECT GetDeviceObjectFromPortWavePci(IPortWavePci *iface)
return STATUS_SUCCESS
Definition: btrfs.c:2777
_Must_inspect_result_ _In_ FLT_CONTEXT_TYPE _In_ SIZE_T _In_ POOL_TYPE PoolType
Definition: fltkernel.h:1444
KSPIN_LOCK m_EventListLock
nsrefcnt AddRef()
ULONG ACCESS_MASK
Definition: nt_native.h:40
CPortWavePci(IUnknown *OuterUnknown)
IPortFilterWavePci * m_Filter
_In_ PSTORAGE_PROPERTY_ID _Outptr_ PSTORAGE_DESCRIPTOR_HEADER * Descriptor
Definition: classpnp.h:966
PULONG MinorVersion OPTIONAL
Definition: CrossNt.h:68
IPortClsVersion * PPORTCLSVERSION
Definition: portcls.h:2209