ViewVC Help
View File | Revision Log | View Changeset | Root Listing
root/Oni2/Daodan/MSYS2/mingw32/i686-w64-mingw32/include/ddk/strmini.h
Revision: 1166
Committed: Tue Oct 26 14:22:36 2021 UTC (4 years ago) by rossy
Content type: text/x-chdr
File size: 14755 byte(s)
Log Message:
Daodan: Replace MinGW build env with an up-to-date MSYS2 env

File Contents

# Content
1 #ifndef _STREAM_H
2 #define _STREAM_H
3
4 #include <ntddk.h>
5 #include <windef.h>
6 #include <ks.h>
7
8 #if defined(_ARM_)
9 #define STREAMAPI
10 #else
11 #define STREAMAPI __stdcall
12 #endif
13
14 #define STREAM_SYSTEM_TIME_MASK ((STREAM_SYSTEM_TIME)0x00000001FFFFFFFF)
15
16 typedef enum {
17 DebugLevelFatal = 0,
18 DebugLevelError,
19 DebugLevelWarning,
20 DebugLevelInfo,
21 DebugLevelTrace,
22 DebugLevelVerbose,
23 DebugLevelMaximum
24 } STREAM_DEBUG_LEVEL;
25
26
27 #if DBG
28
29 #define DebugPrint(x) StreamClassDebugPrint x
30 #define DEBUG_BREAKPOINT() DbgBreakPoint()
31 #define DEBUG_ASSERT(exp) \
32 if ( !(exp) ) { \
33 StreamClassDebugAssert( __FILE__, __LINE__, #exp, exp); \
34 }
35 #else
36
37 #define DebugPrint(x)
38 #define DEBUG_BREAKPOINT()
39 #define DEBUG_ASSERT(exp)
40
41 #endif
42
43 typedef PHYSICAL_ADDRESS STREAM_PHYSICAL_ADDRESS, *PSTREAM_PHYSICAL_ADDRESS;
44 __GNU_EXTENSION typedef unsigned __int64 STREAM_SYSTEM_TIME, *PSTREAM_SYSTEM_TIME;
45 __GNU_EXTENSION typedef unsigned __int64 STREAM_TIMESTAMP, *PSTREAM_TIMESTAMP;
46
47 typedef enum {
48 TIME_GET_STREAM_TIME,
49 TIME_READ_ONBOARD_CLOCK,
50 TIME_SET_ONBOARD_CLOCK
51 } TIME_FUNCTION;
52
53 typedef struct _HW_TIME_CONTEXT {
54 struct _HW_DEVICE_EXTENSION *HwDeviceExtension;
55 struct _HW_STREAM_OBJECT *HwStreamObject;
56 TIME_FUNCTION Function;
57 ULONGLONG Time;
58 ULONGLONG SystemTime;
59 } HW_TIME_CONTEXT, *PHW_TIME_CONTEXT;
60
61 typedef struct _HW_EVENT_DESCRIPTOR {
62 BOOLEAN Enable;
63 PKSEVENT_ENTRY EventEntry;
64 PKSEVENTDATA EventData;
65 __GNU_EXTENSION union {
66 struct _HW_STREAM_OBJECT * StreamObject;
67 struct _HW_DEVICE_EXTENSION *DeviceExtension;
68 };
69 ULONG EnableEventSetIndex;
70 PVOID HwInstanceExtension;
71 ULONG Reserved;
72 } HW_EVENT_DESCRIPTOR, *PHW_EVENT_DESCRIPTOR;
73
74 struct _HW_STREAM_REQUEST_BLOCK;
75
76 typedef VOID (STREAMAPI * PHW_RECEIVE_STREAM_DATA_SRB) (IN struct _HW_STREAM_REQUEST_BLOCK * SRB);
77 typedef VOID (STREAMAPI * PHW_RECEIVE_STREAM_CONTROL_SRB) (IN struct _HW_STREAM_REQUEST_BLOCK * SRB);
78 typedef NTSTATUS (STREAMAPI * PHW_EVENT_ROUTINE) (IN PHW_EVENT_DESCRIPTOR EventDescriptor);
79 typedef VOID (STREAMAPI * PHW_CLOCK_FUNCTION) (IN PHW_TIME_CONTEXT HwTimeContext);
80
81 typedef struct _HW_CLOCK_OBJECT {
82 PHW_CLOCK_FUNCTION HwClockFunction;
83 ULONG ClockSupportFlags;
84 ULONG Reserved[2];
85 } HW_CLOCK_OBJECT, *PHW_CLOCK_OBJECT;
86
87 #define CLOCK_SUPPORT_CAN_SET_ONBOARD_CLOCK 0x1
88 #define CLOCK_SUPPORT_CAN_READ_ONBOARD_CLOCK 0x2
89 #define CLOCK_SUPPORT_CAN_RETURN_STREAM_TIME 0x4
90
91 typedef struct _HW_STREAM_OBJECT {
92 ULONG SizeOfThisPacket;
93 ULONG StreamNumber;
94 PVOID HwStreamExtension;
95 PHW_RECEIVE_STREAM_DATA_SRB ReceiveDataPacket;
96 PHW_RECEIVE_STREAM_CONTROL_SRB ReceiveControlPacket;
97 HW_CLOCK_OBJECT HwClockObject;
98 BOOLEAN Dma;
99 BOOLEAN Pio;
100 PVOID HwDeviceExtension;
101 ULONG StreamHeaderMediaSpecific;
102 ULONG StreamHeaderWorkspace;
103 BOOLEAN Allocator;
104 PHW_EVENT_ROUTINE HwEventRoutine;
105 ULONG Reserved[2];
106 } HW_STREAM_OBJECT, *PHW_STREAM_OBJECT;
107
108 typedef struct _HW_STREAM_HEADER {
109 ULONG NumberOfStreams;
110 ULONG SizeOfHwStreamInformation;
111 ULONG NumDevPropArrayEntries;
112 PKSPROPERTY_SET DevicePropertiesArray;
113 ULONG NumDevEventArrayEntries;
114 PKSEVENT_SET DeviceEventsArray;
115 PKSTOPOLOGY Topology;
116 PHW_EVENT_ROUTINE DeviceEventRoutine;
117 LONG NumDevMethodArrayEntries;
118 PKSMETHOD_SET DeviceMethodsArray;
119 } HW_STREAM_HEADER, *PHW_STREAM_HEADER;
120
121 typedef struct _HW_STREAM_INFORMATION {
122 ULONG NumberOfPossibleInstances;
123 KSPIN_DATAFLOW DataFlow;
124 BOOLEAN DataAccessible;
125 ULONG NumberOfFormatArrayEntries;
126 PKSDATAFORMAT* StreamFormatsArray;
127 PVOID ClassReserved[4];
128 ULONG NumStreamPropArrayEntries;
129 PKSPROPERTY_SET StreamPropertiesArray;
130 ULONG NumStreamEventArrayEntries;
131 PKSEVENT_SET StreamEventsArray;
132 GUID* Category;
133 GUID* Name;
134 ULONG MediumsCount;
135 const KSPIN_MEDIUM* Mediums;
136 BOOLEAN BridgeStream;
137 ULONG Reserved[2];
138 } HW_STREAM_INFORMATION, *PHW_STREAM_INFORMATION;
139
140
141 typedef struct _HW_STREAM_DESCRIPTOR {
142 HW_STREAM_HEADER StreamHeader;
143 HW_STREAM_INFORMATION StreamInfo;
144 } HW_STREAM_DESCRIPTOR, *PHW_STREAM_DESCRIPTOR;
145
146 typedef struct _STREAM_TIME_REFERENCE {
147 STREAM_TIMESTAMP CurrentOnboardClockValue;
148 LARGE_INTEGER OnboardClockFrequency;
149 LARGE_INTEGER CurrentSystemTime;
150 ULONG Reserved[2];
151 } STREAM_TIME_REFERENCE, *PSTREAM_TIME_REFERENCE;
152
153 typedef struct _STREAM_DATA_INTERSECT_INFO {
154 ULONG StreamNumber;
155 PKSDATARANGE DataRange;
156 PVOID DataFormatBuffer;
157 ULONG SizeOfDataFormatBuffer;
158 } STREAM_DATA_INTERSECT_INFO, *PSTREAM_DATA_INTERSECT_INFO;
159
160 typedef struct _STREAM_PROPERTY_DESCRIPTOR {
161 PKSPROPERTY Property;
162 ULONG PropertySetID;
163 PVOID PropertyInfo;
164 ULONG PropertyInputSize;
165 ULONG PropertyOutputSize;
166 } STREAM_PROPERTY_DESCRIPTOR, *PSTREAM_PROPERTY_DESCRIPTOR;
167
168 typedef struct _STREAM_METHOD_DESCRIPTOR {
169 ULONG MethodSetID;
170 PKSMETHOD Method;
171 PVOID MethodInfo;
172 LONG MethodInputSize;
173 LONG MethodOutputSize;
174 } STREAM_METHOD_DESCRIPTOR, *PSTREAM_METHOD_DESCRIPTOR;
175
176 #define STREAM_REQUEST_BLOCK_SIZE sizeof(STREAM_REQUEST_BLOCK)
177
178 typedef enum _SRB_COMMAND {
179 SRB_READ_DATA,
180 SRB_WRITE_DATA,
181 SRB_GET_STREAM_STATE,
182 SRB_SET_STREAM_STATE,
183 SRB_SET_STREAM_PROPERTY,
184 SRB_GET_STREAM_PROPERTY,
185 SRB_OPEN_MASTER_CLOCK,
186
187 SRB_INDICATE_MASTER_CLOCK,
188 SRB_UNKNOWN_STREAM_COMMAND,
189 SRB_SET_STREAM_RATE,
190 SRB_PROPOSE_DATA_FORMAT,
191 SRB_CLOSE_MASTER_CLOCK,
192 SRB_PROPOSE_STREAM_RATE,
193 SRB_SET_DATA_FORMAT,
194 SRB_GET_DATA_FORMAT,
195 SRB_BEGIN_FLUSH,
196 SRB_END_FLUSH,
197
198 SRB_GET_STREAM_INFO = 0x100,
199 SRB_OPEN_STREAM,
200 SRB_CLOSE_STREAM,
201 SRB_OPEN_DEVICE_INSTANCE,
202 SRB_CLOSE_DEVICE_INSTANCE,
203 SRB_GET_DEVICE_PROPERTY,
204 SRB_SET_DEVICE_PROPERTY,
205 SRB_INITIALIZE_DEVICE,
206 SRB_CHANGE_POWER_STATE,
207 SRB_UNINITIALIZE_DEVICE,
208 SRB_UNKNOWN_DEVICE_COMMAND,
209 SRB_PAGING_OUT_DRIVER,
210 SRB_GET_DATA_INTERSECTION,
211 SRB_INITIALIZATION_COMPLETE,
212 SRB_SURPRISE_REMOVAL
213
214 #if (NTDDI_VERSION >= NTDDI_WINXP)
215 ,SRB_DEVICE_METHOD
216 ,SRB_STREAM_METHOD
217 #if ( (NTDDI_VERSION >= NTDDI_WINXPSP2) && (NTDDI_VERSION < NTDDI_WS03) ) || (NTDDI_VERSION >= NTDDI_WS03SP1)
218 ,SRB_NOTIFY_IDLE_STATE
219 #endif
220 #endif
221 } SRB_COMMAND;
222
223 typedef struct {
224 PHYSICAL_ADDRESS PhysicalAddress;
225 ULONG Length;
226 } KSSCATTER_GATHER, *PKSSCATTER_GATHER;
227
228
229 typedef struct _HW_STREAM_REQUEST_BLOCK {
230 ULONG SizeOfThisPacket;
231 SRB_COMMAND Command;
232 NTSTATUS Status;
233 PHW_STREAM_OBJECT StreamObject;
234 PVOID HwDeviceExtension;
235 PVOID SRBExtension;
236
237 union _CommandData {
238 PKSSTREAM_HEADER DataBufferArray;
239 PHW_STREAM_DESCRIPTOR StreamBuffer;
240 KSSTATE StreamState;
241 PSTREAM_TIME_REFERENCE TimeReference;
242 PSTREAM_PROPERTY_DESCRIPTOR PropertyInfo;
243 PKSDATAFORMAT OpenFormat;
244 struct _PORT_CONFIGURATION_INFORMATION *ConfigInfo;
245 HANDLE MasterClockHandle;
246 DEVICE_POWER_STATE DeviceState;
247 PSTREAM_DATA_INTERSECT_INFO IntersectInfo;
248
249 #if (NTDDI_VERSION >= NTDDI_WINXP)
250 PVOID MethodInfo;
251 LONG FilterTypeIndex;
252 #if ( (NTDDI_VERSION >= NTDDI_WINXPSP2) && (NTDDI_VERSION < NTDDI_WS03) ) || (NTDDI_VERSION >= NTDDI_WS03SP1)
253 BOOLEAN Idle;
254 #endif
255 #endif
256 } CommandData;
257
258 ULONG NumberOfBuffers;
259 ULONG TimeoutCounter;
260 ULONG TimeoutOriginal;
261 struct _HW_STREAM_REQUEST_BLOCK *NextSRB;
262
263 PIRP Irp;
264 ULONG Flags;
265 PVOID HwInstanceExtension;
266
267 __GNU_EXTENSION union {
268 ULONG NumberOfBytesToTransfer;
269 ULONG ActualBytesTransferred;
270 };
271
272 PKSSCATTER_GATHER ScatterGatherBuffer;
273 ULONG NumberOfPhysicalPages;
274 ULONG NumberOfScatterGatherElements;
275 ULONG Reserved[1];
276 } HW_STREAM_REQUEST_BLOCK, *PHW_STREAM_REQUEST_BLOCK;
277
278 #define SRB_HW_FLAGS_DATA_TRANSFER 0x01
279 #define SRB_HW_FLAGS_STREAM_REQUEST 0x2
280
281 typedef enum {
282 PerRequestExtension,
283 DmaBuffer,
284 SRBDataBuffer
285 } STREAM_BUFFER_TYPE;
286
287 typedef struct _ACCESS_RANGE {
288 STREAM_PHYSICAL_ADDRESS RangeStart;
289 ULONG RangeLength;
290 BOOLEAN RangeInMemory;
291 ULONG Reserved;
292 } ACCESS_RANGE, *PACCESS_RANGE;
293
294 typedef struct _PORT_CONFIGURATION_INFORMATION {
295 ULONG SizeOfThisPacket;
296 PVOID HwDeviceExtension;
297 PDEVICE_OBJECT ClassDeviceObject;
298 PDEVICE_OBJECT PhysicalDeviceObject;
299 ULONG SystemIoBusNumber;
300 INTERFACE_TYPE AdapterInterfaceType;
301 ULONG BusInterruptLevel;
302 ULONG BusInterruptVector;
303 KINTERRUPT_MODE InterruptMode;
304 ULONG DmaChannel;
305 ULONG NumberOfAccessRanges;
306 PACCESS_RANGE AccessRanges;
307 ULONG StreamDescriptorSize;
308 PIRP Irp;
309 PKINTERRUPT InterruptObject;
310 PADAPTER_OBJECT DmaAdapterObject;
311 PDEVICE_OBJECT RealPhysicalDeviceObject;
312 ULONG Reserved[1];
313 } PORT_CONFIGURATION_INFORMATION, *PPORT_CONFIGURATION_INFORMATION;
314
315 typedef VOID (STREAMAPI * PHW_RECEIVE_DEVICE_SRB) (IN PHW_STREAM_REQUEST_BLOCK SRB);
316 typedef VOID (STREAMAPI * PHW_CANCEL_SRB) (IN PHW_STREAM_REQUEST_BLOCK SRB);
317 typedef VOID (STREAMAPI * PHW_REQUEST_TIMEOUT_HANDLER) (IN PHW_STREAM_REQUEST_BLOCK SRB);
318 typedef BOOLEAN (STREAMAPI * PHW_INTERRUPT) (IN PVOID DeviceExtension);
319 typedef VOID (STREAMAPI * PHW_TIMER_ROUTINE) (IN PVOID Context);
320 typedef VOID (STREAMAPI * PHW_PRIORITY_ROUTINE) (IN PVOID Context);
321 typedef VOID (STREAMAPI * PHW_QUERY_CLOCK_ROUTINE) (IN PHW_TIME_CONTEXT TimeContext);
322 typedef BOOLEAN (STREAMAPI * PHW_RESET_ADAPTER) (IN PVOID DeviceExtension);
323
324 typedef enum _STREAM_MINIDRIVER_STREAM_NOTIFICATION_TYPE {
325 ReadyForNextStreamDataRequest,
326 ReadyForNextStreamControlRequest,
327 HardwareStarved,
328 StreamRequestComplete,
329 SignalMultipleStreamEvents,
330 SignalStreamEvent,
331 DeleteStreamEvent,
332 StreamNotificationMaximum
333 } STREAM_MINIDRIVER_STREAM_NOTIFICATION_TYPE, *PSTREAM_MINIDRIVER_STREAM_NOTIFICATION_TYPE;
334
335 typedef enum _STREAM_MINIDRIVER_DEVICE_NOTIFICATION_TYPE {
336 ReadyForNextDeviceRequest,
337 DeviceRequestComplete,
338 SignalMultipleDeviceEvents,
339 SignalDeviceEvent,
340 DeleteDeviceEvent,
341 #if (NTDDI_VERSION >= NTDDI_WINXP)
342 SignalMultipleDeviceInstanceEvents,
343 #endif
344 DeviceNotificationMaximum
345 } STREAM_MINIDRIVER_DEVICE_NOTIFICATION_TYPE, *PSTREAM_MINIDRIVER_DEVICE_NOTIFICATION_TYPE;
346
347 #define STREAM_CLASS_VERSION_20 0x0200
348
349 typedef struct _HW_INITIALIZATION_DATA {
350 #if (NTDDI_VERSION >= NTDDI_WINXP)
351 __GNU_EXTENSION union {
352 ULONG HwInitializationDataSize;
353 __GNU_EXTENSION struct {
354 USHORT SizeOfThisPacket;
355 USHORT StreamClassVersion;
356 };
357 };
358 #else
359 ULONG HwInitializationDataSize;
360 #endif /* NTDDI_VERSION >= NTDDI_WINXP */
361
362 PHW_INTERRUPT HwInterrupt;
363 PHW_RECEIVE_DEVICE_SRB HwReceivePacket;
364 PHW_CANCEL_SRB HwCancelPacket;
365 PHW_REQUEST_TIMEOUT_HANDLER HwRequestTimeoutHandler;
366 ULONG DeviceExtensionSize;
367 ULONG PerRequestExtensionSize;
368 ULONG PerStreamExtensionSize;
369 ULONG FilterInstanceExtensionSize;
370 BOOLEAN BusMasterDMA;
371 BOOLEAN Dma24BitAddresses;
372 ULONG BufferAlignment;
373 BOOLEAN TurnOffSynchronization;
374 ULONG DmaBufferSize;
375
376 #if (NTDDI_VERSION >= NTDDI_WINXP)
377 ULONG NumNameExtensions;
378 PWCHAR *NameExtensionArray;
379 #else
380 ULONG Reserved[2];
381 #endif
382 } HW_INITIALIZATION_DATA, *PHW_INITIALIZATION_DATA;
383
384 typedef enum _STREAM_PRIORITY {
385 High,
386 Dispatch,
387 Low,
388 LowToHigh
389 } STREAM_PRIORITY, *PSTREAM_PRIORITY;
390
391
392 VOID
393 StreamClassAbortOutstandingRequests(
394 IN PVOID HwDeviceExtension,
395 IN PHW_STREAM_OBJECT HwStreamObject,
396 IN NTSTATUS Status
397 );
398
399 VOID
400 STREAMAPI
401 StreamClassCallAtNewPriority(
402 IN PHW_STREAM_OBJECT StreamObject,
403 IN PVOID HwDeviceExtension,
404 IN STREAM_PRIORITY Priority,
405 IN PHW_PRIORITY_ROUTINE PriorityRoutine,
406 IN PVOID Context
407 );
408
409 VOID
410 STREAMAPI
411 StreamClassCompleteRequestAndMarkQueueReady(
412 IN PHW_STREAM_REQUEST_BLOCK Srb
413 );
414
415 VOID
416 STREAMAPI
417 StreamClassDebugAssert(
418 IN PCHAR File,
419 IN ULONG Line,
420 IN PCHAR AssertText,
421 IN ULONG AssertValue
422 );
423
424 VOID
425 __cdecl
426 StreamClassDebugPrint(
427 IN STREAM_DEBUG_LEVEL DebugPrintLevel,
428 IN PCCHAR DebugMessage,
429 ...
430 );
431
432 VOID
433 __cdecl
434 StreamClassDeviceNotification(
435 IN STREAM_MINIDRIVER_DEVICE_NOTIFICATION_TYPE NotificationType,
436 IN PVOID HwDeviceExtension,
437 IN PHW_STREAM_REQUEST_BLOCK pSrb,
438 IN PKSEVENT_ENTRY EventEntry,
439 IN GUID *EventSet,
440 IN ULONG EventId
441 );
442
443 VOID
444 STREAMAPI
445 StreamClassFilterReenumerateStreams(
446 IN PVOID HwInstanceExtension,
447 IN ULONG StreamDescriptorSize
448 );
449
450 PVOID
451 STREAMAPI
452 StreamClassGetDmaBuffer(
453 IN PVOID HwDeviceExtension
454 );
455
456
457 PKSEVENT_ENTRY
458 StreamClassGetNextEvent(
459 IN PVOID HwInstanceExtension_OR_HwDeviceExtension,
460 IN PHW_STREAM_OBJECT HwStreamObject,
461 IN GUID * EventGuid,
462 IN ULONG EventItem,
463 IN PKSEVENT_ENTRY CurrentEvent
464 );
465
466 STREAM_PHYSICAL_ADDRESS
467 STREAMAPI
468 StreamClassGetPhysicalAddress(
469 IN PVOID HwDeviceExtension,
470 IN PHW_STREAM_REQUEST_BLOCK HwSRB,
471 IN PVOID VirtualAddress,
472 IN STREAM_BUFFER_TYPE Type,
473 IN ULONG * Length
474 );
475
476 VOID
477 StreamClassQueryMasterClock(
478 IN PHW_STREAM_OBJECT HwStreamObject,
479 IN HANDLE MasterClockHandle,
480 IN TIME_FUNCTION TimeFunction,
481 IN PHW_QUERY_CLOCK_ROUTINE ClockCallbackRoutine
482 );
483
484 VOID
485 STREAMAPI
486 StreamClassQueryMasterClockSync(
487 IN HANDLE MasterClockHandle,
488 IN PHW_TIME_CONTEXT TimeContext
489 );
490
491 BOOLEAN
492 STREAMAPI
493 StreamClassReadWriteConfig(
494 IN PVOID HwDeviceExtension,
495 IN BOOLEAN Read,
496 IN PVOID Buffer,
497 IN ULONG Offset,
498 IN ULONG Length
499 );
500
501 VOID
502 STREAMAPI
503 StreamClassReenumerateStreams(
504 IN PVOID HwDeviceExtension,
505 IN ULONG StreamDescriptorSize
506 );
507
508 NTSTATUS
509 STREAMAPI
510 StreamClassRegisterAdapter(
511 IN PVOID Argument1,
512 IN PVOID Argument2,
513 IN PHW_INITIALIZATION_DATA HwInitializationData
514 );
515
516 #define StreamClassRegisterMinidriver StreamClassRegisterAdapter
517
518 NTSTATUS
519 StreamClassRegisterFilterWithNoKSPins(
520 IN PDEVICE_OBJECT DeviceObject,
521 IN const GUID * InterfaceClassGUID,
522 IN ULONG PinCount,
523 IN BOOLEAN * PinDirection,
524 IN KSPIN_MEDIUM * MediumList,
525 IN GUID * CategoryList
526 );
527
528 VOID
529 STREAMAPI
530 StreamClassScheduleTimer(
531 IN PHW_STREAM_OBJECT StreamObject,
532 IN PVOID HwDeviceExtension,
533 IN ULONG NumberOfMicroseconds,
534 IN PHW_TIMER_ROUTINE TimerRoutine,
535 IN PVOID Context
536 );
537
538 VOID
539 __cdecl
540 StreamClassStreamNotification(
541 IN STREAM_MINIDRIVER_STREAM_NOTIFICATION_TYPE NotificationType,
542 IN PHW_STREAM_OBJECT StreamObject,
543 IN ...
544 );
545
546 #endif /* _STREAM_H */
547