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