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