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