8e3f70522c511565e80e3474d48858814fe24b52
[reactos.git] / reactos / drivers / wdm / audio / backpln / portcls / interfaces.hpp
1 #ifndef INTERFACES_H__
2 #define INTERFACES_H__
3
4 DEFINE_GUID(IID_IIrpTarget, 0xB4C90A60, 0x5791, 0x11D0, 0xF9, 0x86, 0x00, 0xA0, 0xC9, 0x11, 0xB5, 0x44);
5 DEFINE_GUID(IID_ISubdevice, 0xB4C90A61, 0x5791, 0x11D0, 0xF9, 0x86, 0x00, 0xA0, 0xC9, 0x11, 0xB5, 0x44);
6 DEFINE_GUID(IID_IIrpTargetFactory, 0xB4C90A62, 0x5791, 0x11D0, 0xF9, 0x86, 0x00, 0xA0, 0xC9, 0x11, 0xB5, 0x44);
7
8
9 /*****************************************************************************
10 * IIrpTarget
11 *****************************************************************************
12 */
13
14 #define IMP_IIrpTarget \
15 STDMETHODIMP_(NTSTATUS) NewIrpTarget(THIS_ \
16 OUT struct IIrpTarget **OutTarget, \
17 IN PCWSTR Name, \
18 IN PUNKNOWN Unknown, \
19 IN POOL_TYPE PoolType, \
20 IN PDEVICE_OBJECT DeviceObject, \
21 IN PIRP Irp, \
22 IN KSOBJECT_CREATE *CreateObject); \
23 \
24 STDMETHODIMP_(NTSTATUS) DeviceIoControl(THIS_ \
25 IN PDEVICE_OBJECT DeviceObject, \
26 IN PIRP Irp); \
27 \
28 STDMETHODIMP_(NTSTATUS) Read(THIS_ \
29 IN PDEVICE_OBJECT DeviceObject, \
30 IN PIRP Irp); \
31 \
32 STDMETHODIMP_(NTSTATUS) Write(THIS_ \
33 IN PDEVICE_OBJECT DeviceObject, \
34 IN PIRP Irp); \
35 \
36 STDMETHODIMP_(NTSTATUS) Flush(THIS_ \
37 IN PDEVICE_OBJECT DeviceObject, \
38 IN PIRP Irp); \
39 \
40 STDMETHODIMP_(NTSTATUS) Close(THIS_ \
41 IN PDEVICE_OBJECT DeviceObject, \
42 IN PIRP Irp); \
43 \
44 STDMETHODIMP_(NTSTATUS) QuerySecurity(THIS_ \
45 IN PDEVICE_OBJECT DeviceObject, \
46 IN PIRP Irp); \
47 \
48 STDMETHODIMP_(NTSTATUS) SetSecurity(THIS_ \
49 IN PDEVICE_OBJECT DeviceObject, \
50 IN PIRP Irp); \
51 \
52 STDMETHODIMP_(BOOLEAN) FastDeviceIoControl(THIS_ \
53 IN PFILE_OBJECT FileObject, \
54 IN BOOLEAN Wait, \
55 IN PVOID InputBuffer, \
56 IN ULONG InputBufferLength, \
57 OUT PVOID OutputBuffer, \
58 IN ULONG OutputBufferLength, \
59 IN ULONG IoControlCode, \
60 OUT PIO_STATUS_BLOCK StatusBlock, \
61 IN PDEVICE_OBJECT DeviceObject); \
62 \
63 STDMETHODIMP_(BOOLEAN) FastRead(THIS_ \
64 IN PFILE_OBJECT FileObject, \
65 IN PLARGE_INTEGER FileOffset, \
66 IN ULONG Length, \
67 IN BOOLEAN Wait, \
68 IN ULONG LockKey, \
69 IN PVOID Buffer, \
70 OUT PIO_STATUS_BLOCK StatusBlock, \
71 IN PDEVICE_OBJECT DeviceObject); \
72 \
73 STDMETHODIMP_(BOOLEAN) FastWrite(THIS_ \
74 IN PFILE_OBJECT FileObject, \
75 IN PLARGE_INTEGER FileOffset, \
76 IN ULONG Length, \
77 IN BOOLEAN Wait, \
78 IN ULONG LockKey, \
79 IN PVOID Buffer, \
80 OUT PIO_STATUS_BLOCK StatusBlock, \
81 IN PDEVICE_OBJECT DeviceObject)
82
83 #define DEFINE_ABSTRACT_IRPTARGET() \
84 STDMETHOD_(NTSTATUS, NewIrpTarget)(THIS_ \
85 OUT struct IIrpTarget **OutTarget, \
86 IN PCWSTR Name, \
87 IN PUNKNOWN Unknown, \
88 IN POOL_TYPE PoolType, \
89 IN PDEVICE_OBJECT DeviceObject, \
90 IN PIRP Irp, \
91 IN KSOBJECT_CREATE *CreateObject) PURE; \
92 \
93 STDMETHOD_(NTSTATUS, DeviceIoControl)(THIS_ \
94 IN PDEVICE_OBJECT DeviceObject, \
95 IN PIRP Irp)PURE; \
96 \
97 STDMETHOD_(NTSTATUS, Read)(THIS_ \
98 IN PDEVICE_OBJECT DeviceObject, \
99 IN PIRP Irp)PURE; \
100 \
101 STDMETHOD_(NTSTATUS, Write)(THIS_ \
102 IN PDEVICE_OBJECT DeviceObject, \
103 IN PIRP Irp)PURE; \
104 \
105 STDMETHOD_(NTSTATUS, Flush)(THIS_ \
106 IN PDEVICE_OBJECT DeviceObject, \
107 IN PIRP Irp)PURE; \
108 \
109 virtual NTSTATUS Close( \
110 IN PDEVICE_OBJECT DeviceObject, \
111 IN PIRP Irp)PURE; \
112 \
113 STDMETHOD_(NTSTATUS, QuerySecurity)(THIS_ \
114 IN PDEVICE_OBJECT DeviceObject, \
115 IN PIRP Irp)PURE; \
116 \
117 STDMETHOD_(NTSTATUS, SetSecurity)(THIS_ \
118 IN PDEVICE_OBJECT DeviceObject, \
119 IN PIRP Irp)PURE; \
120 \
121 STDMETHOD_(BOOLEAN, FastDeviceIoControl)(THIS_ \
122 IN PFILE_OBJECT FileObject, \
123 IN BOOLEAN Wait, \
124 IN PVOID InputBuffer, \
125 IN ULONG InputBufferLength, \
126 OUT PVOID OutputBuffer, \
127 IN ULONG OutputBufferLength, \
128 IN ULONG IoControlCode, \
129 OUT PIO_STATUS_BLOCK StatusBlock, \
130 IN PDEVICE_OBJECT DeviceObject)PURE; \
131 \
132 STDMETHOD_(BOOLEAN, FastRead)(THIS_ \
133 IN PFILE_OBJECT FileObject, \
134 IN PLARGE_INTEGER FileOffset, \
135 IN ULONG Length, \
136 IN BOOLEAN Wait, \
137 IN ULONG LockKey, \
138 IN PVOID Buffer, \
139 OUT PIO_STATUS_BLOCK StatusBlock, \
140 IN PDEVICE_OBJECT DeviceObject)PURE; \
141 \
142 STDMETHOD_(BOOLEAN, FastWrite)(THIS_ \
143 IN PFILE_OBJECT FileObject, \
144 IN PLARGE_INTEGER FileOffset, \
145 IN ULONG Length, \
146 IN BOOLEAN Wait, \
147 IN ULONG LockKey, \
148 IN PVOID Buffer, \
149 OUT PIO_STATUS_BLOCK StatusBlock, \
150 IN PDEVICE_OBJECT DeviceObject)PURE;
151
152
153
154 #undef INTERFACE
155 #define INTERFACE IIrpTarget
156
157 DECLARE_INTERFACE_(IIrpTarget, IUnknown)
158 {
159 DEFINE_ABSTRACT_UNKNOWN()
160
161 DEFINE_ABSTRACT_IRPTARGET()
162 };
163
164 typedef IIrpTarget *PIRPTARGET;
165
166 /*****************************************************************************
167 * ISubdevice
168 *****************************************************************************
169 */
170
171 struct IIrpTargetFactory;
172
173 typedef struct
174 {
175 LIST_ENTRY Entry;
176 UNICODE_STRING SymbolicLink;
177 }SYMBOLICLINK_ENTRY, *PSYMBOLICLINK_ENTRY;
178
179 typedef struct
180 {
181 LIST_ENTRY Entry;
182 ULONG FromPin;
183 KSPIN_PHYSICALCONNECTION Connection;
184 }PHYSICAL_CONNECTION_ENTRY, *PPHYSICAL_CONNECTION_ENTRY;
185
186 typedef struct
187 {
188 ULONG MaxGlobalInstanceCount;
189 ULONG MaxFilterInstanceCount;
190 ULONG MinFilterInstanceCount;
191 ULONG CurrentPinInstanceCount;
192
193 }PIN_INSTANCE_INFO, *PPIN_INSTANCE_INFO;
194
195
196 typedef struct
197 {
198 ULONG PinDescriptorCount;
199 ULONG PinDescriptorSize;
200 KSPIN_DESCRIPTOR * KsPinDescriptor;
201 PIN_INSTANCE_INFO * Instances;
202 }KSPIN_FACTORY;
203
204 typedef struct
205 {
206 ULONG InterfaceCount;
207 GUID *Interfaces;
208 KSPIN_FACTORY Factory;
209 ULONG FilterPropertySetCount;
210 PKSPROPERTY_SET FilterPropertySet;
211
212 ULONG EventSetCount;
213 PKSEVENT_SET EventSet;
214 PLIST_ENTRY EventList;
215 PKSPIN_LOCK EventListLock;
216
217 PPCFILTER_DESCRIPTOR DeviceDescriptor;
218 KSTOPOLOGY* Topology;
219 LIST_ENTRY SymbolicLinkList;
220 LIST_ENTRY PhysicalConnectionList;
221 UNICODE_STRING RefString;
222 PUNKNOWN UnknownMiniport;
223 PUNKNOWN UnknownStream;
224 PVOID PortPin;
225 }SUBDEVICE_DESCRIPTOR, *PSUBDEVICE_DESCRIPTOR;
226
227 #undef INTERFACE
228 #define INTERFACE ISubdevice
229
230 #define DEFINE_ABSTRACT_ISUBDEVICE() \
231 STDMETHOD_(NTSTATUS, NewIrpTarget)(THIS_ \
232 OUT IIrpTarget **OutTarget, \
233 IN PCWSTR Name, \
234 IN PUNKNOWN Unknown, \
235 IN POOL_TYPE PoolType, \
236 IN PDEVICE_OBJECT DeviceObject, \
237 IN PIRP Irp, \
238 IN KSOBJECT_CREATE *CreateObject) PURE; \
239 \
240 STDMETHOD_(NTSTATUS, ReleaseChildren)(THIS) PURE; \
241 \
242 STDMETHOD_(NTSTATUS, GetDescriptor)(THIS_ \
243 IN SUBDEVICE_DESCRIPTOR **) PURE; \
244 \
245 STDMETHOD_(NTSTATUS, DataRangeIntersection)(THIS_ \
246 IN ULONG PinId, \
247 IN PKSDATARANGE DataRange, \
248 IN PKSDATARANGE MatchingDataRange, \
249 IN ULONG OutputBufferLength, \
250 OUT PVOID ResultantFormat OPTIONAL, \
251 OUT PULONG ResultantFormatLength) PURE; \
252 \
253 STDMETHOD_(NTSTATUS, PowerChangeNotify)(THIS_ \
254 IN POWER_STATE PowerState) PURE; \
255 \
256 STDMETHOD_(NTSTATUS, PinCount)(THIS_ \
257 IN ULONG PinId, \
258 IN OUT PULONG FilterNecessary, \
259 IN OUT PULONG FilterCurrent, \
260 IN OUT PULONG FilterPossible, \
261 IN OUT PULONG GlobalCurrent, \
262 IN OUT PULONG GlobalPossible)PURE;
263
264
265
266 #define IMP_ISubdevice \
267 STDMETHODIMP_(NTSTATUS) NewIrpTarget( \
268 OUT IIrpTarget **OutTarget, \
269 IN PCWSTR Name, \
270 IN PUNKNOWN Unknown, \
271 IN POOL_TYPE PoolType, \
272 IN PDEVICE_OBJECT DeviceObject, \
273 IN PIRP Irp, \
274 IN KSOBJECT_CREATE *CreateObject); \
275 \
276 STDMETHODIMP_(NTSTATUS) ReleaseChildren(THIS); \
277 \
278 STDMETHODIMP_(NTSTATUS) GetDescriptor(THIS_ \
279 IN SUBDEVICE_DESCRIPTOR **); \
280 \
281 STDMETHODIMP_(NTSTATUS) DataRangeIntersection( \
282 IN ULONG PinId, \
283 IN PKSDATARANGE DataRange, \
284 IN PKSDATARANGE MatchingDataRange, \
285 IN ULONG OutputBufferLength, \
286 OUT PVOID ResultantFormat OPTIONAL, \
287 OUT PULONG ResultantFormatLength); \
288 \
289 STDMETHODIMP_(NTSTATUS) PowerChangeNotify( \
290 IN POWER_STATE PowerState); \
291 \
292 STDMETHODIMP_(NTSTATUS) PinCount( \
293 IN ULONG PinId, \
294 IN OUT PULONG FilterNecessary, \
295 IN OUT PULONG FilterCurrent, \
296 IN OUT PULONG FilterPossible, \
297 IN OUT PULONG GlobalCurrent, \
298 IN OUT PULONG GlobalPossible)
299
300
301 DECLARE_INTERFACE_(ISubdevice, IUnknown)
302 {
303 DEFINE_ABSTRACT_UNKNOWN()
304 DEFINE_ABSTRACT_ISUBDEVICE()
305 };
306
307 typedef ISubdevice *PSUBDEVICE;
308
309 /*****************************************************************************
310 * IIrpQueue
311 *****************************************************************************
312 */
313
314 #undef INTERFACE
315 #define INTERFACE IIrpQueue
316
317 DECLARE_INTERFACE_(IIrpQueue, IUnknown)
318 {
319 DEFINE_ABSTRACT_UNKNOWN()
320
321 STDMETHOD_(NTSTATUS, Init)(THIS_
322 IN PKSPIN_CONNECT ConnectDetails,
323 IN PKSPIN_DESCRIPTOR Descriptor,
324 IN ULONG FrameSize,
325 IN ULONG Alignment,
326 IN ULONG TagSupportEnabled) PURE;
327
328 STDMETHOD_(NTSTATUS, AddMapping)(THIS_
329 IN PIRP Irp,
330 OUT PULONG Data) PURE;
331
332 STDMETHOD_(NTSTATUS, GetMapping)(THIS_
333 OUT PUCHAR * Buffer,
334 OUT PULONG BufferSize) PURE;
335
336 STDMETHOD_(VOID, UpdateMapping)(THIS_
337 IN ULONG BytesWritten) PURE;
338
339 STDMETHOD_(ULONG, NumData)(THIS) PURE;
340
341 STDMETHOD_(BOOL, CancelBuffers)(THIS) PURE;
342
343 STDMETHOD_(NTSTATUS, GetMappingWithTag)(THIS_
344 IN PVOID Tag,
345 OUT PPHYSICAL_ADDRESS PhysicalAddress,
346 OUT PVOID *VirtualAddress,
347 OUT PULONG ByteCount,
348 OUT PULONG Flags) PURE;
349
350 STDMETHOD_(NTSTATUS, ReleaseMappingWithTag)(THIS_
351 IN PVOID Tag) PURE;
352
353 STDMETHOD_(BOOLEAN, HasLastMappingFailed)(THIS) PURE;
354 STDMETHOD_(ULONG, GetCurrentIrpOffset)(THIS) PURE;
355
356 STDMETHOD_(BOOLEAN, GetAcquiredTagRange)(THIS_
357 IN PVOID * FirstTag,
358 IN PVOID * LastTag) PURE;
359
360 };
361
362
363 #define IMP_IIrpQueue \
364 STDMETHODIMP_(NTSTATUS) Init(THIS_ \
365 IN PKSPIN_CONNECT ConnectDetails, \
366 IN PKSPIN_DESCRIPTOR Descriptor, \
367 IN ULONG FrameSize, \
368 IN ULONG Alignment, \
369 IN ULONG TagSupportEnabled); \
370 \
371 STDMETHODIMP_(NTSTATUS) AddMapping(THIS_ \
372 IN PIRP Irp, \
373 OUT PULONG Data); \
374 \
375 STDMETHODIMP_(NTSTATUS) GetMapping(THIS_ \
376 OUT PUCHAR * Buffer, \
377 OUT PULONG BufferSize); \
378 \
379 STDMETHODIMP_(VOID) UpdateMapping(THIS_ \
380 IN ULONG BytesWritten); \
381 \
382 STDMETHODIMP_(ULONG) NumData(THIS); \
383 \
384 STDMETHODIMP_(BOOL) CancelBuffers(THIS); \
385 \
386 STDMETHODIMP_(NTSTATUS) GetMappingWithTag(THIS_ \
387 IN PVOID Tag, \
388 OUT PPHYSICAL_ADDRESS PhysicalAddress, \
389 OUT PVOID *VirtualAddress, \
390 OUT PULONG ByteCount, \
391 OUT PULONG Flags); \
392 \
393 STDMETHODIMP_(NTSTATUS) ReleaseMappingWithTag( \
394 IN PVOID Tag); \
395 \
396 STDMETHODIMP_(BOOLEAN) HasLastMappingFailed(THIS); \
397 STDMETHODIMP_(ULONG) GetCurrentIrpOffset(THIS); \
398 STDMETHODIMP_(BOOLEAN) GetAcquiredTagRange(THIS_ \
399 IN PVOID * FirstTag, \
400 IN PVOID * LastTag);
401
402
403
404 /*****************************************************************************
405 * IKsWorkSink
406 *****************************************************************************
407 */
408 #undef INTERFACE
409 #define INTERFACE IKsWorkSink
410
411 DECLARE_INTERFACE_(IKsWorkSink, IUnknown)
412 {
413 DEFINE_ABSTRACT_UNKNOWN()
414
415 STDMETHOD_(NTSTATUS, Work)(THIS);
416 };
417
418 /*****************************************************************************
419 * IIrpStreamNotify
420 *****************************************************************************
421 */
422 #undef INTERFACE
423 #define INTERFACE IIrpStreamNotify
424
425 struct IRPSTREAMPOSITION;
426
427 DECLARE_INTERFACE_(IIrpStreamNotify, IUnknown)
428 {
429 DEFINE_ABSTRACT_UNKNOWN()
430
431 STDMETHOD_(NTSTATUS, IrpSubmitted)(THIS_
432 IN PIRP Irp,
433 IN BOOLEAN WAIT)PURE;
434
435 STDMETHOD_(NTSTATUS, GetPosition)(THIS_
436 OUT struct IRPSTREAMPOSITION * Position)PURE;
437 };
438
439 /*****************************************************************************
440 * IKsShellTransport
441 *****************************************************************************
442 */
443
444 #undef INTERFACE
445 #define INTERFACE IKsShellTransport
446
447 #define DEFINE_ABSTRACT_IKSSHELLTRANSPORT() \
448 STDMETHOD_(NTSTATUS, TransferKsIrp)(THIS_ \
449 IN PIRP Irp, \
450 OUT IKsShellTransport ** Transport) PURE; \
451 \
452 STDMETHOD_(NTSTATUS, Connect)(THIS_ \
453 IN IKsShellTransport * StartTransport, \
454 OUT IKsShellTransport ** EndTransport, \
455 IN KSPIN_DATAFLOW DataFlow)PURE; \
456 \
457 STDMETHOD_(NTSTATUS, SetDeviceState)(THIS_ \
458 IN KSSTATE State1, \
459 IN KSSTATE State2, \
460 OUT IKsShellTransport ** EndTransport)PURE; \
461 \
462 STDMETHOD_(NTSTATUS, SetResetState)(THIS_ \
463 IN KSRESET State1, \
464 OUT IKsShellTransport ** EndTransport)PURE;
465
466
467 DECLARE_INTERFACE_(IKsShellTransport, IUnknown)
468 {
469 DEFINE_ABSTRACT_UNKNOWN()
470
471 DEFINE_ABSTRACT_IKSSHELLTRANSPORT()
472 };
473
474 /*****************************************************************************
475 * IIrpStream
476 *****************************************************************************
477 */
478 struct IRPSTREAM_POSITION;
479 struct IRPSTREAMPACKETINFO;
480
481 #define DEFINE_ABSTRACT_IRPSTREAM() \
482 STDMETHOD_(NTSTATUS, TransferKsIrp)(THIS_ \
483 IN PIRP Irp, \
484 OUT IKsShellTransport ** Transport) PURE; \
485 \
486 STDMETHOD_(NTSTATUS, Connect)(THIS_ \
487 IN IKsShellTransport * StartTransport, \
488 OUT IKsShellTransport ** EndTransport, \
489 IN KSPIN_DATAFLOW DataFlow)PURE; \
490 \
491 STDMETHOD_(NTSTATUS, SetDeviceState)(THIS_ \
492 IN KSSTATE State1, \
493 IN KSSTATE State2, \
494 OUT IKsShellTransport ** EndTransport)PURE; \
495 \
496 STDMETHOD_(NTSTATUS, SetResetState)(THIS_ \
497 IN KSRESET State1, \
498 OUT IKsShellTransport ** EndTransport)PURE; \
499 \
500 STDMETHOD_(NTSTATUS, GetPosition)(THIS_ \
501 IN OUT struct IRPSTREAM_POSITION * Position) PURE; \
502 \
503 STDMETHOD_(NTSTATUS, Init)(THIS_ \
504 IN BOOLEAN Wait, \
505 KSPIN_CONNECT *ConnectDetails, \
506 PDEVICE_OBJECT DeviceObject, \
507 PDMA_ADAPTER DmaAdapter) PURE; \
508 \
509 STDMETHOD_(NTSTATUS, CancelAllIrps)(THIS_ \
510 ULONG Wait)PURE; \
511 \
512 STDMETHOD_(VOID, TerminatePacket)(THIS); \
513 \
514 STDMETHOD_(NTSTATUS, ChangeOptionsFlag)(THIS_ \
515 ULONG Unknown1, \
516 ULONG Unknown2, \
517 ULONG Unknown3, \
518 ULONG Unknown4)PURE; \
519 \
520 STDMETHOD_(NTSTATUS, GetPacketInfo)(THIS_ \
521 struct IRPSTREAMPACKETINFO * Info1, \
522 struct IRPSTREAMPACKETINFO * Info2)PURE; \
523 \
524 STDMETHOD_(NTSTATUS, SetPacketOffsets)(THIS_ \
525 ULONG Unknown1, \
526 ULONG Unknown2)PURE; \
527 \
528 STDMETHOD_(NTSTATUS, RegisterNotifySink)(THIS_ \
529 IN IIrpStreamNotify * NotifyStream)PURE;
530
531
532
533 #undef INTERFACE
534 #define INTERFACE IIrpStream
535
536 DECLARE_INTERFACE_(IIrpStream, IUnknown)
537 {
538 DEFINE_ABSTRACT_UNKNOWN()
539
540 DEFINE_ABSTRACT_IRPSTREAM()
541 };
542
543
544 /*****************************************************************************
545 * IIrpStreamPhysical
546 *****************************************************************************
547 */
548 #undef INTERFACE
549 #define INTERFACE IIrpStreamPhysical
550
551 DECLARE_INTERFACE_(IIrpStreamPhysical, IIrpStream)
552 {
553 DEFINE_ABSTRACT_UNKNOWN()
554
555 DEFINE_ABSTRACT_IRPSTREAM()
556
557 STDMETHOD_(NTSTATUS, GetMapping)(THIS_
558 IN PVOID Tag,
559 OUT PPHYSICAL_ADDRESS PhysicalAddress,
560 OUT PVOID * VirtualAddress,
561 OUT PULONG ByteCount,
562 OUT PULONG Flags)PURE;
563
564 };
565
566 /*****************************************************************************
567 * IIrpStreamVirtual
568 *****************************************************************************
569 */
570 #undef INTERFACE
571 #define INTERFACE IIrpStreamVirtual
572
573 DECLARE_INTERFACE_(IIrpStreamVirtual, IIrpStream)
574 {
575 DEFINE_ABSTRACT_UNKNOWN()
576
577 DEFINE_ABSTRACT_IRPSTREAM()
578
579 STDMETHOD_(NTSTATUS, GetLockedRegion)(THIS_
580 OUT PULONG OutSize,
581 OUT PVOID * OutBuffer)PURE;
582
583 STDMETHOD_(NTSTATUS, Copy)(THIS_
584 IN BOOLEAN Wait,
585 OUT ULONG Size,
586 IN PULONG Buffer,
587 OUT PVOID Result)PURE;
588
589 STDMETHOD_(NTSTATUS, Complete)(THIS_
590 IN ULONG Unknown1,
591 IN PULONG Data)PURE;
592
593 STDMETHOD_(ULONG, GetIrpStreamPositionLock)(THIS);
594 };
595
596 /*****************************************************************************
597 * IPortFilterWavePci
598 *****************************************************************************
599 */
600
601 #undef INTERFACE
602 #define INTERFACE IPortFilterWavePci
603
604 struct IPortPinWavePci;
605
606 DECLARE_INTERFACE_(IPortFilterWavePci, IIrpTarget)
607 {
608 DEFINE_ABSTRACT_UNKNOWN()
609
610 DEFINE_ABSTRACT_IRPTARGET()
611
612 STDMETHOD_(NTSTATUS, Init)(THIS_
613 IN PPORTWAVEPCI Port)PURE;
614
615 STDMETHOD_(NTSTATUS, FreePin)(THIS_
616 IN struct IPortPinWavePci* Pin)PURE;
617 };
618
619 typedef IPortFilterWavePci *PPORTFILTERWAVEPCI;
620
621 #define IMP_IPortFilterPci \
622 IMP_IIrpTarget; \
623 STDMETHODIMP_(NTSTATUS) Init(THIS_ \
624 IN PPORTWAVEPCI Port); \
625 STDMETHODIMP_(NTSTATUS) FreePin(THIS_ \
626 IN struct IPortPinWavePci* Pin)
627
628
629 /*****************************************************************************
630 * IPortPinWavePci
631 *****************************************************************************
632 */
633
634 #undef INTERFACE
635 #define INTERFACE IPortPinWavePci
636
637 DECLARE_INTERFACE_(IPortPinWavePci, IIrpTarget)
638 {
639 DEFINE_ABSTRACT_UNKNOWN()
640
641 DEFINE_ABSTRACT_IRPTARGET()
642
643 STDMETHOD_(NTSTATUS, Init)(THIS_
644 IN PPORTWAVEPCI Port,
645 IN PPORTFILTERWAVEPCI Filter,
646 IN KSPIN_CONNECT * ConnectDetails,
647 IN KSPIN_DESCRIPTOR * PinDescriptor,
648 IN PDEVICE_OBJECT DeviceObject) PURE;
649
650 STDMETHOD_(PVOID, GetIrpStream)(THIS) PURE;
651 STDMETHOD_(PMINIPORT, GetMiniport)(THIS) PURE;
652 };
653
654 #define IMP_IPortPinWavePci \
655 IMP_IIrpTarget; \
656 STDMETHODIMP_(NTSTATUS) Init(THIS_ \
657 IN PPORTWAVEPCI Port, \
658 IN PPORTFILTERWAVEPCI Filter, \
659 IN KSPIN_CONNECT * ConnectDetails, \
660 IN KSPIN_DESCRIPTOR * PinDescriptor, \
661 IN PDEVICE_OBJECT DeviceObject); \
662 \
663 STDMETHODIMP_(PVOID) GetIrpStream(); \
664 STDMETHODIMP_(PMINIPORT) GetMiniport(THIS)
665
666
667
668 typedef IPortPinWavePci *PPORTPINWAVEPCI;
669
670
671 #if (NTDDI_VERSION >= NTDDI_VISTA)
672
673 /*****************************************************************************
674 * IPortFilterWaveRT
675 *****************************************************************************
676 */
677
678 #undef INTERFACE
679 #define INTERFACE IPortFilterWaveRT
680
681 #ifndef PPORTWAVERT
682 typedef IPortWaveRT *PPORTWAVERT;
683 #endif
684
685 DECLARE_INTERFACE_(IPortFilterWaveRT, IIrpTarget)
686 {
687 DEFINE_ABSTRACT_UNKNOWN()
688
689 DEFINE_ABSTRACT_IRPTARGET()
690
691 STDMETHOD_(NTSTATUS, Init)(THIS_
692 IN PPORTWAVERT Port)PURE;
693 };
694
695 typedef IPortFilterWaveRT *PPORTFILTERWAVERT;
696
697 #define IMP_IPortFilterWaveRT \
698 IMP_IIrpTarget; \
699 STDMETHODIMP_(NTSTATUS) Init(THIS_ \
700 IN PPORTWAVERT Port)
701
702
703 /*****************************************************************************
704 * IPortPinWaveRT
705 *****************************************************************************
706 */
707
708 #undef INTERFACE
709 #define INTERFACE IPortPinWaveRT
710
711 DECLARE_INTERFACE_(IPortPinWaveRT, IIrpTarget)
712 {
713 DEFINE_ABSTRACT_UNKNOWN()
714
715 DEFINE_ABSTRACT_IRPTARGET()
716
717 STDMETHOD_(NTSTATUS, Init)(THIS_
718 IN PPORTWAVERT Port,
719 IN PPORTFILTERWAVERT Filter,
720 IN KSPIN_CONNECT * ConnectDetails,
721 IN KSPIN_DESCRIPTOR * PinDescriptor,
722 IN PDEVICE_OBJECT DeviceObject) PURE;
723 };
724
725 typedef IPortPinWaveRT *PPORTPINWAVERT;
726
727 #define IMP_IPortPinWaveRT \
728 IMP_IIrpTarget; \
729 STDMETHODIMP_(NTSTATUS) Init(THIS_ \
730 IN PPORTWAVERT Port, \
731 IN PPORTFILTERWAVERT Filter, \
732 IN KSPIN_CONNECT * ConnectDetails, \
733 IN KSPIN_DESCRIPTOR * PinDescriptor, \
734 IN PDEVICE_OBJECT DeviceObject)
735
736
737 #endif
738
739 /*****************************************************************************
740 * IPortFilterWaveCyclic
741 *****************************************************************************
742 */
743
744 #undef INTERFACE
745 #define INTERFACE IPortFilterWaveCyclic
746
747 struct IPortPinWaveCyclic;
748
749 DECLARE_INTERFACE_(IPortFilterWaveCyclic, IIrpTarget)
750 {
751 DEFINE_ABSTRACT_UNKNOWN()
752
753 DEFINE_ABSTRACT_IRPTARGET()
754
755 STDMETHOD_(NTSTATUS, Init)(THIS_
756 IN PPORTWAVECYCLIC Port)PURE;
757
758 STDMETHOD_(NTSTATUS, FreePin)(THIS_
759 IN struct IPortPinWaveCyclic* Pin)PURE;
760 };
761
762 typedef IPortFilterWaveCyclic *PPORTFILTERWAVECYCLIC;
763
764 #define IMP_IPortFilterWaveCyclic \
765 IMP_IIrpTarget; \
766 STDMETHODIMP_(NTSTATUS) Init(THIS_ \
767 IN PPORTWAVECYCLIC Port); \
768 STDMETHODIMP_(NTSTATUS) FreePin(THIS_ \
769 IN struct IPortPinWaveCyclic* Pin)
770
771
772 /*****************************************************************************
773 * IPortPinWaveCyclic
774 *****************************************************************************
775 */
776
777 #undef INTERFACE
778 #define INTERFACE IPortPinWaveCyclic
779
780 DECLARE_INTERFACE_(IPortPinWaveCyclic, IIrpTarget)
781 {
782 DEFINE_ABSTRACT_UNKNOWN()
783
784 DEFINE_ABSTRACT_IRPTARGET()
785
786 STDMETHOD_(NTSTATUS, Init)(THIS_
787 IN PPORTWAVECYCLIC Port,
788 IN PPORTFILTERWAVECYCLIC Filter,
789 IN KSPIN_CONNECT * ConnectDetails,
790 IN KSPIN_DESCRIPTOR * PinDescriptor) PURE;
791
792 STDMETHOD_(ULONG, GetCompletedPosition)(THIS) PURE;
793 STDMETHOD_(ULONG, GetCycleCount)(THIS) PURE;
794 STDMETHOD_(ULONG, GetDeviceBufferSize)(THIS) PURE;
795 STDMETHOD_(PVOID, GetIrpStream)(THIS) PURE;
796 STDMETHOD_(PMINIPORT, GetMiniport)(THIS) PURE;
797 };
798
799 typedef IPortPinWaveCyclic *PPORTPINWAVECYCLIC;
800
801 #define IMP_IPortPinWaveCyclic \
802 IMP_IIrpTarget; \
803 STDMETHODIMP_(NTSTATUS) Init(THIS_ \
804 IN PPORTWAVECYCLIC Port, \
805 IN PPORTFILTERWAVECYCLIC Filter, \
806 IN KSPIN_CONNECT * ConnectDetails, \
807 IN KSPIN_DESCRIPTOR * PinDescriptor); \
808 STDMETHODIMP_(ULONG) GetCompletedPosition(THIS); \
809 STDMETHODIMP_(ULONG) GetCycleCount(THIS); \
810 STDMETHODIMP_(ULONG) GetDeviceBufferSize(THIS); \
811 STDMETHODIMP_(PVOID) GetIrpStream(THIS); \
812 STDMETHODIMP_(PMINIPORT) GetMiniport(THIS)
813
814
815 /*****************************************************************************
816 * IPortFilterDMus
817 *****************************************************************************
818 */
819
820 #undef INTERFACE
821 #define INTERFACE IPortFilterDMus
822
823 struct IPortPinDMus;
824
825 DECLARE_INTERFACE_(IPortFilterDMus, IUnknown)
826 {
827 DEFINE_ABSTRACT_UNKNOWN()
828
829 DEFINE_ABSTRACT_IRPTARGET()
830
831 STDMETHOD_(NTSTATUS, Init)(THIS_
832 IN PPORTDMUS Port)PURE;
833
834 STDMETHOD_(NTSTATUS, FreePin)(THIS_
835 IN struct IPortPinDMus* Pin)PURE;
836
837 STDMETHOD_(VOID, NotifyPins)(THIS) PURE;
838 };
839
840 typedef IPortFilterDMus *PPORTFILTERDMUS;
841
842 #define IMP_IPortFilterDMus \
843 IMP_IIrpTarget; \
844 STDMETHODIMP_(NTSTATUS) Init(THIS_ \
845 IN PPORTDMUS Port); \
846 STDMETHODIMP_(NTSTATUS) FreePin(THIS_ \
847 IN struct IPortPinDMus* Pin); \
848 STDMETHODIMP_(VOID) NotifyPins(THIS)
849
850 /*****************************************************************************
851 * IPortPinDMus
852 *****************************************************************************
853 */
854
855 #undef INTERFACE
856 #define INTERFACE IPortPinDMus
857
858 DECLARE_INTERFACE_(IPortPinDMus, IIrpTarget)
859 {
860 DEFINE_ABSTRACT_UNKNOWN()
861
862 DEFINE_ABSTRACT_IRPTARGET()
863
864 STDMETHOD_(NTSTATUS, Init)(THIS_
865 IN PPORTDMUS Port,
866 IN PPORTFILTERDMUS Filter,
867 IN KSPIN_CONNECT * ConnectDetails,
868 IN KSPIN_DESCRIPTOR * PinDescriptor,
869 IN PDEVICE_OBJECT DeviceObject) PURE;
870
871 STDMETHOD_(VOID, Notify)(THIS) PURE;
872 };
873
874 #define IMP_IPortPinDMus \
875 IMP_IIrpTarget; \
876 STDMETHODIMP_(NTSTATUS) Init(THIS_ \
877 IN PPORTDMUS Port, \
878 IN PPORTFILTERDMUS Filter, \
879 IN KSPIN_CONNECT * ConnectDetails, \
880 IN KSPIN_DESCRIPTOR * PinDescriptor, \
881 IN PDEVICE_OBJECT DeviceObject); \
882 STDMETHODIMP_(VOID) Notify(THIS)
883
884 typedef IPortPinDMus *PPORTPINDMUS;
885
886 /*****************************************************************************
887 * IDmaChannelInit
888 *****************************************************************************
889 */
890
891 #ifdef _MSC_VER
892
893 #define IMP_IDmaChannelEx \
894 STDMETHODIMP_(NTSTATUS) AllocateBuffer( \
895 IN ULONG BufferSize, \
896 IN PPHYSICAL_ADDRESS PhysicalAddressConstraint OPTIONAL); \
897 \
898 STDMETHODIMP_(void) FreeBuffer(void); \
899 STDMETHODIMP_(ULONG) TransferCount(void); \
900 STDMETHODIMP_(ULONG) MaximumBufferSize(void); \
901 STDMETHODIMP_(ULONG) AllocatedBufferSize(void); \
902 STDMETHODIMP_(ULONG) BufferSize(void); \
903 \
904 STDMETHODIMP_(void) SetBufferSize( \
905 IN ULONG BufferSize); \
906 \
907 STDMETHODIMP_(PVOID) SystemAddress(void); \
908 STDMETHODIMP_(PHYSICAL_ADDRESS) PhysicalAddress(); \
909 STDMETHODIMP_(PADAPTER_OBJECT) GetAdapterObject(void); \
910 \
911 STDMETHODIMP_(void) CopyTo( \
912 IN PVOID Destination, \
913 IN PVOID Source, \
914 IN ULONG ByteCount); \
915 \
916 STDMETHODIMP_(void) CopyFrom( \
917 IN PVOID Destination, \
918 IN PVOID Source, \
919 IN ULONG ByteCount)
920
921 #else
922
923 #define IMP_IDmaChannelEx \
924 STDMETHODIMP_(NTSTATUS) AllocateBuffer( \
925 IN ULONG BufferSize, \
926 IN PPHYSICAL_ADDRESS PhysicalAddressConstraint OPTIONAL); \
927 \
928 STDMETHODIMP_(void) FreeBuffer(void); \
929 STDMETHODIMP_(ULONG) TransferCount(void); \
930 STDMETHODIMP_(ULONG) MaximumBufferSize(void); \
931 STDMETHODIMP_(ULONG) AllocatedBufferSize(void); \
932 STDMETHODIMP_(ULONG) BufferSize(void); \
933 \
934 STDMETHODIMP_(void) SetBufferSize( \
935 IN ULONG BufferSize); \
936 \
937 STDMETHODIMP_(PVOID) SystemAddress(void); \
938 STDMETHODIMP_(PHYSICAL_ADDRESS) PhysicalAddress( \
939 IN PPHYSICAL_ADDRESS PhysicalAddressConstraint OPTIONAL); \
940 STDMETHODIMP_(PADAPTER_OBJECT) GetAdapterObject(void); \
941 \
942 STDMETHODIMP_(void) CopyTo( \
943 IN PVOID Destination, \
944 IN PVOID Source, \
945 IN ULONG ByteCount); \
946 \
947 STDMETHODIMP_(void) CopyFrom( \
948 IN PVOID Destination, \
949 IN PVOID Source, \
950 IN ULONG ByteCount)
951
952
953
954 #endif
955
956
957 #define IMP_IDmaChannelSlaveEx \
958 IMP_IDmaChannelEx; \
959 STDMETHODIMP_(NTSTATUS) Start( \
960 IN ULONG MapSize, \
961 IN BOOLEAN WriteToDevice); \
962 \
963 STDMETHODIMP_(NTSTATUS) Stop(void); \
964 STDMETHODIMP_(ULONG) ReadCounter(void); \
965 \
966 STDMETHODIMP_(NTSTATUS) WaitForTC( \
967 ULONG Timeout)
968
969 #define IMP_IDmaChannelInit\
970 IMP_IDmaChannelSlaveEx;\
971 STDMETHODIMP_(NTSTATUS) Init( \
972 IN PDEVICE_DESCRIPTION DeviceDescription, \
973 IN PDEVICE_OBJECT DeviceObject)
974
975 #ifdef _MSC_VER
976
977 #define DEFINE_ABSTRACT_DMACHANNEL_EX() \
978 STDMETHOD_(NTSTATUS, AllocateBuffer)( THIS_ \
979 IN ULONG BufferSize, \
980 IN PPHYSICAL_ADDRESS PhysicalAddressConstraint OPTIONAL) PURE; \
981 \
982 STDMETHOD_(void, FreeBuffer)( THIS ) PURE; \
983 STDMETHOD_(ULONG, TransferCount)( THIS ) PURE; \
984 STDMETHOD_(ULONG, MaximumBufferSize)( THIS ) PURE; \
985 STDMETHOD_(ULONG, AllocatedBufferSize)( THIS ) PURE; \
986 STDMETHOD_(ULONG, BufferSize)( THIS ) PURE; \
987 \
988 STDMETHOD_(void, SetBufferSize)( THIS_ \
989 IN ULONG BufferSize) PURE; \
990 \
991 STDMETHOD_(PVOID, SystemAddress)( THIS ) PURE; \
992 STDMETHOD_(PHYSICAL_ADDRESS, PhysicalAddress)( THIS) PURE; \
993 STDMETHOD_(PADAPTER_OBJECT, GetAdapterObject)( THIS ) PURE; \
994 \
995 STDMETHOD_(void, CopyTo)( THIS_ \
996 IN PVOID Destination, \
997 IN PVOID Source, \
998 IN ULONG ByteCount) PURE; \
999 \
1000 STDMETHOD_(void, CopyFrom)( THIS_ \
1001 IN PVOID Destination, \
1002 IN PVOID Source, \
1003 IN ULONG ByteCount) PURE;
1004 #else
1005
1006 #define DEFINE_ABSTRACT_DMACHANNEL_EX() \
1007 STDMETHOD_(NTSTATUS, AllocateBuffer)( THIS_ \
1008 IN ULONG BufferSize, \
1009 IN PPHYSICAL_ADDRESS PhysicalAddressConstraint OPTIONAL) PURE; \
1010 \
1011 STDMETHOD_(void, FreeBuffer)( THIS ) PURE; \
1012 STDMETHOD_(ULONG, TransferCount)( THIS ) PURE; \
1013 STDMETHOD_(ULONG, MaximumBufferSize)( THIS ) PURE; \
1014 STDMETHOD_(ULONG, AllocatedBufferSize)( THIS ) PURE; \
1015 STDMETHOD_(ULONG, BufferSize)( THIS ) PURE; \
1016 \
1017 STDMETHOD_(void, SetBufferSize)( THIS_ \
1018 IN ULONG BufferSize) PURE; \
1019 \
1020 STDMETHOD_(PVOID, SystemAddress)( THIS ) PURE; \
1021 STDMETHOD_(PHYSICAL_ADDRESS, PhysicalAddress)( THIS_ \
1022 IN PPHYSICAL_ADDRESS Address) PURE; \
1023 STDMETHOD_(PADAPTER_OBJECT, GetAdapterObject)( THIS ) PURE; \
1024 \
1025 STDMETHOD_(void, CopyTo)( THIS_ \
1026 IN PVOID Destination, \
1027 IN PVOID Source, \
1028 IN ULONG ByteCount) PURE; \
1029 \
1030 STDMETHOD_(void, CopyFrom)( THIS_ \
1031 IN PVOID Destination, \
1032 IN PVOID Source, \
1033 IN ULONG ByteCount) PURE;
1034
1035 #endif
1036 #undef INTERFACE
1037 #define INTERFACE IDmaChannelInit
1038
1039 DECLARE_INTERFACE_(IDmaChannelInit, IUnknown)
1040 {
1041 DEFINE_ABSTRACT_UNKNOWN()
1042 DEFINE_ABSTRACT_DMACHANNEL_EX()
1043 DEFINE_ABSTRACT_DMACHANNELSLAVE()
1044
1045 STDMETHOD_(NTSTATUS, Init)( THIS_
1046 IN PDEVICE_DESCRIPTION DeviceDescription,
1047 IN PDEVICE_OBJECT DeviceObject) PURE;
1048 };
1049
1050 #undef INTERFACE
1051
1052 /*****************************************************************************
1053 * IPortFilterTopology
1054 *****************************************************************************
1055 */
1056
1057 #undef INTERFACE
1058 #define INTERFACE IPortFilterTopology
1059
1060 DECLARE_INTERFACE_(IPortFilterTopology, IIrpTarget)
1061 {
1062 DEFINE_ABSTRACT_UNKNOWN()
1063
1064 DEFINE_ABSTRACT_IRPTARGET()
1065
1066 STDMETHOD_(NTSTATUS, Init)(THIS_
1067 IN PPORTTOPOLOGY Port)PURE;
1068 };
1069
1070 typedef IPortFilterTopology *PPORTFILTERTOPOLOGY;
1071
1072 #define IMP_IPortFilterTopology \
1073 IMP_IIrpTarget; \
1074 STDMETHODIMP_(NTSTATUS) Init(THIS_ \
1075 IN PPORTTOPOLOGY Port)
1076
1077 #undef INTERFACE
1078
1079 /*****************************************************************************
1080 * IPortWaveRTStreamInit
1081 *****************************************************************************
1082 */
1083
1084 #undef INTERFACE
1085 #define INTERFACE IPortWaveRTStreamInit
1086
1087
1088 DECLARE_INTERFACE_(IPortWaveRTStreamInit, IUnknown)
1089 {
1090 DEFINE_ABSTRACT_UNKNOWN()
1091
1092 STDMETHOD_(PMDL, AllocatePagesForMdl)
1093 ( THIS_
1094 IN PHYSICAL_ADDRESS HighAddress,
1095 IN SIZE_T TotalBytes
1096 ) PURE;
1097
1098 STDMETHOD_(PMDL, AllocateContiguousPagesForMdl)
1099 ( THIS_
1100 IN PHYSICAL_ADDRESS LowAddress,
1101 IN PHYSICAL_ADDRESS HighAddress,
1102 IN SIZE_T TotalBytes
1103 ) PURE;
1104
1105 STDMETHOD_(PVOID, MapAllocatedPages)
1106 ( THIS_
1107 IN PMDL MemoryDescriptorList,
1108 IN MEMORY_CACHING_TYPE CacheType
1109 ) PURE;
1110
1111 STDMETHOD_(VOID, UnmapAllocatedPages)
1112 ( THIS_
1113 IN PVOID BaseAddress,
1114 IN PMDL MemoryDescriptorList
1115 ) PURE;
1116
1117 STDMETHOD_(VOID, FreePagesFromMdl)
1118 ( THIS_
1119 IN PMDL MemoryDescriptorList
1120 ) PURE;
1121
1122 STDMETHOD_(ULONG, GetPhysicalPagesCount)
1123 ( THIS_
1124 IN PMDL MemoryDescriptorList
1125 ) PURE;
1126
1127 STDMETHOD_(PHYSICAL_ADDRESS, GetPhysicalPageAddress)
1128 ( THIS_
1129 IN PPHYSICAL_ADDRESS Address,
1130 IN PMDL MemoryDescriptorList,
1131 IN ULONG Index
1132 ) PURE;
1133 };
1134
1135 #undef INTERFACE
1136
1137 #define IMP_IPortWaveRTStreamInit \
1138 STDMETHODIMP_(PMDL) AllocatePagesForMdl \
1139 ( THIS_ \
1140 IN PHYSICAL_ADDRESS HighAddress, \
1141 IN SIZE_T TotalBytes \
1142 ); \
1143 \
1144 STDMETHODIMP_(PMDL) AllocateContiguousPagesForMdl \
1145 ( THIS_ \
1146 IN PHYSICAL_ADDRESS LowAddress, \
1147 IN PHYSICAL_ADDRESS HighAddress, \
1148 IN SIZE_T TotalBytes \
1149 ); \
1150 \
1151 STDMETHODIMP_(PVOID) MapAllocatedPages \
1152 ( THIS_ \
1153 IN PMDL MemoryDescriptorList, \
1154 IN MEMORY_CACHING_TYPE CacheType \
1155 ); \
1156 \
1157 STDMETHODIMP_(VOID) UnmapAllocatedPages \
1158 ( THIS_ \
1159 IN PVOID BaseAddress, \
1160 IN PMDL MemoryDescriptorList \
1161 ); \
1162 \
1163 STDMETHODIMP_(VOID) FreePagesFromMdl \
1164 ( THIS_ \
1165 IN PMDL MemoryDescriptorList \
1166 ); \
1167 \
1168 STDMETHODIMP_(ULONG) GetPhysicalPagesCount \
1169 ( THIS_ \
1170 IN PMDL MemoryDescriptorList \
1171 ); \
1172 \
1173 STDMETHODIMP_(PHYSICAL_ADDRESS) GetPhysicalPageAddress \
1174 ( THIS_ \
1175 IN PPHYSICAL_ADDRESS Address, \
1176 IN PMDL MemoryDescriptorList, \
1177 IN ULONG Index \
1178 )
1179
1180 #ifndef IMP_IPortClsVersion
1181
1182 #define IMP_IPortClsVersion \
1183 STDMETHODIMP_(DWORD) GetVersion(void);
1184
1185 #endif
1186
1187 #ifdef IMP_IPortWaveRT
1188 #define IMP_IPortWaveRT IMP_IPort
1189 #endif
1190
1191 #endif