[PORTCLS]
[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 typedef IPortPinWaveCyclic *PPORTPINWAVECYCLIC;
801
802 #define IMP_IPortPinWaveCyclic \
803 IMP_IIrpTarget; \
804 STDMETHODIMP_(NTSTATUS) Init(THIS_ \
805 IN PPORTWAVECYCLIC Port, \
806 IN PPORTFILTERWAVECYCLIC Filter, \
807 IN KSPIN_CONNECT * ConnectDetails, \
808 IN KSPIN_DESCRIPTOR * PinDescriptor); \
809 STDMETHODIMP_(ULONG) GetCompletedPosition(THIS); \
810 STDMETHODIMP_(ULONG) GetCycleCount(THIS); \
811 STDMETHODIMP_(ULONG) GetDeviceBufferSize(THIS); \
812 STDMETHODIMP_(PVOID) GetIrpStream(THIS); \
813 STDMETHODIMP_(PMINIPORT) GetMiniport(THIS)
814
815
816 /*****************************************************************************
817 * IPortFilterDMus
818 *****************************************************************************
819 */
820
821 #undef INTERFACE
822 #define INTERFACE IPortFilterDMus
823
824 struct IPortPinDMus;
825
826 DECLARE_INTERFACE_(IPortFilterDMus, IUnknown)
827 {
828 DEFINE_ABSTRACT_UNKNOWN()
829
830 DEFINE_ABSTRACT_IRPTARGET()
831
832 STDMETHOD_(NTSTATUS, Init)(THIS_
833 IN PPORTDMUS Port)PURE;
834
835 STDMETHOD_(NTSTATUS, FreePin)(THIS_
836 IN struct IPortPinDMus* Pin)PURE;
837
838 STDMETHOD_(VOID, NotifyPins)(THIS) PURE;
839 };
840
841 typedef IPortFilterDMus *PPORTFILTERDMUS;
842
843 #define IMP_IPortFilterDMus \
844 IMP_IIrpTarget; \
845 STDMETHODIMP_(NTSTATUS) Init(THIS_ \
846 IN PPORTDMUS Port); \
847 STDMETHODIMP_(NTSTATUS) FreePin(THIS_ \
848 IN struct IPortPinDMus* Pin); \
849 STDMETHODIMP_(VOID) NotifyPins(THIS)
850
851 /*****************************************************************************
852 * IPortPinDMus
853 *****************************************************************************
854 */
855
856 #undef INTERFACE
857 #define INTERFACE IPortPinDMus
858
859 DECLARE_INTERFACE_(IPortPinDMus, IIrpTarget)
860 {
861 DEFINE_ABSTRACT_UNKNOWN()
862
863 DEFINE_ABSTRACT_IRPTARGET()
864
865 STDMETHOD_(NTSTATUS, Init)(THIS_
866 IN PPORTDMUS Port,
867 IN PPORTFILTERDMUS Filter,
868 IN KSPIN_CONNECT * ConnectDetails,
869 IN KSPIN_DESCRIPTOR * PinDescriptor,
870 IN PDEVICE_OBJECT DeviceObject) PURE;
871
872 STDMETHOD_(VOID, Notify)(THIS) PURE;
873 };
874
875 #define IMP_IPortPinDMus \
876 IMP_IIrpTarget; \
877 STDMETHODIMP_(NTSTATUS) Init(THIS_ \
878 IN PPORTDMUS Port, \
879 IN PPORTFILTERDMUS Filter, \
880 IN KSPIN_CONNECT * ConnectDetails, \
881 IN KSPIN_DESCRIPTOR * PinDescriptor, \
882 IN PDEVICE_OBJECT DeviceObject); \
883 STDMETHODIMP_(VOID) Notify(THIS)
884
885 typedef IPortPinDMus *PPORTPINDMUS;
886
887 /*****************************************************************************
888 * IDmaChannelInit
889 *****************************************************************************
890 */
891
892 #define IMP_IDmaChannelEx \
893 STDMETHODIMP_(NTSTATUS) AllocateBuffer( \
894 IN ULONG BufferSize, \
895 IN PPHYSICAL_ADDRESS PhysicalAddressConstraint OPTIONAL); \
896 \
897 STDMETHODIMP_(void) FreeBuffer(void); \
898 STDMETHODIMP_(ULONG) TransferCount(void); \
899 STDMETHODIMP_(ULONG) MaximumBufferSize(void); \
900 STDMETHODIMP_(ULONG) AllocatedBufferSize(void); \
901 STDMETHODIMP_(ULONG) BufferSize(void); \
902 \
903 STDMETHODIMP_(void) SetBufferSize( \
904 IN ULONG BufferSize); \
905 \
906 STDMETHODIMP_(PVOID) SystemAddress(void); \
907 STDMETHODIMP_(PHYSICAL_ADDRESS) PhysicalAddress( \
908 IN PPHYSICAL_ADDRESS PhysicalAddressConstraint OPTIONAL); \
909 STDMETHODIMP_(PADAPTER_OBJECT) GetAdapterObject(void); \
910 \
911 STDMETHODIMP_(void) CopyTo( \
912 IN PVOID Destination, \
913 IN PVOID Source, \
914 IN ULONG ByteCount); \
915 \
916 STDMETHODIMP_(void) CopyFrom( \
917 IN PVOID Destination, \
918 IN PVOID Source, \
919 IN ULONG ByteCount)
920
921 #define IMP_IDmaChannelSlaveEx \
922 IMP_IDmaChannelEx; \
923 STDMETHODIMP_(NTSTATUS) Start( \
924 IN ULONG MapSize, \
925 IN BOOLEAN WriteToDevice); \
926 \
927 STDMETHODIMP_(NTSTATUS) Stop(void); \
928 STDMETHODIMP_(ULONG) ReadCounter(void); \
929 \
930 STDMETHODIMP_(NTSTATUS) WaitForTC( \
931 ULONG Timeout)
932
933 #define IMP_IDmaChannelInit\
934 IMP_IDmaChannelSlaveEx;\
935 STDMETHODIMP_(NTSTATUS) Init( \
936 IN PDEVICE_DESCRIPTION DeviceDescription, \
937 IN PDEVICE_OBJECT DeviceObject)
938
939 #define DEFINE_ABSTRACT_DMACHANNEL_EX() \
940 STDMETHOD_(NTSTATUS, AllocateBuffer)( THIS_ \
941 IN ULONG BufferSize, \
942 IN PPHYSICAL_ADDRESS PhysicalAddressConstraint OPTIONAL) PURE; \
943 \
944 STDMETHOD_(void, FreeBuffer)( THIS ) PURE; \
945 STDMETHOD_(ULONG, TransferCount)( THIS ) PURE; \
946 STDMETHOD_(ULONG, MaximumBufferSize)( THIS ) PURE; \
947 STDMETHOD_(ULONG, AllocatedBufferSize)( THIS ) PURE; \
948 STDMETHOD_(ULONG, BufferSize)( THIS ) PURE; \
949 \
950 STDMETHOD_(void, SetBufferSize)( THIS_ \
951 IN ULONG BufferSize) PURE; \
952 \
953 STDMETHOD_(PVOID, SystemAddress)( THIS ) PURE; \
954 STDMETHOD_(PHYSICAL_ADDRESS, PhysicalAddress)( THIS_ \
955 IN PPHYSICAL_ADDRESS Address) PURE; \
956 STDMETHOD_(PADAPTER_OBJECT, GetAdapterObject)( THIS ) PURE; \
957 \
958 STDMETHOD_(void, CopyTo)( THIS_ \
959 IN PVOID Destination, \
960 IN PVOID Source, \
961 IN ULONG ByteCount) PURE; \
962 \
963 STDMETHOD_(void, CopyFrom)( THIS_ \
964 IN PVOID Destination, \
965 IN PVOID Source, \
966 IN ULONG ByteCount) PURE;
967
968 #undef INTERFACE
969 #define INTERFACE IDmaChannelInit
970
971 DECLARE_INTERFACE_(IDmaChannelInit, IUnknown)
972 {
973 DEFINE_ABSTRACT_UNKNOWN()
974 DEFINE_ABSTRACT_DMACHANNEL_EX()
975 DEFINE_ABSTRACT_DMACHANNELSLAVE()
976
977 STDMETHOD_(NTSTATUS, Init)( THIS_
978 IN PDEVICE_DESCRIPTION DeviceDescription,
979 IN PDEVICE_OBJECT DeviceObject) PURE;
980 };
981
982 #undef INTERFACE
983
984 /*****************************************************************************
985 * IPortFilterTopology
986 *****************************************************************************
987 */
988
989 #undef INTERFACE
990 #define INTERFACE IPortFilterTopology
991
992 DECLARE_INTERFACE_(IPortFilterTopology, IIrpTarget)
993 {
994 DEFINE_ABSTRACT_UNKNOWN()
995
996 DEFINE_ABSTRACT_IRPTARGET()
997
998 STDMETHOD_(NTSTATUS, Init)(THIS_
999 IN PPORTTOPOLOGY Port)PURE;
1000 };
1001
1002 typedef IPortFilterTopology *PPORTFILTERTOPOLOGY;
1003
1004 #define IMP_IPortFilterTopology \
1005 IMP_IIrpTarget; \
1006 STDMETHODIMP_(NTSTATUS) Init(THIS_ \
1007 IN PPORTTOPOLOGY Port)
1008
1009 #undef INTERFACE
1010
1011 /*****************************************************************************
1012 * IPortWaveRTStreamInit
1013 *****************************************************************************
1014 */
1015
1016 #undef INTERFACE
1017 #define INTERFACE IPortWaveRTStreamInit
1018
1019
1020 DECLARE_INTERFACE_(IPortWaveRTStreamInit, IUnknown)
1021 {
1022 DEFINE_ABSTRACT_UNKNOWN()
1023
1024 STDMETHOD_(PMDL, AllocatePagesForMdl)
1025 ( THIS_
1026 IN PHYSICAL_ADDRESS HighAddress,
1027 IN SIZE_T TotalBytes
1028 ) PURE;
1029
1030 STDMETHOD_(PMDL, AllocateContiguousPagesForMdl)
1031 ( THIS_
1032 IN PHYSICAL_ADDRESS LowAddress,
1033 IN PHYSICAL_ADDRESS HighAddress,
1034 IN SIZE_T TotalBytes
1035 ) PURE;
1036
1037 STDMETHOD_(PVOID, MapAllocatedPages)
1038 ( THIS_
1039 IN PMDL MemoryDescriptorList,
1040 IN MEMORY_CACHING_TYPE CacheType
1041 ) PURE;
1042
1043 STDMETHOD_(VOID, UnmapAllocatedPages)
1044 ( THIS_
1045 IN PVOID BaseAddress,
1046 IN PMDL MemoryDescriptorList
1047 ) PURE;
1048
1049 STDMETHOD_(VOID, FreePagesFromMdl)
1050 ( THIS_
1051 IN PMDL MemoryDescriptorList
1052 ) PURE;
1053
1054 STDMETHOD_(ULONG, GetPhysicalPagesCount)
1055 ( THIS_
1056 IN PMDL MemoryDescriptorList
1057 ) PURE;
1058
1059 STDMETHOD_(PHYSICAL_ADDRESS, GetPhysicalPageAddress)
1060 ( THIS_
1061 IN PPHYSICAL_ADDRESS Address,
1062 IN PMDL MemoryDescriptorList,
1063 IN ULONG Index
1064 ) PURE;
1065 };
1066
1067 #undef INTERFACE
1068
1069 #define IMP_IPortWaveRTStreamInit \
1070 STDMETHODIMP_(PMDL) AllocatePagesForMdl \
1071 ( THIS_ \
1072 IN PHYSICAL_ADDRESS HighAddress, \
1073 IN SIZE_T TotalBytes \
1074 ); \
1075 \
1076 STDMETHODIMP_(PMDL) AllocateContiguousPagesForMdl \
1077 ( THIS_ \
1078 IN PHYSICAL_ADDRESS LowAddress, \
1079 IN PHYSICAL_ADDRESS HighAddress, \
1080 IN SIZE_T TotalBytes \
1081 ); \
1082 \
1083 STDMETHODIMP_(PVOID) MapAllocatedPages \
1084 ( THIS_ \
1085 IN PMDL MemoryDescriptorList, \
1086 IN MEMORY_CACHING_TYPE CacheType \
1087 ); \
1088 \
1089 STDMETHODIMP_(VOID) UnmapAllocatedPages \
1090 ( THIS_ \
1091 IN PVOID BaseAddress, \
1092 IN PMDL MemoryDescriptorList \
1093 ); \
1094 \
1095 STDMETHODIMP_(VOID) FreePagesFromMdl \
1096 ( THIS_ \
1097 IN PMDL MemoryDescriptorList \
1098 ); \
1099 \
1100 STDMETHODIMP_(ULONG) GetPhysicalPagesCount \
1101 ( THIS_ \
1102 IN PMDL MemoryDescriptorList \
1103 ); \
1104 \
1105 STDMETHODIMP_(PHYSICAL_ADDRESS) GetPhysicalPageAddress \
1106 ( THIS_ \
1107 IN PPHYSICAL_ADDRESS Address, \
1108 IN PMDL MemoryDescriptorList, \
1109 IN ULONG Index \
1110 )
1111
1112 #ifndef IMP_IPortClsVersion
1113
1114 #define IMP_IPortClsVersion \
1115 STDMETHODIMP_(DWORD) GetVersion(void);
1116
1117 #endif
1118
1119 #ifdef IMP_IPortWaveRT
1120 #define IMP_IPortWaveRT IMP_IPort
1121 #endif
1122
1123 #endif