add missing parenthesis
[reactos.git] / reactos / include / ddk / portcls.h
1 /*
2 ReactOS Kernel Streaming
3 Port Class
4
5 Andrew Greenwood
6
7 NOTES:
8 Does not support PC_OLD_NAMES (which is required for backwards-compatibility
9 with older code)
10
11 Obsolete macros are not implemented. For more info:
12 http://www.osronline.com/ddkx/stream/audpc-struct_167n.htm
13
14
15 == EXPORTS ==
16 DRM (new in XP):
17 * PcAddContentHandlers
18 * PcCreateContentMixed
19 * PcDestroyContent
20 * PcForwardContentToDeviceObject
21 * PcForwardContentToFileObject
22 * PcForwardContentToInterface
23 * PcGetContentRights
24
25 IRP HANDLING:
26 * PcCompleteIrp
27 * PcDispatchIrp
28 * PcForwardIrpSynchronous
29
30 ADAPTER:
31 * PcAddAdapterDevice
32 * PcInitializeAdapterDriver
33
34 FACTORIES:
35 * PcNewDmaChannel
36 * PcNewInterruptSync
37 * PcNewMiniport
38 * PcNewPort
39 * PcNewRegistryKey
40 * PcNewResourceList
41 * PcNewResourceSublist
42 * PcNewServiceGroup
43
44 POWER MANAGEMENT:
45 * PcRegisterAdapterPowerManagement
46 * PcRequestNewPowerState
47
48 PROPERTIES:
49 * PcCompletePendingPropertyRequest
50 * PcGetDeviceProperty
51
52 IO TIMEOUTS:
53 * PcRegisterIoTimeout
54 * PcUnregisterIoTimeout
55
56 PHYSICAL CONNECTIONS:
57 * PcRegisterPhysicalConnection
58 * PcRegisterPhysicalConnectionFromExternal
59 * PcRegisterPhysicalConnectionToExternal
60
61 MISC:
62 * PcGetTimeInterval
63 * PcRegisterSubdevice
64
65
66 == AUDIO HELPER OBJECT INTERFACES ==
67 IDmaChannel
68 IDmaChannelSlave
69 IDmaOperations
70 IDrmPort (XP)
71 IDrmPort2 (XP)
72 IInterruptSync
73 IMasterClock
74 IPortClsVersion (XP)
75 IPortEvents
76 IPreFetchOffset (XP)
77 IRegistryKey
78 IResourceList
79 IServiceGroup
80 IServiceSink
81 IUnregisterPhysicalConnection (Vista)
82 IUnregisterSubdevice (Vista)
83
84 == AUDIO PORT OBJECT INTERFACES ==
85 IPort
86 IPortDMus
87 IPortMidi
88 IPortTopology
89 IPortWaveCyclic
90 IPortWavePci
91
92 == AUDIO MINIPORT OBJECT INTERFACES ==
93 IMiniport
94 IMiniportDMus
95 IMiniportMidi
96 IMiniportTopology
97 IMiniportWaveCyclic
98 IMiniportWavePci
99
100 == AUDIO MINIPORT AUXILIARY INTERFACES ==
101 IMusicTechnology (XP)
102 IPinCount (XP)
103
104 == AUDIO STREAM OBJECT INTERFACES ==
105 IAllocatorMXF
106 IDrmAudioStream (XP)
107 IMiniportMidiStream
108 IMiniportWaveCyclicStream
109 IMiniportWavePciStream
110 IMXF
111 IPortWavePciStream
112 ISynthSinkDMus
113
114 == DIRECTMUSIC USERMODE SYNTH AND SYNTH SINK INTERFACES ==
115 IDirectMusicSynth
116 IDirectMusicSynthSink
117
118 == AUDIO POWER MANAGEMENT INTERFACES ==
119 IAdapterPowerManagement
120 IPowerNotify
121 */
122
123 #ifndef PORTCLS_H
124 #define PORTCLS_H
125
126 #include <wdm.h>
127
128 /*#include <windef.h>*/
129 #include <ks.h>
130 #include <drmk.h>
131
132 /* TODO */
133 #define PORTCLASSAPI EXTERN_C
134
135 #define PCFILTER_NODE ((ULONG) -1)
136
137 /* HACK */
138 /* typedef PVOID CM_RESOURCE_TYPE; */
139
140 #define PORT_CLASS_DEVICE_EXTENSION_SIZE ( 64 * sizeof(ULONG_PTR) )
141
142 /* ===============================================================
143 Class IDs - TODO (put these elsewhere!!!)
144 */
145 #if 0
146 //#define CLSID_PortDMus /* dmusicks.h */
147 DEFINE_GUID(CLSID_PortMidi,0xb4c90a43L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
148 #define CLSID_PortTopology
149 #define CLSID_PortWaveCyclic
150 #define CLSID_PortWavePci
151
152 /* first 2 are dmusicks.h */
153 #define CLSID_MiniportDriverDMusUART
154 #define CLSID_MiniportDriverDMusUARTCapture
155 #define CLSID_MiniportDriverFmSynth
156 #define CLSID_MiniportDriverFmSynthWithVol
157 DEFINE_GUID(CLSID_MiniportDriverUart,0xb4c90ae1L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
158 #endif
159
160
161 /* ===============================================================
162 Event Item Flags - TODO
163 */
164 #define PCEVENT_ITEM_FLAG_ENABLE KSEVENT_TYPE_ENABLE
165 #define PCEVENT_ITEM_FLAG_ONESHOT KSEVENT_TYPE_ONESHOT
166 #define PCEVENT_ITEM_FLAG_BASICSUPPORT KSEVENT_TYPE_BASICSUPPORT
167
168
169 /* ===============================================================
170 Event Verbs - TODO
171 */
172 #define PCEVENT_VERB_NONE 0
173 #define PCEVENT_VERB_ADD 1
174 #define PCEVENT_VERB_REMOVE 2
175 #define PCEVENT_VERB_SUPPORT 4
176
177
178 /* ===============================================================
179 Method Item Flags - TODO
180 */
181 #define PCMETHOD_ITEM_FLAG_NONE KSMETHOD_TYPE_NONE
182 #define PCMETHOD_ITEM_FLAG_READ KSMETHOD_TYPE_READ
183 #define PCMETHOD_ITEM_FLAG_WRITE KSMETHOD_TYPE_WRITE
184 #define PCMETHOD_ITEM_FLAG_MODIFY KSMETHOD_TYPE_MODIFY
185 #define PCMETHOD_ITEM_FLAG_SOURCE KSMETHOD_TYPE_SOURCE
186
187
188 /* ===============================================================
189 Method Verbs - TODO
190 */
191 #define PCMETHOD_ITEM_FLAG_BASICSUPPORT KSMETHOD_TYPE_BASICSUPPORT
192 #define PCMETHOD_ITEM_FLAG_SEND
193 #define PCMETHOD_ITEM_FLAG_SETSUPPORT
194
195
196 /* ===============================================================
197 Versions
198 IoIsWdmVersionAvailable may also be used by older drivers.
199 */
200
201 enum
202 {
203 kVersionInvalid = -1,
204
205 kVersionWin98,
206 kVersionWin98SE,
207 kVersionWin2K,
208 kVersionWin98SE_QFE2,
209 kVersionWin2K_SP2,
210 kVersionWinME,
211 kVersionWin98SE_QFE3,
212 kVersionWinME_QFE1,
213 kVersionWinXP,
214 kVersionWinXPSP1,
215 kVersionWinServer2003,
216 kVersionWin2K_UAAQFE, /* These support IUnregister* interface */
217 kVersionWinXP_UAAQFE,
218 kVersionWinServer2003_UAAQFE
219 };
220
221 /* ===============================================================
222 Properties
223 */
224
225 struct _PCPROPERTY_REQUEST;
226
227 typedef NTSTATUS (*PCPFNPROPERTY_HANDLER)(
228 IN struct _PCPROPERTY_REQUEST* PropertyRequest);
229
230 typedef struct _PCPROPERTY_ITEM
231 {
232 const GUID* Set;
233 ULONG Id;
234 ULONG Flags;
235 PCPFNPROPERTY_HANDLER Handler;
236 } PCPROPERTY_ITEM, *PPCPROPERTY_ITEM;
237
238 typedef struct _PCPROPERTY_REQUEST
239 {
240 PUNKNOWN MajorTarget;
241 PUNKNOWN MinorTarget;
242 ULONG Node;
243 const PCPROPERTY_ITEM* PropertyItem;
244 ULONG Verb;
245 ULONG InstanceSize;
246 PVOID Instance;
247 ULONG ValueSize;
248 PVOID Value;
249 PIRP Irp;
250 } PCPROPERTY_REQUEST, *PPCPROPERTY_REQUEST;
251
252 #define PCPROPERTY_ITEM_FLAG_DEFAULTVALUES KSPROPERTY_TYPE_DEFAULTVALUES
253 #define PCPROPERTY_ITEM_FLAG_GET KSPROPERTY_TYPE_GET
254 #define PCPROPERTY_ITEM_FLAG_SET KSPROPERTY_TYPE_SET
255 #define PCPROPERTY_ITEM_FLAG_BASICSUPPORT KSPROPERTY_TYPE_BASICSUPPORT
256 #define PCPROPERTY_ITEM_FLAG_SERIALIZESIZE KSPROPERTY_TYPE_SERIALIZESIZE
257 #define PCPROPERTY_ITEM_FLAG_SERIALIZERAW KSPROPERTY_TYPE_SERIALIZERAW
258 #define PCPROPERTY_ITEM_FLAG_UNSERIALIZERAW KSPROPERTY_TYPE_UNSERIALIZERAW
259 #define PCPROPERTY_ITEM_FLAG_SERIALIZE ( PCPROPERTY_ITEM_FLAG_SERIALIZERAW \
260 | PCPROPERTY_ITEM_FLAG_UNSERIALIZERAW \
261 | PCPROPERTY_ITEM_FLAG_SERIALIZESIZE)
262
263
264 struct _PCEVENT_REQUEST;
265
266 typedef NTSTATUS (*PCPFNEVENT_HANDLER)(
267 IN struct _PCEVENT_REQUEST* EventRequest);
268
269 typedef struct _PCEVENT_ITEM
270 {
271 const GUID* Set;
272 ULONG Id;
273 ULONG Flags;
274 PCPFNEVENT_HANDLER Handler;
275 } PCEVENT_ITEM, *PPCEVENT_ITEM;
276
277 typedef struct _PCEVENT_REQUEST
278 {
279 PUNKNOWN MajorTarget;
280 PUNKNOWN MinorTarget;
281 ULONG Node;
282 const PCEVENT_ITEM* EventItem;
283 PKSEVENT_ENTRY EventEntry;
284 ULONG Verb;
285 PIRP Irp;
286 } PCEVENT_REQUEST, *PPCEVENT_REQUEST;
287
288
289
290 struct _PCMETHOD_REQUEST;
291
292 typedef NTSTATUS (*PCPFNMETHOD_HANDLER)(
293 IN struct _PCMETHOD_REQUEST* MethodRequest);
294
295 typedef struct _PCMETHOD_ITEM
296 {
297 const GUID* Set;
298 ULONG Id;
299 ULONG Flags;
300 PCPFNMETHOD_HANDLER Handler;
301 } PCMETHOD_ITEM, *PPCMETHOD_ITEM;
302
303 typedef struct _PCMETHOD_REQUEST
304 {
305 PUNKNOWN MajorTarget;
306 PUNKNOWN MinorTarget;
307 ULONG Node;
308 const PCMETHOD_ITEM* MethodItem;
309 ULONG Verb;
310 } PCMETHOD_REQUEST, *PPCMETHOD_REQUEST;
311
312
313 /* ===============================================================
314 Structures (unsorted)
315 */
316
317 typedef struct
318 {
319 ULONG PropertyItemSize;
320 ULONG PropertyCount;
321 const PCPROPERTY_ITEM* Properties;
322 ULONG MethodItemSize;
323 ULONG MethodCount;
324 const PCMETHOD_ITEM* Methods;
325 ULONG EventItemSize;
326 ULONG EventCount;
327 const PCEVENT_ITEM* Events;
328 ULONG Reserved;
329 } PCAUTOMATION_TABLE, *PPCAUTOMATION_TABLE;
330
331 typedef struct
332 {
333 ULONG FromNode;
334 ULONG FromNodePin;
335 ULONG ToNode;
336 ULONG ToNodePin;
337 } PCCONNECTION_DESCRIPTOR, *PPCCONNECTIONDESCRIPTOR;
338
339 typedef struct
340 {
341 ULONG MaxGlobalInstanceCount;
342 ULONG MaxFilterInstanceCount;
343 ULONG MinFilterInstanceCount;
344 const PCAUTOMATION_TABLE* AutomationTable;
345 KSPIN_DESCRIPTOR KsPinDescriptor;
346 } PCPIN_DESCRIPTOR, *PPCPIN_DESCRIPTOR;
347
348 typedef struct
349 {
350 ULONG Flags;
351 const PCAUTOMATION_TABLE* AutomationTable;
352 const GUID* Type;
353 const GUID* Name;
354 } PCNODE_DESCRIPTOR, *PPCNODE_DESCRIPTOR;
355
356 typedef struct
357 {
358 ULONG Version;
359 const PCAUTOMATION_TABLE* AutomationTable;
360 ULONG PinSize;
361 ULONG PinCount;
362 const PCPIN_DESCRIPTOR* Pins;
363 ULONG NodeSize;
364 ULONG NodeCount;
365 const PCNODE_DESCRIPTOR* Nodes;
366 ULONG ConnectionCount;
367 const PCCONNECTION_DESCRIPTOR* Connections;
368 ULONG CategoryCount;
369 const GUID* Categories;
370 } PCFILTER_DESCRIPTOR, *PPCFILTER_DESCRIPTOR;
371
372
373 /* ===============================================================
374 IResourceList Interface
375 */
376
377 #undef INTERFACE
378 #define INTERFACE IResourceList
379
380 DECLARE_INTERFACE_(IResourceList, IUnknown)
381 {
382 DEFINE_ABSTRACT_UNKNOWN()
383
384 STDMETHOD_(ULONG, NumberOfEntries)( THIS ) PURE;
385
386 STDMETHOD_(ULONG, NumberOfEntriesOfType)( THIS_
387 IN CM_RESOURCE_TYPE Type) PURE;
388
389 STDMETHOD_(PCM_PARTIAL_RESOURCE_DESCRIPTOR, FindTranslatedEntry)( THIS_
390 IN CM_RESOURCE_TYPE Type,
391 IN ULONG Index) PURE;
392
393 STDMETHOD_(PCM_PARTIAL_RESOURCE_DESCRIPTOR, FindUntranslatedEntry)( THIS_
394 IN CM_RESOURCE_TYPE Type,
395 IN ULONG Index) PURE;
396
397 STDMETHOD_(NTSTATUS, AddEntry)( THIS_
398 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Translated,
399 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Untranslated) PURE;
400
401 STDMETHOD_(NTSTATUS, AddEntryFromParent)( THIS_
402 IN struct IResourceList* Parent,
403 IN CM_RESOURCE_TYPE Type,
404 IN ULONG Index) PURE;
405
406 STDMETHOD_(PCM_RESOURCE_LIST, TranslatedList)( THIS ) PURE;
407 STDMETHOD_(PCM_RESOURCE_LIST, UntranslatedList)( THIS ) PURE;
408 };
409
410 #define IMP_IResourceList \
411 STDMETHODIMP_(ULONG) NumberOfEntries(void); \
412 \
413 STDMETHODIMP_(ULONG) NumberOfEntriesOfType( \
414 IN CM_RESOURCE_TYPE Type); \
415 \
416 STDMETHODIMP_(PCM_PARTIAL_RESOURCE_DESCRIPTOR) FindTranslatedEntry( \
417 IN CM_RESOURCE_TYPE Type, \
418 IN ULONG Index); \
419 \
420 STDMETHODIMP_(PCM_PARTIAL_RESOURCE_DESCRIPTOR) FindUntranslatedEntry( \
421 IN CM_RESOURCE_TYPE Type, \
422 IN ULONG Index); \
423 \
424 STDMETHODIMP_(NTSTATUS) AddEntry( \
425 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Translated, \
426 IN PCM_PARTIAL_RESOURCE_DESCRIPTOR Untranslated); \
427 \
428 STDMETHODIMP_(NTSTATUS) AddEntryFromParent( \
429 IN struct IResourceList* Parent, \
430 IN CM_RESOURCE_TYPE Type, \
431 IN ULONG Index); \
432 \
433 STDMETHODIMP_(PCM_RESOURCE_LIST) TranslatedList(void); \
434 STDMETHODIMP_(PCM_RESOURCE_LIST) UntranslatedList(void);
435
436 typedef IResourceList *PRESOURCELIST;
437
438 #define NumberOfPorts() \
439 NumberOfEntriesOfType(CmResourceTypePort)
440
441 #define FindTranslatedPort(n) \
442 FindTranslatedEntry(CmResourceTypePort, (n))
443
444 #define FindUntranslatedPort(n) \
445 FindUntranslatedEntry(CmResourceTypePort, (n))
446
447 #define AddPortFromParent(p, n) \
448 AddEntryFromParent((p), CmResourceTypePort, (n))
449
450 #define NumberOfInterrupts() \
451 NumberOfEntriesOfType(CmResourceTypeInterrupt)
452
453 #define FindTranslatedInterrupt(n) \
454 FindTranslatedEntry(CmResourceTypeInterrupt, (n))
455
456 #define FindUntranslatedInterrupt(n) \
457 FindUntranslatedEntry(CmResourceTypeInterrupt, (n))
458
459 #define AddInterruptFromParent(p, n) \
460 AddEntryFromParent((p), CmResourceTypeInterrupt, (n))
461
462 #define NumberOfMemories() \
463 NumberOfEntriesOfType(CmResourceTypeMemory)
464
465 #define FindTranslatedMemory(n) \
466 FindTranslatedEntry(CmResourceTypeMemory, (n))
467
468 #define FindUntranslatedMemory(n) \
469 FindUntranslatedEntry(CmResourceTypeMemory, (n))
470
471 #define AddMemoryFromParent(p, n) \
472 AddEntryFromParent((p), CmResourceTypeMemory, (n))
473
474 #define NumberOfDmas() \
475 NumberOfEntriesOfType(CmResourceTypeDma)
476
477 #define FindTranslatedDma(n) \
478 FindTranslatedEntry(CmResourceTypeDma, (n))
479
480 #define FindUntranslatedDma(n) \
481 FindUntranslatedEntry(CmResourceTypeDma, (n))
482
483 #define AddDmaFromParent(p, n) \
484 AddEntryFromParent((p), CmResourceTypeInterrupt, (n))
485
486 #define NumberOfDeviceSpecifics() \
487 NumberOfEntriesOfType(CmResourceTypeDeviceSpecific)
488
489 #define FindTranslatedDeviceSpecific(n) \
490 FindTranslatedEntry(CmResourceTypeDeviceSpecific, (n))
491
492 #define FindUntranslatedDeviceSpecific(n) \
493 FindUntranslatedEntry(CmResourceTypeDeviceSpecific, (n))
494
495 #define AddDeviceSpecificFromParent(p, n) \
496 AddEntryFromParent((p), CmResourceTypeDeviceSpecific, (n))
497
498 #define NumberOfBusNumbers() \
499 NumberOfEntriesOfType(CmResourceTypeBusNumber)
500
501 #define FindTranslatedBusNumber(n) \
502 FindTranslatedEntry(CmResourceTypeBusNumber, (n))
503
504 #define FindUntranslatedBusNumber(n) \
505 FindUntranslatedEntry(CmResourceTypeBusNumber, (n))
506
507 #define AddBusNumberFromParent(p, n) \
508 AddEntryFromParent((p), CmResourceTypeBusNumber, (n))
509
510 #define NumberOfDevicePrivates() \
511 NumberOfEntriesOfType(CmResourceTypeDevicePrivate)
512
513 #define FindTranslatedDevicePrivate(n) \
514 FindTranslatedEntry(CmResourceTypeDevicePrivate, (n))
515
516 #define FindUntranslatedDevicePrivate(n) \
517 FindUntranslatedEntry(CmResourceTypeDevicePrivate, (n))
518
519 #define AddDevicePrivateFromParent(p, n) \
520 AddEntryFromParent((p), CmResourceTypeDevicePrivate, (n))
521
522 #define NumberOfAssignedResources() \
523 NumberOfEntriesOfType(CmResourceTypeAssignedResource)
524
525 #define FindTranslatedAssignedResource(n) \
526 FindTranslatedEntry(CmResourceTypeAssignedResource, (n))
527
528 #define FindUntranslatedAssignedResource(n) \
529 FindUntranslatedEntry(CmResourceTypeAssignedResource, (n))
530
531 #define AddAssignedResourceFromParent(p, n) \
532 AddEntryFromParent((p), CmResourceTypeAssignedResource, (n))
533
534 #define NumberOfSubAllocateFroms() \
535 NumberOfEntriesOfType(CmResourceTypeSubAllocateFrom)
536
537 #define FindTranslatedSubAllocateFrom(n) \
538 FindTranslatedEntry(CmResourceTypeSubAllocateFrom, (n))
539
540 #define FindUntranslatedSubAllocateFrom(n) \
541 FindUntranslatedEntry(CmResourceTypeSubAllocateFrom, (n))
542
543 #define AddSubAllocateFromFromParent(p, n) \
544 AddEntryFromParent((p), CmResourceTypeSubAllocateFrom, (n))
545
546 #undef INTERFACE
547
548
549 /* ===============================================================
550 IServiceSink Interface
551 */
552
553 DECLARE_INTERFACE_(IServiceSink, IUnknown)
554 {
555 DEFINE_ABSTRACT_UNKNOWN()
556 STDMETHOD_(void, RequestService)( THIS ) PURE;
557 };
558
559 #define IMP_IServiceSink \
560 STDMETHODIMP_(void) RequestService(void);
561
562 typedef IServiceSink *PSERVICESINK;
563
564
565 /* ===============================================================
566 IServiceGroup Interface
567 */
568
569 DECLARE_INTERFACE_(IServiceGroup, IUnknown)
570 {
571 DEFINE_ABSTRACT_UNKNOWN()
572
573 STDMETHOD_(void, RequestService)( THIS ) PURE; /* IServiceSink */
574
575 STDMETHOD_(NTSTATUS, AddMember)( THIS_
576 IN PSERVICESINK pServiceSink) PURE;
577
578 STDMETHOD_(void, RemoveMember)( THIS_
579 IN PSERVICESINK pServiceSink) PURE;
580
581 STDMETHOD_(void, SupportDelayedService)( THIS ) PURE;
582
583 STDMETHOD_(void, RequestDelayedService)( THIS_
584 IN ULONGLONG ullDelay) PURE;
585
586 STDMETHOD_(void, CancelDelayedService)( THIS ) PURE;
587 };
588
589 #define IMP_IServiceGroup \
590 IMP_IServiceSink; \
591 \
592 STDMETHODIMP_(NTSTATUS) AddMember( \
593 IN PSERVICESINK pServiceSink); \
594 \
595 STDMETHODIMP_(void) RemoveMember( \
596 IN PSERVICESINK pServiceSink); \
597 \
598 STDMETHODIMP_(void) SupportDelayedService(void); \
599 \
600 STDMETHODIMP_(void) RequestDelayedService( \
601 IN ULONGLONG ullDelay); \
602 \
603 STDMETHODIMP_(void) CancelDelayedService(void);
604
605 typedef IServiceGroup *PSERVICEGROUP;
606
607
608 /* ===============================================================
609 IDmaChannel Interface
610 */
611
612 #define DEFINE_ABSTRACT_DMACHANNEL() \
613 STDMETHOD_(NTSTATUS, AllocateBuffer)( THIS_ \
614 IN ULONG BufferSize, \
615 IN PPHYSICAL_ADDRESS PhysicalAddressConstraint OPTIONAL) PURE; \
616 \
617 STDMETHOD_(void, FreeBuffer)( THIS ) PURE; \
618 STDMETHOD_(ULONG, TransferCount)( THIS ) PURE; \
619 STDMETHOD_(ULONG, MaximumBufferSize)( THIS ) PURE; \
620 STDMETHOD_(ULONG, AllocatedBufferSize)( THIS ) PURE; \
621 STDMETHOD_(ULONG, BufferSize)( THIS ) PURE; \
622 \
623 STDMETHOD_(void, SetBufferSize)( THIS_ \
624 IN ULONG BufferSize) PURE; \
625 \
626 STDMETHOD_(PVOID, SystemAddress)( THIS ) PURE; \
627 STDMETHOD_(PHYSICAL_ADDRESS, PhysicalAddress)( THIS ) PURE; \
628 STDMETHOD_(PADAPTER_OBJECT, GetAdapterObject)( THIS ) PURE; \
629 \
630 STDMETHOD_(void, CopyTo)( THIS_ \
631 IN PVOID Destination, \
632 IN PVOID Source, \
633 IN ULONG ByteCount) PURE; \
634 \
635 STDMETHOD_(void, CopyFrom)( THIS_ \
636 IN PVOID Destination, \
637 IN PVOID Source, \
638 IN ULONG ByteCount) PURE;
639
640 #define IMP_IDmaChannel() \
641 STDMETHODIMP_(NTSTATUS) AllocateBuffer( \
642 IN ULONG BufferSize, \
643 IN PPHYSICAL_ADDRESS PhysicalAddressConstraint OPTIONAL); \
644 \
645 STDMETHODIMP_(void) FreeBuffer(void); \
646 STDMETHODIMP_(ULONG) TransferCount(void); \
647 STDMETHODIMP_(ULONG) MaximumBufferSize(void); \
648 STDMETHODIMP_(ULONG) AllocatedBufferSize(void); \
649 STDMETHODIMP_(ULONG) BufferSize(void); \
650 \
651 STDMETHODIMP_(void) SetBufferSize)( \
652 IN ULONG BufferSize); \
653 \
654 STDMETHODIMP_(PVOID) SystemAddress(void); \
655 STDMETHODIMP_(PHYSICAL_ADDRESS) PhysicalAddress(void); \
656 STDMETHODIMP_(PADAPTER_OBJECT) GetAdapterObject(void); \
657 \
658 STDMETHODIMP_(void) CopyTo( \
659 IN PVOID Destination, \
660 IN PVOID Source, \
661 IN ULONG ByteCount); \
662 \
663 STDMETHODIMP_(void) CopyFrom( \
664 IN PVOID Destination, \
665 IN PVOID Source, \
666 IN ULONG ByteCount);
667
668 DECLARE_INTERFACE_(IDmaChannel, IUnknown)
669 {
670 DEFINE_ABSTRACT_UNKNOWN()
671 DEFINE_ABSTRACT_DMACHANNEL()
672 };
673
674 typedef IDmaChannel *PDMACHANNEL;
675
676
677 /* ===============================================================
678 IDmaChannelSlave Interface
679 */
680
681 #define DEFINE_ABSTRACT_DMACHANNELSLAVE() \
682 STDMETHOD_(NTSTATUS, Start)( THIS_ \
683 IN ULONG MapSize, \
684 IN BOOLEAN WriteToDevice) PURE; \
685 \
686 STDMETHOD_(NTSTATUS, Stop)( THIS ) PURE; \
687 STDMETHOD_(NTSTATUS, ReadCounter)( THIS ) PURE; \
688 \
689 STDMETHOD_(NTSTATUS, WaitForTC)( THIS_ \
690 ULONG Timeout) PURE;
691
692 #define IMP_IDmaChannelSlave \
693 STDMETHODIMP_(NTSTATUS) Start( \
694 IN ULONG MapSize, \
695 IN BOOLEAN WriteToDevice); \
696 \
697 STDMETHODIMP_(NTSTATUS) Stop(void); \
698 STDMETHODIMP_(NTSTATUS) ReadCounter)(void); \
699 \
700 STDMETHODIMP_(NTSTATUS, WaitForTC)( \
701 ULONG Timeout);
702
703 DECLARE_INTERFACE_(IDmaChannelSlave, IDmaChannel)
704 {
705 DEFINE_ABSTRACT_UNKNOWN()
706 DEFINE_ABSTRACT_DMACHANNEL()
707 DEFINE_ABSTRACT_DMACHANNELSLAVE()
708 };
709
710 typedef IDmaChannelSlave *PDMACHANNELSLAVE;
711
712
713 /* ===============================================================
714 IInterruptSync Interface
715 */
716
717 typedef enum
718 {
719 InterruptSyncModeNormal = 1,
720 InterruptSyncModeAll,
721 InterruptSyncModeRepeat
722 } INTERRUPTSYNCMODE;
723
724 struct IInterruptSync;
725
726 typedef NTSTATUS (*PINTERRUPTSYNCROUTINE)(
727 IN struct IInterruptSync* InterruptSync,
728 IN PVOID DynamicContext);
729
730 DECLARE_INTERFACE_(IInterruptSync, IUnknown)
731 {
732 DEFINE_ABSTRACT_UNKNOWN()
733
734 STDMETHOD_(NTSTATUS, CallSynchronizedRoutine)( THIS_
735 IN PINTERRUPTSYNCROUTINE Routine,
736 IN PVOID DynamicContext) PURE;
737
738 STDMETHOD_(PKINTERRUPT, GetKInterrupt)( THIS ) PURE;
739 STDMETHOD_(NTSTATUS, Connect)( THIS ) PURE;
740 STDMETHOD_(void, Disconnect)( THIS ) PURE;
741
742 STDMETHOD_(NTSTATUS, RegisterServiceRoutine)( THIS_
743 IN PINTERRUPTSYNCROUTINE Routine,
744 IN PVOID DynamicContext,
745 IN BOOLEAN First) PURE;
746 };
747
748 #define IMP_IInterruptSync \
749 STDMETHODIMP_(NTSTATUS, CallSynchronizedRoutine)( \
750 IN PINTERRUPTSYNCROUTINE Routine, \
751 IN PVOID DynamicContext); \
752 \
753 STDMETHODIMP_(PKINTERRUPT, GetKInterrupt)(void); \
754 STDMETHODIMP_(NTSTATUS, Connect)(void); \
755 STDMETHODIMP_(void, Disconnect)(void); \
756 \
757 STDMETHODIMP_(NTSTATUS, RegisterServiceRoutine)( \
758 IN PINTERRUPTSYNCROUTINE Routine, \
759 IN PVOID DynamicContext, \
760 IN BOOLEAN First);
761
762 typedef IInterruptSync *PINTERRUPTSYNC;
763
764
765 /* ===============================================================
766 IRegistryKey Interface
767 */
768
769 DECLARE_INTERFACE_(IRegistryKey, IUnknown)
770 {
771 DEFINE_ABSTRACT_UNKNOWN()
772
773 STDMETHOD_(NTSTATUS, QueryKey)( THIS_
774 IN KEY_INFORMATION_CLASS KeyInformationClass,
775 OUT PVOID KeyInformation,
776 IN ULONG Length,
777 OUT PULONG ResultLength) PURE;
778
779 STDMETHOD_(NTSTATUS, EnumerateKey)( THIS_
780 IN ULONG Index,
781 IN KEY_INFORMATION_CLASS KeyInformationClass,
782 OUT PVOID KeyInformation,
783 IN ULONG Length,
784 OUT PULONG ResultLength) PURE;
785
786 STDMETHOD_(NTSTATUS, QueryValueKey)( THIS_
787 IN PUNICODE_STRING ValueName,
788 IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass,
789 OUT PVOID KeyValueInformation,
790 IN ULONG Length,
791 OUT PULONG ResultLength) PURE;
792
793 STDMETHOD_(NTSTATUS, EnumerateValueKey)( THIS_
794 IN ULONG Index,
795 IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass,
796 OUT PVOID KeyValueInformation,
797 IN ULONG Length,
798 OUT PULONG ResultLength) PURE;
799
800 STDMETHOD_(NTSTATUS, SetValueKey)( THIS_
801 IN PUNICODE_STRING ValueName OPTIONAL,
802 IN ULONG Type,
803 IN PVOID Data,
804 IN ULONG DataSize) PURE;
805
806 STDMETHOD_(NTSTATUS, QueryRegistryValues)( THIS_
807 IN PRTL_QUERY_REGISTRY_TABLE QueryTable,
808 IN PVOID Context OPTIONAL) PURE;
809
810 STDMETHOD_(NTSTATUS, NewSubKey)( THIS_
811 OUT IRegistryKey** RegistrySubKey,
812 IN PUNKNOWN OuterUnknown,
813 IN ACCESS_MASK DesiredAccess,
814 IN PUNICODE_STRING SubKeyName,
815 IN ULONG CreateOptions,
816 OUT PULONG Disposition OPTIONAL) PURE;
817
818 STDMETHOD_(NTSTATUS, DeleteKey)( THIS ) PURE;
819 };
820
821 #define IMP_IRegistryKey \
822 STDMETHODIMP_(NTSTATUS) QueryKey( \
823 IN KEY_INFORMATION_CLASS KeyInformationClass, \
824 OUT PVOID KeyInformation, \
825 IN ULONG Length, \
826 OUT PULONG ResultLength); \
827 \
828 STDMETHODIMP_(NTSTATUS) EnumerateKey( \
829 IN ULONG Index, \
830 IN KEY_INFORMATION_CLASS KeyInformationClass, \
831 OUT PVOID KeyInformation, \
832 IN ULONG Length, \
833 OUT PULONG ResultLength); \
834 \
835 STDMETHODIMP_(NTSTATUS) QueryValueKey( \
836 IN PUNICODE_STRING ValueName, \
837 IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass, \
838 OUT PVOID KeyValueInformation, \
839 IN ULONG Length, \
840 OUT PULONG ResultLength); \
841 \
842 STDMETHODIMP_(NTSTATUS) EnumerateValueKey( \
843 IN ULONG Index, \
844 IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass, \
845 OUT PVOID KeyValueInformation, \
846 IN ULONG Length, \
847 OUT PULONG ResultLength); \
848 \
849 STDMETHODIMP_(NTSTATUS) SetValueKey( \
850 IN PUNICODE_STRING ValueName OPTIONAL, \
851 IN ULONG Type, \
852 IN PVOID Data, \
853 IN ULONG DataSize); \
854 \
855 STDMETHODIMP_(NTSTATUS) QueryRegistryValues( \
856 IN PRTL_QUERY_REGISTRY_TABLE QueryTable, \
857 IN PVOID Context OPTIONAL); \
858 \
859 STDMETHODIMP_(NTSTATUS) NewSubKey( \
860 OUT IRegistryKey** RegistrySubKey, \
861 IN PUNKNOWN OuterUnknown, \
862 IN ACCESS_MASK DesiredAccess, \
863 IN PUNICODE_STRING SubKeyName, \
864 IN ULONG CreateOptions, \
865 OUT PULONG Disposition OPTIONAL); \
866 \
867 STDMETHODIMP_(NTSTATUS) DeleteKey(void);
868
869 typedef IRegistryKey *PREGISTRYKEY;
870
871
872 /* ===============================================================
873 IMusicTechnology Interface
874 */
875
876 DECLARE_INTERFACE_(IMusicTechnology, IUnknown)
877 {
878 DEFINE_ABSTRACT_UNKNOWN()
879
880 STDMETHOD_(NTSTATUS, SetTechnology)( THIS_
881 IN const GUID* Technology) PURE;
882 };
883
884 #define IMP_IMusicTechnology \
885 STDMETHODIMP_(NTSTATUS) SetTechnology( \
886 IN const GUID* Technology);
887
888 typedef IMusicTechnology *PMUSICTECHNOLOGY;
889
890
891 /* ===============================================================
892 IPort Interface
893 */
894
895 DEFINE_GUID(IID_IPort,
896 0xb4c90a25L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
897
898 #define DEFINE_ABSTRACT_PORT() \
899 STDMETHOD_(NTSTATUS, Init)( THIS_ \
900 IN PDEVICE_OBJECT DeviceObject, \
901 IN PIRP Irp, \
902 IN PUNKNOWN UnknownMiniport, \
903 IN PUNKNOWN UnknownAdapter OPTIONAL, \
904 IN PRESOURCELIST ResourceList) PURE; \
905 \
906 STDMETHOD_(NTSTATUS, GetDeviceProperty)( THIS_ \
907 IN DEVICE_REGISTRY_PROPERTY DeviceProperty, \
908 IN ULONG BufferLength, \
909 OUT PVOID PropertyBuffer, \
910 OUT PULONG ResultLength) PURE; \
911 \
912 STDMETHOD_(NTSTATUS, NewRegistryKey)( THIS_ \
913 OUT PREGISTRYKEY* OutRegistryKey, \
914 IN PUNKNOWN OuterUnknown OPTIONAL, \
915 IN ULONG RegistryKeyType, \
916 IN ACCESS_MASK DesiredAccess, \
917 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, \
918 IN ULONG CreateOptiona OPTIONAL, \
919 OUT PULONG Disposition OPTIONAL) PURE;
920
921 #define IMP_IPort() \
922 STDMETHODIMP_(NTSTATUS) Init( \
923 IN PDEVICE_OBJECT DeviceObject, \
924 IN PIRP Irp, \
925 IN PUNKNOWN UnknownMiniport, \
926 IN PUNKNOWN UnknownAdapter OPTIONAL, \
927 IN PRESOURCELIST ResourceList); \
928 \
929 STDMETHODIMP_(NTSTATUS) GetDeviceProperty( \
930 IN DEVICE_REGISTRY_PROPERTY DeviceProperty, \
931 IN ULONG BufferLength, \
932 OUT PVOID PropertyBuffer, \
933 OUT PULONG ResultLength); \
934 \
935 STDMETHODIMP_(NTSTATUS) NewRegistryKey( \
936 OUT PREGISTRYKEY* OutRegistryKey, \
937 IN PUNKNOWN OuterUnknown OPTIONAL, \
938 IN ULONG RegistryKeyType, \
939 IN ACCESS_MASK DesiredAccess, \
940 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, \
941 IN ULONG CreateOptiona OPTIONAL, \
942 OUT PULONG Disposition OPTIONAL);
943
944 DECLARE_INTERFACE_(IPort, IUnknown)
945 {
946 DEFINE_ABSTRACT_UNKNOWN()
947 DEFINE_ABSTRACT_PORT()
948 };
949
950 typedef IPort *PPORT;
951
952
953 /* ===============================================================
954 IPortMidi Interface
955 */
956
957 DEFINE_GUID(CLSID_PortMidi,
958 0xb4c90a43L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
959
960 DECLARE_INTERFACE_(IPortMidi, IPort)
961 {
962 DEFINE_ABSTRACT_UNKNOWN()
963 DEFINE_ABSTRACT_PORT()
964
965 STDMETHOD_(VOID, Notify)(THIS_
966 IN PSERVICEGROUP ServiceGroup OPTIONAL) PURE;
967
968 STDMETHOD_(NTSTATUS, RegisterServiceGroup)(THIS_
969 IN PSERVICEGROUP ServiceGroup) PURE;
970 };
971
972 typedef IPortMidi *PPORTMIDI;
973
974 #define IMP_IPortMidi() \
975 STDMETHODIMP_(VOID) Notify( \
976 IN PSERVICEGROUP ServiceGroup OPTIONAL); \
977 \
978 STDMETHODIMP_(NTSTATUS) RegisterServiceGroup( \
979 IN PSERVICEGROUP ServiceGroup);
980
981
982
983 /* ===============================================================
984 IPortWaveCyclic Interface
985 */
986
987 DECLARE_INTERFACE_(IPortWaveCyclic, IPort)
988 {
989 DEFINE_ABSTRACT_UNKNOWN()
990 DEFINE_ABSTRACT_PORT()
991
992 STDMETHOD_(NTSTATUS, NewMasterDmaChannel)(THIS_
993 OUT PDMACHANNEL* DmaChannel,
994 IN PUNKNOWN OuterUnknown,
995 IN PRESOURCELIST ResourceList OPTIONAL,
996 IN ULONG MaximumLength,
997 IN BOOL Dma32BitAddresses,
998 IN BOOL Dma64BitAddresses,
999 IN DMA_WIDTH DmaWidth,
1000 IN DMA_SPEED DmaSpeed) PURE;
1001
1002 STDMETHOD_(NTSTATUS, NewSlaveDmaChannel)(THIS_
1003 OUT PDMACHANNELSLAVE* DmaChannel,
1004 IN PUNKNOWN OuterUnknown,
1005 IN PRESOURCELIST ResourceList OPTIONAL,
1006 IN ULONG DmaIndex,
1007 IN ULONG MaximumLength,
1008 IN BOOL DemandMode,
1009 IN DMA_SPEED DmaSpeed) PURE;
1010
1011 STDMETHOD_(VOID, Notify)(THIS_
1012 IN PSERVICEGROUP ServiceGroup) PURE;
1013 };
1014
1015 /* TODO ... */
1016
1017
1018 /* ===============================================================
1019 IPortWavePci Interface
1020 */
1021
1022 DECLARE_INTERFACE_(IPortWavePci, IPort)
1023 {
1024 DEFINE_ABSTRACT_UNKNOWN()
1025 DEFINE_ABSTRACT_PORT()
1026
1027 STDMETHOD_(NTSTATUS, NewMasterDmaChannel)(THIS_
1028 OUT PDMACHANNEL* DmaChannel,
1029 IN PUNKNOWN OuterUnknown,
1030 IN POOL_TYPE PoolType,
1031 IN PRESOURCELIST ResourceList OPTIONAL,
1032 IN BOOL ScatterGather,
1033 IN BOOL Dma32BitAddresses,
1034 IN BOOL Dma64BitAddresses,
1035 IN DMA_WIDTH DmaWidth,
1036 IN DMA_SPEED DmaSpeed,
1037 IN ULONG MaximumLength,
1038 IN ULONG DmaPort) PURE;
1039
1040 STDMETHOD_(VOID, Notify)(THIS_
1041 IN PSERVICEGROUP ServiceGroup) PURE;
1042 };
1043
1044 /* TODO ... */
1045
1046
1047 /* ===============================================================
1048 IPortWavePciStream Interface
1049 */
1050
1051
1052 /* ===============================================================
1053 IMiniPort Interface
1054 */
1055
1056 DEFINE_GUID(IID_IMiniPort,
1057 0xb4c90a24L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1058
1059 #define DEFINE_ABSTRACT_MINIPORT() \
1060 STDMETHOD_(NTSTATUS, GetDescription)( THIS_ \
1061 OUT PPCFILTER_DESCRIPTOR* Description) PURE; \
1062 \
1063 STDMETHOD_(NTSTATUS, DataRangeIntersection)( THIS_ \
1064 IN ULONG PinId, \
1065 IN PKSDATARANGE DataRange, \
1066 IN PKSDATARANGE MatchingDataRange, \
1067 IN ULONG OutputBufferLength, \
1068 OUT PVOID ResultantFormat OPTIONAL, \
1069 OUT PULONG ResultantFormatLength) PURE;
1070
1071 #define IMP_IMiniport \
1072 STDMETHODIMP_(NTSTATUS) GetDescription( \
1073 OUT PPCFILTER_DESCRIPTOR* Description); \
1074 \
1075 STDMETHODIMP_(NTSTATUS) DataRangeIntersection( \
1076 IN ULONG PinId, \
1077 IN PKSDATARANGE DataRange, \
1078 IN PKSDATARANGE MatchingDataRange, \
1079 IN ULONG OutputBufferLength, \
1080 OUT PVOID ResultantFormat OPTIONAL, \
1081 OUT PULONG ResultantFormatLength);
1082
1083 DECLARE_INTERFACE_(IMiniport, IUnknown)
1084 {
1085 DEFINE_ABSTRACT_UNKNOWN()
1086 DEFINE_ABSTRACT_MINIPORT()
1087 };
1088
1089 typedef IMiniport *PMINIPORT;
1090
1091
1092 /* ===============================================================
1093 IMiniportMidiStream Interface
1094 */
1095
1096 DECLARE_INTERFACE_(IMiniportMidiStream, IUnknown)
1097 {
1098 /* TODO - Read, SetFormat, SetState, Write */
1099 };
1100
1101 typedef IMiniportMidiStream* PMINIPORTMIDISTREAM;
1102
1103
1104 /* ===============================================================
1105 IMiniportMidi Interface
1106 */
1107
1108 DECLARE_INTERFACE_(IMiniportMidi, IMiniport)
1109 {
1110 STDMETHOD_(NTSTATUS, Init)(THIS_
1111 IN PUNKNOWN UnknownAdapter,
1112 IN PRESOURCELIST ResourceList,
1113 IN PPORTMIDI Port,
1114 OUT PSERVICEGROUP* ServiceGroup) PURE;
1115
1116 STDMETHOD_(NTSTATUS, NewStream)(THIS_
1117 OUT PMINIPORTMIDISTREAM Stream,
1118 IN PUNKNOWN OuterUnknown OPTIONAL,
1119 IN POOL_TYPE PoolType,
1120 IN ULONG Pin,
1121 IN BOOLEAN Capture,
1122 IN PKSDATAFORMAT DataFormat,
1123 OUT PSERVICEGROUP* ServiceGroup) PURE;
1124
1125 STDMETHOD_(void, Service)(THIS) PURE;
1126 };
1127
1128 /* TODO ... */
1129
1130
1131 /* ===============================================================
1132 IMiniportDriverUart Interface
1133 */
1134
1135 DEFINE_GUID(CLSID_MiniportDriverUart,
1136 0xb4c90ae1L, 0x5791, 0x11d0, 0x86, 0xf9, 0x00, 0xa0, 0xc9, 0x11, 0xb5, 0x44);
1137
1138 /* ===============================================================
1139 IPortTopology Interface
1140 */
1141
1142 DECLARE_INTERFACE_(IPortTopology, IPort)
1143 {
1144 DEFINE_ABSTRACT_UNKNOWN()
1145 DEFINE_ABSTRACT_PORT()
1146 };
1147
1148 typedef IPortTopology *PPORTTOPOLOGY;
1149
1150 #define IMP_IPortTopology IMP_IPort
1151
1152 /* ===============================================================
1153 IMiniportTopology Interface
1154 */
1155
1156 /* ===============================================================
1157 IMiniportWaveCyclicStream Interface
1158 */
1159
1160 /* ===============================================================
1161 IMiniportWaveCyclic Interface
1162 */
1163
1164 /* ===============================================================
1165 IMiniportWavePciStream Interface
1166 */
1167
1168 /* ===============================================================
1169 IMiniportWavePci Interface
1170 */
1171
1172 /* ===============================================================
1173 IAdapterPowerManagement Interface
1174 */
1175
1176 DECLARE_INTERFACE_(IAdapterPowerManagement, IUnknown)
1177 {
1178 };
1179
1180 #define IMP_IAdapterPowerManagement
1181
1182 /* ===============================================================
1183 IPowerNotify Interface
1184 */
1185
1186 /* ===============================================================
1187 IPinCount Interface
1188 */
1189
1190 /* ===============================================================
1191 IPortEvents Interface
1192 */
1193
1194 DECLARE_INTERFACE_(IPortEvents, IUnknown)
1195 {
1196 DEFINE_ABSTRACT_UNKNOWN()
1197 /* TODO */
1198 };
1199
1200 typedef IPortEvents *PPORTEVENTS;
1201
1202
1203 /* ===============================================================
1204 IDrmPort / IDrmPort2 Interfaces
1205 These are almost identical, except for the addition of two extra methods.
1206 */
1207
1208 #define DEFINE_ABSTRACT_DRMPORT()
1209 /* TODO */
1210
1211 DECLARE_INTERFACE_(IDrmPort, IUnknown)
1212 {
1213 DEFINE_ABSTRACT_UNKNOWN()
1214 DEFINE_ABSTRACT_DRMPORT()
1215 };
1216
1217 typedef IDrmPort *PDRMPORT;
1218
1219 /* TODO */
1220
1221
1222 /* ===============================================================
1223 IPortClsVersion Interface
1224 */
1225
1226 DECLARE_INTERFACE_(IPortClsVersion, IUnknown)
1227 {
1228 STDMETHOD_(DWORD, GetVersion)(THIS) PURE;
1229 };
1230
1231 #define IMP_IPortClsVersion \
1232 STDMETHODIMP_(DWORD) GetVersion(void);
1233
1234 typedef IPortClsVersion *PPORTCLSVERSION;
1235
1236
1237 /* ===============================================================
1238 IDmaOperations Interface
1239 */
1240
1241 /* ===============================================================
1242 IPreFetchOffset Interface
1243 */
1244
1245
1246
1247 /* ===============================================================
1248 PortCls API Functions
1249 */
1250
1251 typedef NTSTATUS (*PCPFNSTARTDEVICE)(
1252 IN PDEVICE_OBJECT DeviceObject,
1253 IN PIRP Irp,
1254 IN PRESOURCELIST ResourceList);
1255
1256 /* This is in NTDDK.H */
1257 /*
1258 typedef NTSTATUS (*PDRIVER_ADD_DEVICE)(
1259 IN struct _DRIVER_OBJECT* DriverObject,
1260 IN struct _DEVICE_OBJECT* PhysicalDeviceObject);
1261 */
1262
1263 PORTCLASSAPI NTSTATUS NTAPI
1264 PcAddAdapterDevice(
1265 IN PDRIVER_OBJECT DriverObject,
1266 IN PDEVICE_OBJECT PhysicalDeviceObject,
1267 IN PCPFNSTARTDEVICE StartDevice,
1268 IN ULONG MaxObjects,
1269 IN ULONG DeviceExtensionSize);
1270
1271 PORTCLASSAPI NTSTATUS NTAPI
1272 PcInitializeAdapterDriver(
1273 IN PDRIVER_OBJECT DriverObject,
1274 IN PUNICODE_STRING RegistryPathName,
1275 IN PDRIVER_ADD_DEVICE AddDevice);
1276
1277
1278 /* ===============================================================
1279 Factories (TODO: Move elsewhere)
1280 */
1281
1282 PORTCLASSAPI NTSTATUS NTAPI
1283 PcNewDmaChannel(
1284 OUT PDMACHANNEL* OutDmaChannel,
1285 IN PUNKNOWN OuterUnknown OPTIONAL,
1286 IN POOL_TYPE PoolType,
1287 IN PDEVICE_DESCRIPTION DeviceDescription,
1288 IN PDEVICE_OBJECT DeviceObject);
1289
1290 PORTCLASSAPI NTSTATUS NTAPI
1291 PcNewInterruptSync(
1292 OUT PINTERRUPTSYNC* OUtInterruptSync,
1293 IN PUNKNOWN OuterUnknown OPTIONAL,
1294 IN PRESOURCELIST ResourceList,
1295 IN ULONG ResourceIndex,
1296 IN INTERRUPTSYNCMODE Mode);
1297
1298 PORTCLASSAPI NTSTATUS NTAPI
1299 PcNewMiniport(
1300 OUT PMINIPORT* OutMiniport,
1301 IN REFCLSID ClassId);
1302
1303 PORTCLASSAPI NTSTATUS NTAPI
1304 PcNewPort(
1305 OUT PPORT* OutPort,
1306 IN REFCLSID ClassId);
1307
1308 PORTCLASSAPI NTSTATUS NTAPI
1309 PcNewRegistryKey(
1310 OUT PREGISTRYKEY* OutRegistryKey,
1311 IN PUNKNOWN OuterUnknown OPTIONAL,
1312 IN ULONG RegistryKeyType,
1313 IN ACCESS_MASK DesiredAccess,
1314 IN PVOID DeviceObject OPTIONAL,
1315 IN PVOID SubDevice OPTIONAL,
1316 IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
1317 IN ULONG CreateOptions OPTIONAL,
1318 OUT PULONG Disposition OPTIONAL);
1319
1320 PORTCLASSAPI NTSTATUS NTAPI
1321 PcNewResourceList(
1322 OUT PRESOURCELIST* OutResourceList,
1323 IN PUNKNOWN OuterUnknown OPTIONAL,
1324 IN POOL_TYPE PoolType,
1325 IN PCM_RESOURCE_LIST TranslatedResources,
1326 IN PCM_RESOURCE_LIST UntranslatedResources);
1327
1328 PORTCLASSAPI NTSTATUS NTAPI
1329 PcNewResourceSublist(
1330 OUT PRESOURCELIST* OutResourceList,
1331 IN PUNKNOWN OuterUnknown OPTIONAL,
1332 IN POOL_TYPE PoolType,
1333 IN PRESOURCELIST ParentList,
1334 IN ULONG MaximumEntries);
1335
1336 PORTCLASSAPI NTSTATUS NTAPI
1337 PcNewServiceGroup(
1338 OUT PSERVICEGROUP* OutServiceGroup,
1339 IN PUNKNOWN OuterUnknown OPTIONAL);
1340
1341
1342 /* ===============================================================
1343 IRP Handling
1344 */
1345
1346 PORTCLASSAPI NTSTATUS NTAPI
1347 PcDispatchIrp(
1348 IN PDEVICE_OBJECT DeviceObject,
1349 IN PIRP Irp);
1350
1351 PORTCLASSAPI NTSTATUS NTAPI
1352 PcCompleteIrp(
1353 IN PDEVICE_OBJECT DeviceObject,
1354 IN PIRP Irp,
1355 IN NTSTATUS Status);
1356
1357 PORTCLASSAPI NTSTATUS NTAPI
1358 PcForwardIrpSynchronous(
1359 IN PDEVICE_OBJECT DeviceObject,
1360 IN PIRP Irp);
1361
1362
1363 /* ===============================================================
1364 Power Management
1365 */
1366
1367 PORTCLASSAPI NTSTATUS NTAPI
1368 PcRegisterAdapterPowerManagement(
1369 IN PUNKNOWN pUnknown,
1370 IN PVOID pvContext1);
1371
1372 PORTCLASSAPI NTSTATUS NTAPI
1373 PcRequestNewPowerState(
1374 IN PDEVICE_OBJECT pDeviceObject,
1375 IN DEVICE_POWER_STATE RequestedNewState);
1376
1377
1378 /* ===============================================================
1379 Properties
1380 */
1381
1382 PORTCLASSAPI NTSTATUS NTAPI
1383 PcGetDeviceProperty(
1384 IN PVOID DeviceObject,
1385 IN DEVICE_REGISTRY_PROPERTY DeviceProperty,
1386 IN ULONG BufferLength,
1387 OUT PVOID PropertyBuffer,
1388 OUT PULONG ResultLength);
1389
1390 PORTCLASSAPI NTSTATUS NTAPI
1391 PcCompletePendingPropertyRequest(
1392 IN PPCPROPERTY_REQUEST PropertyRequest,
1393 IN NTSTATUS NtStatus);
1394
1395
1396 /* ===============================================================
1397 I/O Timeouts
1398 */
1399
1400 PORTCLASSAPI NTSTATUS NTAPI
1401 PcRegisterIoTimeout(
1402 IN PDEVICE_OBJECT pDeviceObject,
1403 IN PIO_TIMER_ROUTINE pTimerRoutine,
1404 IN PVOID pContext);
1405
1406 PORTCLASSAPI NTSTATUS NTAPI
1407 PcUnregisterIoTimeout(
1408 IN PDEVICE_OBJECT pDeviceObject,
1409 IN PIO_TIMER_ROUTINE pTimerRoutine,
1410 IN PVOID pContext);
1411
1412
1413 /* ===============================================================
1414 Physical Connections
1415 */
1416
1417 PORTCLASSAPI NTSTATUS NTAPI
1418 PcRegisterPhysicalConnection(
1419 IN PDEVICE_OBJECT DeviceObject,
1420 IN PUNKNOWN FromUnknown,
1421 IN ULONG FromPin,
1422 IN PUNKNOWN ToUnknown,
1423 IN ULONG ToPin);
1424
1425 PORTCLASSAPI NTSTATUS NTAPI
1426 PcRegisterPhysicalConnectionFromExternal(
1427 IN PDEVICE_OBJECT DeviceObject,
1428 IN PUNICODE_STRING FromString,
1429 IN ULONG FromPin,
1430 IN PUNKNOWN ToUnknown,
1431 IN ULONG ToPin);
1432
1433 PORTCLASSAPI NTSTATUS NTAPI
1434 PcRegisterPhysicalConnectionToExternal(
1435 IN PDEVICE_OBJECT DeviceObject,
1436 IN PUNKNOWN FromUnknown,
1437 IN ULONG FromPin,
1438 IN PUNICODE_STRING ToString,
1439 IN ULONG ToPin);
1440
1441
1442 /* ===============================================================
1443 Misc
1444 */
1445
1446 PORTCLASSAPI ULONGLONG NTAPI
1447 PcGetTimeInterval(
1448 IN ULONGLONG Since);
1449
1450 PORTCLASSAPI NTSTATUS NTAPI
1451 PcRegisterSubdevice(
1452 IN PDEVICE_OBJECT DeviceObject,
1453 IN PWCHAR Name,
1454 IN PUNKNOWN Unknown);
1455
1456
1457 /* ===============================================================
1458 Digital Rights Management Functions
1459 Implemented in XP and above
1460 */
1461
1462 PORTCLASSAPI NTSTATUS NTAPI
1463 PcAddContentHandlers(
1464 IN ULONG ContentId,
1465 IN PVOID *paHandlers,
1466 IN ULONG NumHandlers);
1467
1468 PORTCLASSAPI NTSTATUS NTAPI
1469 PcCreateContentMixed(
1470 IN PULONG paContentId,
1471 IN ULONG cContentId,
1472 OUT PULONG pMixedContentId);
1473
1474 PORTCLASSAPI NTSTATUS NTAPI
1475 PcDestroyContent(
1476 IN ULONG ContentId);
1477
1478 PORTCLASSAPI NTSTATUS NTAPI
1479 PcForwardContentToDeviceObject(
1480 IN ULONG ContentId,
1481 IN PVOID Reserved,
1482 IN PCDRMFORWARD DrmForward);
1483
1484 PORTCLASSAPI NTSTATUS NTAPI
1485 PcForwardContentToFileObject(
1486 IN ULONG ContentId,
1487 IN PFILE_OBJECT FileObject);
1488
1489 PORTCLASSAPI NTSTATUS NTAPI
1490 PcForwardContentToInterface(
1491 IN ULONG ContentId,
1492 IN PUNKNOWN pUnknown,
1493 IN ULONG NumMethods);
1494
1495 PORTCLASSAPI NTSTATUS NTAPI
1496 PcGetContentRights(
1497 IN ULONG ContentId,
1498 OUT PDRMRIGHTS DrmRights);
1499
1500
1501 #endif