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