Merge trunk head (r49270)
[reactos.git] / 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 STDMETHOD_(NTSTATUS, Close)(THIS_ \
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 KSPIN_CONNECT *ConnectDetails,
323 IN ULONG FrameSize,
324 IN ULONG Alignment) PURE;
325
326 STDMETHOD_(NTSTATUS, AddMapping)(THIS_
327 IN PIRP Irp,
328 OUT PULONG Data) PURE;
329
330 STDMETHOD_(NTSTATUS, GetMapping)(THIS_
331 OUT PUCHAR * Buffer,
332 OUT PULONG BufferSize) PURE;
333
334 STDMETHOD_(VOID, UpdateMapping)(THIS_
335 IN ULONG BytesWritten) PURE;
336
337 STDMETHOD_(ULONG, NumData)(THIS) PURE;
338
339 STDMETHOD_(BOOL, CancelBuffers)(THIS) PURE;
340
341 STDMETHOD_(NTSTATUS, GetMappingWithTag)(THIS_
342 IN PVOID Tag,
343 OUT PPHYSICAL_ADDRESS PhysicalAddress,
344 OUT PVOID *VirtualAddress,
345 OUT PULONG ByteCount,
346 OUT PULONG Flags) PURE;
347
348 STDMETHOD_(NTSTATUS, ReleaseMappingWithTag)(THIS_
349 IN PVOID Tag) PURE;
350
351 STDMETHOD_(BOOLEAN, HasLastMappingFailed)(THIS) PURE;
352 STDMETHOD_(ULONG, GetCurrentIrpOffset)(THIS) PURE;
353
354 STDMETHOD_(BOOLEAN, GetAcquiredTagRange)(THIS_
355 IN PVOID * FirstTag,
356 IN PVOID * LastTag) PURE;
357
358 };
359
360
361 #define IMP_IIrpQueue \
362 STDMETHODIMP_(NTSTATUS) Init(THIS_ \
363 IN KSPIN_CONNECT *ConnectDetails, \
364 IN ULONG FrameSize, \
365 IN ULONG Alignment); \
366 \
367 STDMETHODIMP_(NTSTATUS) AddMapping(THIS_ \
368 IN PIRP Irp, \
369 OUT PULONG Data); \
370 \
371 STDMETHODIMP_(NTSTATUS) GetMapping(THIS_ \
372 OUT PUCHAR * Buffer, \
373 OUT PULONG BufferSize); \
374 \
375 STDMETHODIMP_(VOID) UpdateMapping(THIS_ \
376 IN ULONG BytesWritten); \
377 \
378 STDMETHODIMP_(ULONG) NumData(THIS); \
379 \
380 STDMETHODIMP_(BOOL) CancelBuffers(THIS); \
381 \
382 STDMETHODIMP_(NTSTATUS) GetMappingWithTag(THIS_ \
383 IN PVOID Tag, \
384 OUT PPHYSICAL_ADDRESS PhysicalAddress, \
385 OUT PVOID *VirtualAddress, \
386 OUT PULONG ByteCount, \
387 OUT PULONG Flags); \
388 \
389 STDMETHODIMP_(NTSTATUS) ReleaseMappingWithTag( \
390 IN PVOID Tag); \
391 \
392 STDMETHODIMP_(BOOLEAN) HasLastMappingFailed(THIS); \
393 STDMETHODIMP_(ULONG) GetCurrentIrpOffset(THIS); \
394 STDMETHODIMP_(BOOLEAN) GetAcquiredTagRange(THIS_ \
395 IN PVOID * FirstTag, \
396 IN PVOID * LastTag);
397
398
399
400 /*****************************************************************************
401 * IKsWorkSink
402 *****************************************************************************
403 */
404 #undef INTERFACE
405 #define INTERFACE IKsWorkSink
406
407 DECLARE_INTERFACE_(IKsWorkSink, IUnknown)
408 {
409 DEFINE_ABSTRACT_UNKNOWN()
410
411 STDMETHOD_(NTSTATUS, Work)(THIS);
412 };
413
414 /*****************************************************************************
415 * IIrpStreamNotify
416 *****************************************************************************
417 */
418 #undef INTERFACE
419 #define INTERFACE IIrpStreamNotify
420
421 struct IRPSTREAMPOSITION;
422
423 DECLARE_INTERFACE_(IIrpStreamNotify, IUnknown)
424 {
425 DEFINE_ABSTRACT_UNKNOWN()
426
427 STDMETHOD_(NTSTATUS, IrpSubmitted)(THIS_
428 IN PIRP Irp,
429 IN BOOLEAN WAIT)PURE;
430
431 STDMETHOD_(NTSTATUS, GetPosition)(THIS_
432 OUT struct IRPSTREAMPOSITION * Position)PURE;
433 };
434
435 /*****************************************************************************
436 * IKsShellTransport
437 *****************************************************************************
438 */
439
440 #undef INTERFACE
441 #define INTERFACE IKsShellTransport
442
443 #define DEFINE_ABSTRACT_IKSSHELLTRANSPORT() \
444 STDMETHOD_(NTSTATUS, TransferKsIrp)(THIS_ \
445 IN PIRP Irp, \
446 OUT IKsShellTransport ** Transport) PURE; \
447 \
448 STDMETHOD_(NTSTATUS, Connect)(THIS_ \
449 IN IKsShellTransport * StartTransport, \
450 OUT IKsShellTransport ** EndTransport, \
451 IN KSPIN_DATAFLOW DataFlow)PURE; \
452 \
453 STDMETHOD_(NTSTATUS, SetDeviceState)(THIS_ \
454 IN KSSTATE State1, \
455 IN KSSTATE State2, \
456 OUT IKsShellTransport ** EndTransport)PURE; \
457 \
458 STDMETHOD_(NTSTATUS, SetResetState)(THIS_ \
459 IN KSRESET State1, \
460 OUT IKsShellTransport ** EndTransport)PURE;
461
462
463 DECLARE_INTERFACE_(IKsShellTransport, IUnknown)
464 {
465 DEFINE_ABSTRACT_UNKNOWN()
466
467 DEFINE_ABSTRACT_IKSSHELLTRANSPORT()
468 };
469
470 /*****************************************************************************
471 * IIrpStream
472 *****************************************************************************
473 */
474 struct IRPSTREAM_POSITION;
475 struct IRPSTREAMPACKETINFO;
476
477 #define DEFINE_ABSTRACT_IRPSTREAM() \
478 STDMETHOD_(NTSTATUS, TransferKsIrp)(THIS_ \
479 IN PIRP Irp, \
480 OUT IKsShellTransport ** Transport) PURE; \
481 \
482 STDMETHOD_(NTSTATUS, Connect)(THIS_ \
483 IN IKsShellTransport * StartTransport, \
484 OUT IKsShellTransport ** EndTransport, \
485 IN KSPIN_DATAFLOW DataFlow)PURE; \
486 \
487 STDMETHOD_(NTSTATUS, SetDeviceState)(THIS_ \
488 IN KSSTATE State1, \
489 IN KSSTATE State2, \
490 OUT IKsShellTransport ** EndTransport)PURE; \
491 \
492 STDMETHOD_(NTSTATUS, SetResetState)(THIS_ \
493 IN KSRESET State1, \
494 OUT IKsShellTransport ** EndTransport)PURE; \
495 \
496 STDMETHOD_(NTSTATUS, GetPosition)(THIS_ \
497 IN OUT struct IRPSTREAM_POSITION * Position) PURE; \
498 \
499 STDMETHOD_(NTSTATUS, Init)(THIS_ \
500 IN BOOLEAN Wait, \
501 KSPIN_CONNECT *ConnectDetails, \
502 PDEVICE_OBJECT DeviceObject, \
503 PDMA_ADAPTER DmaAdapter) PURE; \
504 \
505 STDMETHOD_(NTSTATUS, CancelAllIrps)(THIS_ \
506 ULONG Wait)PURE; \
507 \
508 STDMETHOD_(VOID, TerminatePacket)(THIS); \
509 \
510 STDMETHOD_(NTSTATUS, ChangeOptionsFlag)(THIS_ \
511 ULONG Unknown1, \
512 ULONG Unknown2, \
513 ULONG Unknown3, \
514 ULONG Unknown4)PURE; \
515 \
516 STDMETHOD_(NTSTATUS, GetPacketInfo)(THIS_ \
517 struct IRPSTREAMPACKETINFO * Info1, \
518 struct IRPSTREAMPACKETINFO * Info2)PURE; \
519 \
520 STDMETHOD_(NTSTATUS, SetPacketOffsets)(THIS_ \
521 ULONG Unknown1, \
522 ULONG Unknown2)PURE; \
523 \
524 STDMETHOD_(NTSTATUS, RegisterNotifySink)(THIS_ \
525 IN IIrpStreamNotify * NotifyStream)PURE;
526
527
528
529 #undef INTERFACE
530 #define INTERFACE IIrpStream
531
532 DECLARE_INTERFACE_(IIrpStream, IUnknown)
533 {
534 DEFINE_ABSTRACT_UNKNOWN()
535
536 DEFINE_ABSTRACT_IRPSTREAM()
537 };
538
539
540 /*****************************************************************************
541 * IIrpStreamPhysical
542 *****************************************************************************
543 */
544 #undef INTERFACE
545 #define INTERFACE IIrpStreamPhysical
546
547 DECLARE_INTERFACE_(IIrpStreamPhysical, IIrpStream)
548 {
549 DEFINE_ABSTRACT_UNKNOWN()
550
551 DEFINE_ABSTRACT_IRPSTREAM()
552
553 STDMETHOD_(NTSTATUS, GetMapping)(THIS_
554 IN PVOID Tag,
555 OUT PPHYSICAL_ADDRESS PhysicalAddress,
556 OUT PVOID * VirtualAddress,
557 OUT PULONG ByteCount,
558 OUT PULONG Flags)PURE;
559
560 };
561
562 /*****************************************************************************
563 * IIrpStreamVirtual
564 *****************************************************************************
565 */
566 #undef INTERFACE
567 #define INTERFACE IIrpStreamVirtual
568
569 DECLARE_INTERFACE_(IIrpStreamVirtual, IIrpStream)
570 {
571 DEFINE_ABSTRACT_UNKNOWN()
572
573 DEFINE_ABSTRACT_IRPSTREAM()
574
575 STDMETHOD_(NTSTATUS, GetLockedRegion)(THIS_
576 OUT PULONG OutSize,
577 OUT PVOID * OutBuffer)PURE;
578
579 STDMETHOD_(NTSTATUS, Copy)(THIS_
580 IN BOOLEAN Wait,
581 OUT ULONG Size,
582 IN PULONG Buffer,
583 OUT PVOID Result)PURE;
584
585 STDMETHOD_(NTSTATUS, Complete)(THIS_
586 IN ULONG Unknown1,
587 IN PULONG Data)PURE;
588
589 STDMETHOD_(ULONG, GetIrpStreamPositionLock)(THIS);
590 };
591
592 /*****************************************************************************
593 * IPortFilterWavePci
594 *****************************************************************************
595 */
596
597 #undef INTERFACE
598 #define INTERFACE IPortFilterWavePci
599
600 struct IPortPinWavePci;
601
602 DECLARE_INTERFACE_(IPortFilterWavePci, IIrpTarget)
603 {
604 DEFINE_ABSTRACT_UNKNOWN()
605
606 DEFINE_ABSTRACT_IRPTARGET()
607
608 STDMETHOD_(NTSTATUS, Init)(THIS_
609 IN PPORTWAVEPCI Port)PURE;
610
611 STDMETHOD_(NTSTATUS, FreePin)(THIS_
612 IN struct IPortPinWavePci* Pin)PURE;
613 };
614
615 typedef IPortFilterWavePci *PPORTFILTERWAVEPCI;
616
617 #define IMP_IPortFilterPci \
618 IMP_IIrpTarget; \
619 STDMETHODIMP_(NTSTATUS) Init(THIS_ \
620 IN PPORTWAVEPCI Port); \
621 STDMETHODIMP_(NTSTATUS) FreePin(THIS_ \
622 IN struct IPortPinWavePci* Pin)
623
624
625 /*****************************************************************************
626 * IPortPinWavePci
627 *****************************************************************************
628 */
629
630 #undef INTERFACE
631 #define INTERFACE IPortPinWavePci
632
633 DECLARE_INTERFACE_(IPortPinWavePci, IIrpTarget)
634 {
635 DEFINE_ABSTRACT_UNKNOWN()
636
637 DEFINE_ABSTRACT_IRPTARGET()
638
639 STDMETHOD_(NTSTATUS, Init)(THIS_
640 IN PPORTWAVEPCI Port,
641 IN PPORTFILTERWAVEPCI Filter,
642 IN KSPIN_CONNECT * ConnectDetails,
643 IN KSPIN_DESCRIPTOR * PinDescriptor,
644 IN PDEVICE_OBJECT DeviceObject) PURE;
645
646 STDMETHOD_(PVOID, GetIrpStream)(THIS) PURE;
647 STDMETHOD_(PMINIPORT, GetMiniport)(THIS) PURE;
648 };
649
650 #define IMP_IPortPinWavePci \
651 IMP_IIrpTarget; \
652 STDMETHODIMP_(NTSTATUS) Init(THIS_ \
653 IN PPORTWAVEPCI Port, \
654 IN PPORTFILTERWAVEPCI Filter, \
655 IN KSPIN_CONNECT * ConnectDetails, \
656 IN KSPIN_DESCRIPTOR * PinDescriptor, \
657 IN PDEVICE_OBJECT DeviceObject); \
658 \
659 STDMETHODIMP_(PVOID) GetIrpStream(); \
660 STDMETHODIMP_(PMINIPORT) GetMiniport(THIS)
661
662
663
664 typedef IPortPinWavePci *PPORTPINWAVEPCI;
665
666
667 #if (NTDDI_VERSION >= NTDDI_VISTA)
668
669 /*****************************************************************************
670 * IPortFilterWaveRT
671 *****************************************************************************
672 */
673
674 #undef INTERFACE
675 #define INTERFACE IPortFilterWaveRT
676
677 #ifndef PPORTWAVERT
678 typedef IPortWaveRT *PPORTWAVERT;
679 #endif
680
681 DECLARE_INTERFACE_(IPortFilterWaveRT, IIrpTarget)
682 {
683 DEFINE_ABSTRACT_UNKNOWN()
684
685 DEFINE_ABSTRACT_IRPTARGET()
686
687 STDMETHOD_(NTSTATUS, Init)(THIS_
688 IN PPORTWAVERT Port)PURE;
689 };
690
691 typedef IPortFilterWaveRT *PPORTFILTERWAVERT;
692
693 #define IMP_IPortFilterWaveRT \
694 IMP_IIrpTarget; \
695 STDMETHODIMP_(NTSTATUS) Init(THIS_ \
696 IN PPORTWAVERT Port)
697
698
699 /*****************************************************************************
700 * IPortPinWaveRT
701 *****************************************************************************
702 */
703
704 #undef INTERFACE
705 #define INTERFACE IPortPinWaveRT
706
707 DECLARE_INTERFACE_(IPortPinWaveRT, IIrpTarget)
708 {
709 DEFINE_ABSTRACT_UNKNOWN()
710
711 DEFINE_ABSTRACT_IRPTARGET()
712
713 STDMETHOD_(NTSTATUS, Init)(THIS_
714 IN PPORTWAVERT Port,
715 IN PPORTFILTERWAVERT Filter,
716 IN KSPIN_CONNECT * ConnectDetails,
717 IN KSPIN_DESCRIPTOR * PinDescriptor,
718 IN PDEVICE_OBJECT DeviceObject) PURE;
719 };
720
721 typedef IPortPinWaveRT *PPORTPINWAVERT;
722
723 #define IMP_IPortPinWaveRT \
724 IMP_IIrpTarget; \
725 STDMETHODIMP_(NTSTATUS) Init(THIS_ \
726 IN PPORTWAVERT Port, \
727 IN PPORTFILTERWAVERT Filter, \
728 IN KSPIN_CONNECT * ConnectDetails, \
729 IN KSPIN_DESCRIPTOR * PinDescriptor, \
730 IN PDEVICE_OBJECT DeviceObject)
731
732
733 #endif
734
735 /*****************************************************************************
736 * IPortFilterWaveCyclic
737 *****************************************************************************
738 */
739
740 #undef INTERFACE
741 #define INTERFACE IPortFilterWaveCyclic
742
743 struct IPortPinWaveCyclic;
744
745 DECLARE_INTERFACE_(IPortFilterWaveCyclic, IIrpTarget)
746 {
747 DEFINE_ABSTRACT_UNKNOWN()
748
749 DEFINE_ABSTRACT_IRPTARGET()
750
751 STDMETHOD_(NTSTATUS, Init)(THIS_
752 IN PPORTWAVECYCLIC Port)PURE;
753
754 STDMETHOD_(NTSTATUS, FreePin)(THIS_
755 IN struct IPortPinWaveCyclic* Pin)PURE;
756 };
757
758 typedef IPortFilterWaveCyclic *PPORTFILTERWAVECYCLIC;
759
760 #define IMP_IPortFilterWaveCyclic \
761 IMP_IIrpTarget; \
762 STDMETHODIMP_(NTSTATUS) Init(THIS_ \
763 IN PPORTWAVECYCLIC Port); \
764 STDMETHODIMP_(NTSTATUS) FreePin(THIS_ \
765 IN struct IPortPinWaveCyclic* Pin)
766
767
768 /*****************************************************************************
769 * IPortPinWaveCyclic
770 *****************************************************************************
771 */
772
773 #undef INTERFACE
774 #define INTERFACE IPortPinWaveCyclic
775
776 DECLARE_INTERFACE_(IPortPinWaveCyclic, IIrpTarget)
777 {
778 DEFINE_ABSTRACT_UNKNOWN()
779
780 DEFINE_ABSTRACT_IRPTARGET()
781
782 STDMETHOD_(NTSTATUS, Init)(THIS_
783 IN PPORTWAVECYCLIC Port,
784 IN PPORTFILTERWAVECYCLIC Filter,
785 IN KSPIN_CONNECT * ConnectDetails,
786 IN KSPIN_DESCRIPTOR * PinDescriptor) PURE;
787
788 STDMETHOD_(ULONG, GetCompletedPosition)(THIS) PURE;
789 STDMETHOD_(ULONG, GetCycleCount)(THIS) PURE;
790 STDMETHOD_(ULONG, GetDeviceBufferSize)(THIS) PURE;
791 STDMETHOD_(PVOID, GetIrpStream)(THIS) PURE;
792 STDMETHOD_(PMINIPORT, GetMiniport)(THIS) PURE;
793 };
794
795 typedef IPortPinWaveCyclic *PPORTPINWAVECYCLIC;
796
797 #define IMP_IPortPinWaveCyclic \
798 IMP_IIrpTarget; \
799 STDMETHODIMP_(NTSTATUS) Init(THIS_ \
800 IN PPORTWAVECYCLIC Port, \
801 IN PPORTFILTERWAVECYCLIC Filter, \
802 IN KSPIN_CONNECT * ConnectDetails, \
803 IN KSPIN_DESCRIPTOR * PinDescriptor); \
804 STDMETHODIMP_(ULONG) GetCompletedPosition(THIS); \
805 STDMETHODIMP_(ULONG) GetCycleCount(THIS); \
806 STDMETHODIMP_(ULONG) GetDeviceBufferSize(THIS); \
807 STDMETHODIMP_(PVOID) GetIrpStream(THIS); \
808 STDMETHODIMP_(PMINIPORT) GetMiniport(THIS)
809
810
811 /*****************************************************************************
812 * IPortFilterDMus
813 *****************************************************************************
814 */
815
816 #undef INTERFACE
817 #define INTERFACE IPortFilterDMus
818
819 struct IPortPinDMus;
820
821 DECLARE_INTERFACE_(IPortFilterDMus, IUnknown)
822 {
823 DEFINE_ABSTRACT_UNKNOWN()
824
825 DEFINE_ABSTRACT_IRPTARGET()
826
827 STDMETHOD_(NTSTATUS, Init)(THIS_
828 IN PPORTDMUS Port)PURE;
829
830 STDMETHOD_(NTSTATUS, FreePin)(THIS_
831 IN struct IPortPinDMus* Pin)PURE;
832
833 STDMETHOD_(VOID, NotifyPins)(THIS) PURE;
834 };
835
836 typedef IPortFilterDMus *PPORTFILTERDMUS;
837
838 #define IMP_IPortFilterDMus \
839 IMP_IIrpTarget; \
840 STDMETHODIMP_(NTSTATUS) Init(THIS_ \
841 IN PPORTDMUS Port); \
842 STDMETHODIMP_(NTSTATUS) FreePin(THIS_ \
843 IN struct IPortPinDMus* Pin); \
844 STDMETHODIMP_(VOID) NotifyPins(THIS)
845
846 /*****************************************************************************
847 * IPortPinDMus
848 *****************************************************************************
849 */
850
851 #undef INTERFACE
852 #define INTERFACE IPortPinDMus
853
854 DECLARE_INTERFACE_(IPortPinDMus, IIrpTarget)
855 {
856 DEFINE_ABSTRACT_UNKNOWN()
857
858 DEFINE_ABSTRACT_IRPTARGET()
859
860 STDMETHOD_(NTSTATUS, Init)(THIS_
861 IN PPORTDMUS Port,
862 IN PPORTFILTERDMUS Filter,
863 IN KSPIN_CONNECT * ConnectDetails,
864 IN KSPIN_DESCRIPTOR * PinDescriptor,
865 IN PDEVICE_OBJECT DeviceObject) PURE;
866
867 STDMETHOD_(VOID, Notify)(THIS) PURE;
868 };
869
870 #define IMP_IPortPinDMus \
871 IMP_IIrpTarget; \
872 STDMETHODIMP_(NTSTATUS) Init(THIS_ \
873 IN PPORTDMUS Port, \
874 IN PPORTFILTERDMUS Filter, \
875 IN KSPIN_CONNECT * ConnectDetails, \
876 IN KSPIN_DESCRIPTOR * PinDescriptor, \
877 IN PDEVICE_OBJECT DeviceObject); \
878 STDMETHODIMP_(VOID) Notify(THIS)
879
880 typedef IPortPinDMus *PPORTPINDMUS;
881
882 /*****************************************************************************
883 * IDmaChannelInit
884 *****************************************************************************
885 */
886
887 #define IMP_IDmaChannelEx \
888 STDMETHODIMP_(NTSTATUS) AllocateBuffer( \
889 IN ULONG BufferSize, \
890 IN PPHYSICAL_ADDRESS PhysicalAddressConstraint OPTIONAL); \
891 \
892 STDMETHODIMP_(void) FreeBuffer(void); \
893 STDMETHODIMP_(ULONG) TransferCount(void); \
894 STDMETHODIMP_(ULONG) MaximumBufferSize(void); \
895 STDMETHODIMP_(ULONG) AllocatedBufferSize(void); \
896 STDMETHODIMP_(ULONG) BufferSize(void); \
897 \
898 STDMETHODIMP_(void) SetBufferSize( \
899 IN ULONG BufferSize); \
900 \
901 STDMETHODIMP_(PVOID) SystemAddress(void); \
902 STDMETHODIMP_(PHYSICAL_ADDRESS) PhysicalAddress( \
903 IN PPHYSICAL_ADDRESS PhysicalAddressConstraint OPTIONAL); \
904 STDMETHODIMP_(PADAPTER_OBJECT) GetAdapterObject(void); \
905 \
906 STDMETHODIMP_(void) CopyTo( \
907 IN PVOID Destination, \
908 IN PVOID Source, \
909 IN ULONG ByteCount); \
910 \
911 STDMETHODIMP_(void) CopyFrom( \
912 IN PVOID Destination, \
913 IN PVOID Source, \
914 IN ULONG ByteCount)
915
916 #define IMP_IDmaChannelSlaveEx \
917 IMP_IDmaChannelEx; \
918 STDMETHODIMP_(NTSTATUS) Start( \
919 IN ULONG MapSize, \
920 IN BOOLEAN WriteToDevice); \
921 \
922 STDMETHODIMP_(NTSTATUS) Stop(void); \
923 STDMETHODIMP_(ULONG) ReadCounter(void); \
924 \
925 STDMETHODIMP_(NTSTATUS) WaitForTC( \
926 ULONG Timeout)
927
928 #define IMP_IDmaChannelInit\
929 IMP_IDmaChannelSlaveEx;\
930 STDMETHODIMP_(NTSTATUS) Init( \
931 IN PDEVICE_DESCRIPTION DeviceDescription, \
932 IN PDEVICE_OBJECT DeviceObject)
933
934 #define DEFINE_ABSTRACT_DMACHANNEL_EX() \
935 STDMETHOD_(NTSTATUS, AllocateBuffer)( THIS_ \
936 IN ULONG BufferSize, \
937 IN PPHYSICAL_ADDRESS PhysicalAddressConstraint OPTIONAL) PURE; \
938 \
939 STDMETHOD_(void, FreeBuffer)( THIS ) PURE; \
940 STDMETHOD_(ULONG, TransferCount)( THIS ) PURE; \
941 STDMETHOD_(ULONG, MaximumBufferSize)( THIS ) PURE; \
942 STDMETHOD_(ULONG, AllocatedBufferSize)( THIS ) PURE; \
943 STDMETHOD_(ULONG, BufferSize)( THIS ) PURE; \
944 \
945 STDMETHOD_(void, SetBufferSize)( THIS_ \
946 IN ULONG BufferSize) PURE; \
947 \
948 STDMETHOD_(PVOID, SystemAddress)( THIS ) PURE; \
949 STDMETHOD_(PHYSICAL_ADDRESS, PhysicalAddress)( THIS_ \
950 IN PPHYSICAL_ADDRESS Address) PURE; \
951 STDMETHOD_(PADAPTER_OBJECT, GetAdapterObject)( THIS ) PURE; \
952 \
953 STDMETHOD_(void, CopyTo)( THIS_ \
954 IN PVOID Destination, \
955 IN PVOID Source, \
956 IN ULONG ByteCount) PURE; \
957 \
958 STDMETHOD_(void, CopyFrom)( THIS_ \
959 IN PVOID Destination, \
960 IN PVOID Source, \
961 IN ULONG ByteCount) PURE;
962
963 #undef INTERFACE
964 #define INTERFACE IDmaChannelInit
965
966 DECLARE_INTERFACE_(IDmaChannelInit, IUnknown)
967 {
968 DEFINE_ABSTRACT_UNKNOWN()
969 DEFINE_ABSTRACT_DMACHANNEL_EX()
970 DEFINE_ABSTRACT_DMACHANNELSLAVE()
971
972 STDMETHOD_(NTSTATUS, Init)( THIS_
973 IN PDEVICE_DESCRIPTION DeviceDescription,
974 IN PDEVICE_OBJECT DeviceObject) PURE;
975 };
976
977 #undef INTERFACE
978
979 /*****************************************************************************
980 * IPortFilterTopology
981 *****************************************************************************
982 */
983
984 #undef INTERFACE
985 #define INTERFACE IPortFilterTopology
986
987 DECLARE_INTERFACE_(IPortFilterTopology, IIrpTarget)
988 {
989 DEFINE_ABSTRACT_UNKNOWN()
990
991 DEFINE_ABSTRACT_IRPTARGET()
992
993 STDMETHOD_(NTSTATUS, Init)(THIS_
994 IN PPORTTOPOLOGY Port)PURE;
995 };
996
997 typedef IPortFilterTopology *PPORTFILTERTOPOLOGY;
998
999 #define IMP_IPortFilterTopology \
1000 IMP_IIrpTarget; \
1001 STDMETHODIMP_(NTSTATUS) Init(THIS_ \
1002 IN PPORTTOPOLOGY Port)
1003
1004 #undef INTERFACE
1005
1006 /*****************************************************************************
1007 * IPortWaveRTStreamInit
1008 *****************************************************************************
1009 */
1010
1011 #undef INTERFACE
1012 #define INTERFACE IPortWaveRTStreamInit
1013
1014
1015 DECLARE_INTERFACE_(IPortWaveRTStreamInit, IUnknown)
1016 {
1017 DEFINE_ABSTRACT_UNKNOWN()
1018
1019 STDMETHOD_(PMDL, AllocatePagesForMdl)
1020 ( THIS_
1021 IN PHYSICAL_ADDRESS HighAddress,
1022 IN SIZE_T TotalBytes
1023 ) PURE;
1024
1025 STDMETHOD_(PMDL, AllocateContiguousPagesForMdl)
1026 ( THIS_
1027 IN PHYSICAL_ADDRESS LowAddress,
1028 IN PHYSICAL_ADDRESS HighAddress,
1029 IN SIZE_T TotalBytes
1030 ) PURE;
1031
1032 STDMETHOD_(PVOID, MapAllocatedPages)
1033 ( THIS_
1034 IN PMDL MemoryDescriptorList,
1035 IN MEMORY_CACHING_TYPE CacheType
1036 ) PURE;
1037
1038 STDMETHOD_(VOID, UnmapAllocatedPages)
1039 ( THIS_
1040 IN PVOID BaseAddress,
1041 IN PMDL MemoryDescriptorList
1042 ) PURE;
1043
1044 STDMETHOD_(VOID, FreePagesFromMdl)
1045 ( THIS_
1046 IN PMDL MemoryDescriptorList
1047 ) PURE;
1048
1049 STDMETHOD_(ULONG, GetPhysicalPagesCount)
1050 ( THIS_
1051 IN PMDL MemoryDescriptorList
1052 ) PURE;
1053
1054 STDMETHOD_(PHYSICAL_ADDRESS, GetPhysicalPageAddress)
1055 ( THIS_
1056 IN PPHYSICAL_ADDRESS Address,
1057 IN PMDL MemoryDescriptorList,
1058 IN ULONG Index
1059 ) PURE;
1060 };
1061
1062 #undef INTERFACE
1063
1064 #define IMP_IPortWaveRTStreamInit \
1065 STDMETHODIMP_(PMDL) AllocatePagesForMdl \
1066 ( THIS_ \
1067 IN PHYSICAL_ADDRESS HighAddress, \
1068 IN SIZE_T TotalBytes \
1069 ); \
1070 \
1071 STDMETHODIMP_(PMDL) AllocateContiguousPagesForMdl \
1072 ( THIS_ \
1073 IN PHYSICAL_ADDRESS LowAddress, \
1074 IN PHYSICAL_ADDRESS HighAddress, \
1075 IN SIZE_T TotalBytes \
1076 ); \
1077 \
1078 STDMETHODIMP_(PVOID) MapAllocatedPages \
1079 ( THIS_ \
1080 IN PMDL MemoryDescriptorList, \
1081 IN MEMORY_CACHING_TYPE CacheType \
1082 ); \
1083 \
1084 STDMETHODIMP_(VOID) UnmapAllocatedPages \
1085 ( THIS_ \
1086 IN PVOID BaseAddress, \
1087 IN PMDL MemoryDescriptorList \
1088 ); \
1089 \
1090 STDMETHODIMP_(VOID) FreePagesFromMdl \
1091 ( THIS_ \
1092 IN PMDL MemoryDescriptorList \
1093 ); \
1094 \
1095 STDMETHODIMP_(ULONG) GetPhysicalPagesCount \
1096 ( THIS_ \
1097 IN PMDL MemoryDescriptorList \
1098 ); \
1099 \
1100 STDMETHODIMP_(PHYSICAL_ADDRESS) GetPhysicalPageAddress \
1101 ( THIS_ \
1102 IN PPHYSICAL_ADDRESS Address, \
1103 IN PMDL MemoryDescriptorList, \
1104 IN ULONG Index \
1105 )
1106
1107 #ifndef IMP_IPortClsVersion
1108
1109 #define IMP_IPortClsVersion \
1110 STDMETHODIMP_(DWORD) GetVersion(void);
1111
1112 #endif
1113
1114 #ifdef IMP_IPortWaveRT
1115 #define IMP_IPortWaveRT IMP_IPort
1116 #endif
1117
1118 #endif