Revert the sync.
[reactos.git] / include / ddk / video.h
1 /*
2 * video.h
3 *
4 * Video port and miniport driver interface
5 *
6 * This file is part of the w32api package.
7 *
8 * Contributors:
9 * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
10 *
11 * THIS SOFTWARE IS NOT COPYRIGHTED
12 *
13 * This source code is offered for use in the public domain. You may
14 * use, modify or distribute it freely.
15 *
16 * This code is distributed in the hope that it will be useful but
17 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
18 * DISCLAIMED. This includes but is not limited to warranties of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
20 *
21 */
22
23 #pragma once
24
25 #include "ntddvdeo.h"
26 #include "videoagp.h"
27
28 #ifdef __cplusplus
29 extern "C" {
30 #endif
31
32 #ifndef _NTOSDEF_
33
34 #ifdef PAGED_CODE
35 #undef PAGED_CODE
36 #endif
37
38 #if defined(_MSC_VER)
39 #define ALLOC_PRAGMA 1
40 #endif
41
42 #if defined(_VIDEOPORT_)
43 #define VPAPI
44 #else
45 #define VPAPI DECLSPEC_IMPORT
46 #endif
47
48 #if DBG
49 #define PAGED_CODE() \
50 if (VideoPortGetCurrentIrql() > 1 /* APC_LEVEL */) { \
51 VideoPortDebugPrint(Error, "Video: Pageable code called at IRQL %d\n", VideoPortGetCurrentIrql() ); \
52 ASSERT(FALSE); \
53 }
54 #else
55 #define PAGED_CODE()
56 #endif /* DBG */
57
58 ULONG
59 NTAPI
60 DriverEntry(
61 PVOID Context1,
62 PVOID Context2);
63
64 #else
65
66 #define VPAPI
67
68 #endif /* _NTOSDEF_ */
69
70 #if DBG
71 #define VideoDebugPrint(x) VideoPortDebugPrint x
72 #else
73 #define VideoDebugPrint(x)
74 #endif
75
76 #define GET_VIDEO_PHYSICAL_ADDRESS(scatterList, \
77 VirtualAddress, \
78 InputBuffer, \
79 pLength, \
80 Address) \
81 do { \
82 ULONG_PTR byteOffset; \
83 \
84 byteOffset = (PCHAR) VirtualAddress - (PCHAR)InputBuffer; \
85 while (byteOffset >= scatterList->Length) { \
86 byteOffset -= scatterList->Length; \
87 scatterList++; \
88 } \
89 *pLength = scatterList->Length - byteOffset; \
90 Address = (ULONG_PTR) (scatterList->PhysicalAddress + byteOffset); \
91 } while (0)
92
93 #define GET_VIDEO_SCATTERGATHER(ppDma) (**(PVRB_SG **)ppDma)
94
95 /* VIDEO_ACCESS_RANGE.RangePassive */
96 #define VIDEO_RANGE_PASSIVE_DECODE 1
97 #define VIDEO_RANGE_10_BIT_DECODE 2
98
99 #define SIZE_OF_NT4_VIDEO_PORT_CONFIG_INFO FIELD_OFFSET(VIDEO_PORT_CONFIG_INFO, Master)
100 #define SIZE_OF_WXP_VIDEO_PORT_CONFIG_INFO sizeof(VIDEO_PORT_CONFIG_INFO)
101
102 #define SET_USER_EVENT 0x01
103 #define SET_DISPLAY_EVENT 0x02
104
105 #define EVENT_TYPE_MASK 1
106 #define SYNCHRONIZATION_EVENT 0
107 #define NOTIFICATION_EVENT 1
108
109 #define INITIAL_EVENT_STATE_MASK 2
110 #define INITIAL_EVENT_NOT_SIGNALED 0
111 #define INITIAL_EVENT_SIGNALED 2
112
113 #define DISPLAY_ADAPTER_HW_ID 0xFFFFFFFF
114
115 #define VIDEO_INVALID_CHILD_ID 0xFFFFFFFF
116
117 #define SIZE_OF_NT4_VIDEO_HW_INITIALIZATION_DATA FIELD_OFFSET(VIDEO_HW_INITIALIZATION_DATA, HwStartDma)
118 #define SIZE_OF_W2K_VIDEO_HW_INITIALIZATION_DATA FIELD_OFFSET(VIDEO_HW_INITIALIZATION_DATA, Reserved)
119 #define SIZE_OF_WXP_VIDEO_HW_INITIALIZATION_DATA (SIZE_OF_W2K_VIDEO_HW_INITIALIZATION_DATA + sizeof(ULONG))
120
121 #define VIDEO_PORT_AGP_INTERFACE_VERSION_1 1
122 #define VIDEO_PORT_AGP_INTERFACE_VERSION_2 2
123 #define VIDEO_PORT_I2C_INTERFACE_VERSION_1 1
124 #define VIDEO_PORT_I2C_INTERFACE_VERSION_2 2
125 #define VIDEO_PORT_INT10_INTERFACE_VERSION_1 1
126 #define VIDEO_PORT_WCMEMORYPROTECTION_INTERFACE_VERSION_1 1
127 #define VIDEO_PORT_DEBUG_REPORT_INTERFACE_VERSION_1 1
128
129 /* Flags for VideoPortGetDeviceBase and VideoPortMapMemory */
130 #define VIDEO_MEMORY_SPACE_MEMORY 0x00
131 #define VIDEO_MEMORY_SPACE_IO 0x01
132 #define VIDEO_MEMORY_SPACE_USER_MODE 0x02
133 #define VIDEO_MEMORY_SPACE_DENSE 0x04
134 #define VIDEO_MEMORY_SPACE_P6CACHE 0x08
135
136 /* PVIDEO_HW_GET_CHILD_DESCRIPTOR return values */
137 #define VIDEO_ENUM_MORE_DEVICES ERROR_CONTINUE
138 #define VIDEO_ENUM_NO_MORE_DEVICES ERROR_NO_MORE_DEVICES
139 #define VIDEO_ENUM_INVALID_DEVICE ERROR_INVALID_NAME
140
141 #define DEVICE_VGA_ENABLED 1
142
143 /* VideoPortCheckForDeviceExistence.Flags constants */
144 #define CDE_USE_SUBSYSTEM_IDS 0x00000001
145 #define CDE_USE_REVISION 0x00000002
146
147 #define BUGCHECK_DATA_SIZE_RESERVED 48
148
149 #define VIDEO_DEBUG_REPORT_MAX_SIZE 0x8000
150
151 typedef LONG VP_STATUS, *PVP_STATUS;
152 typedef ULONG DMA_EVENT_FLAGS;
153
154 typedef struct _VIDEO_PORT_SPIN_LOCK *PSPIN_LOCK;
155 typedef struct _VIDEO_DEBUG_REPORT *PVIDEO_DEBUG_REPORT;
156 typedef struct __DMA_PARAMETERS *PDMA;
157 typedef struct __VP_DMA_ADAPTER *PVP_DMA_ADAPTER;
158
159 typedef PVOID
160 (NTAPI *PVIDEO_PORT_GET_PROC_ADDRESS)(
161 IN PVOID HwDeviceExtension,
162 IN PUCHAR FunctionName);
163
164 typedef struct _VIDEO_PORT_CONFIG_INFO {
165 ULONG Length;
166 ULONG SystemIoBusNumber;
167 INTERFACE_TYPE AdapterInterfaceType;
168 ULONG BusInterruptLevel;
169 ULONG BusInterruptVector;
170 KINTERRUPT_MODE InterruptMode;
171 ULONG NumEmulatorAccessEntries;
172 PEMULATOR_ACCESS_ENTRY EmulatorAccessEntries;
173 ULONG_PTR EmulatorAccessEntriesContext;
174 PHYSICAL_ADDRESS VdmPhysicalVideoMemoryAddress;
175 ULONG VdmPhysicalVideoMemoryLength;
176 ULONG HardwareStateSize;
177 ULONG DmaChannel;
178 ULONG DmaPort;
179 UCHAR DmaShareable;
180 UCHAR InterruptShareable;
181 BOOLEAN Master;
182 DMA_WIDTH DmaWidth;
183 DMA_SPEED DmaSpeed;
184 BOOLEAN bMapBuffers;
185 BOOLEAN NeedPhysicalAddresses;
186 BOOLEAN DemandMode;
187 ULONG MaximumTransferLength;
188 ULONG NumberOfPhysicalBreaks;
189 BOOLEAN ScatterGather;
190 ULONG MaximumScatterGatherChunkSize;
191 PVIDEO_PORT_GET_PROC_ADDRESS VideoPortGetProcAddress;
192 PWSTR DriverRegistryPath;
193 ULONGLONG SystemMemorySize;
194 } VIDEO_PORT_CONFIG_INFO, *PVIDEO_PORT_CONFIG_INFO;
195
196 typedef VP_STATUS
197 (NTAPI *PVIDEO_HW_FIND_ADAPTER)(
198 IN PVOID HwDeviceExtension,
199 IN PVOID HwContext,
200 IN PWSTR ArgumentString,
201 IN OUT PVIDEO_PORT_CONFIG_INFO ConfigInfo,
202 OUT PUCHAR Again);
203
204 typedef BOOLEAN
205 (NTAPI *PVIDEO_HW_INITIALIZE)(
206 IN PVOID HwDeviceExtension);
207
208 typedef BOOLEAN
209 (NTAPI *PVIDEO_HW_INTERRUPT)(
210 IN PVOID HwDeviceExtension);
211
212 typedef struct _VIDEO_ACCESS_RANGE {
213 PHYSICAL_ADDRESS RangeStart;
214 ULONG RangeLength;
215 UCHAR RangeInIoSpace;
216 UCHAR RangeVisible;
217 UCHAR RangeShareable;
218 UCHAR RangePassive;
219 } VIDEO_ACCESS_RANGE, *PVIDEO_ACCESS_RANGE;
220
221 typedef VOID
222 (NTAPI *PVIDEO_HW_LEGACYRESOURCES)(
223 IN ULONG VendorId,
224 IN ULONG DeviceId,
225 IN OUT PVIDEO_ACCESS_RANGE *LegacyResourceList,
226 IN OUT PULONG LegacyResourceCount);
227
228 typedef enum _HW_DMA_RETURN {
229 DmaAsyncReturn,
230 DmaSyncReturn
231 } HW_DMA_RETURN, *PHW_DMA_RETURN;
232
233 typedef HW_DMA_RETURN
234 (NTAPI *PVIDEO_HW_START_DMA)(
235 PVOID HwDeviceExtension,
236 PDMA pDma);
237
238 typedef struct _VP_SCATTER_GATHER_ELEMENT {
239 PHYSICAL_ADDRESS Address;
240 ULONG Length;
241 ULONG_PTR Reserved;
242 } VP_SCATTER_GATHER_ELEMENT, *PVP_SCATTER_GATHER_ELEMENT;
243
244 typedef struct _VP_SCATTER_GATHER_LIST {
245 ULONG NumberOfElements;
246 ULONG_PTR Reserved;
247 VP_SCATTER_GATHER_ELEMENT Elements[0];
248 } VP_SCATTER_GATHER_LIST, *PVP_SCATTER_GATHER_LIST;
249
250 typedef VOID
251 (NTAPI *PEXECUTE_DMA)(
252 IN PVOID HwDeviceExtension,
253 IN PVP_DMA_ADAPTER VpDmaAdapter,
254 IN PVP_SCATTER_GATHER_LIST SGList,
255 IN PVOID Context);
256
257 /* PVIDEO_HW_GET_CHILD_DESCRIPTOR.ChildEnumInfo constants */
258 typedef struct _VIDEO_CHILD_ENUM_INFO {
259 ULONG Size;
260 ULONG ChildDescriptorSize;
261 ULONG ChildIndex;
262 ULONG ACPIHwId;
263 PVOID ChildHwDeviceExtension;
264 } VIDEO_CHILD_ENUM_INFO, *PVIDEO_CHILD_ENUM_INFO;
265
266 /* PVIDEO_HW_GET_CHILD_DESCRIPTOR.VideoChildType constants */
267 typedef enum _VIDEO_CHILD_TYPE {
268 Monitor = 1,
269 NonPrimaryChip,
270 VideoChip,
271 Other
272 } VIDEO_CHILD_TYPE, *PVIDEO_CHILD_TYPE;
273
274 typedef VP_STATUS
275 (NTAPI *PVIDEO_HW_GET_CHILD_DESCRIPTOR)(
276 IN PVOID HwDeviceExtension,
277 IN PVIDEO_CHILD_ENUM_INFO ChildEnumInfo,
278 OUT PVIDEO_CHILD_TYPE VideoChildType,
279 OUT PUCHAR pChildDescriptor,
280 OUT PULONG UId,
281 OUT PULONG pUnused);
282
283 typedef VP_STATUS
284 (NTAPI *PVIDEO_HW_POWER_SET)(
285 IN PVOID HwDeviceExtension,
286 IN ULONG HwId,
287 IN PVIDEO_POWER_MANAGEMENT VideoPowerControl);
288
289 typedef VP_STATUS
290 (NTAPI *PVIDEO_HW_POWER_GET)(
291 IN PVOID HwDeviceExtension,
292 IN ULONG HwId,
293 IN OUT PVIDEO_POWER_MANAGEMENT VideoPowerControl);
294
295 typedef struct _QUERY_INTERFACE {
296 CONST GUID *InterfaceType;
297 USHORT Size;
298 USHORT Version;
299 PINTERFACE Interface;
300 PVOID InterfaceSpecificData;
301 } QUERY_INTERFACE, *PQUERY_INTERFACE;
302
303 typedef VP_STATUS
304 (NTAPI *PVIDEO_HW_QUERY_INTERFACE)(
305 IN PVOID HwDeviceExtension,
306 IN OUT PQUERY_INTERFACE QueryInterface);
307
308 typedef VP_STATUS
309 (NTAPI *PVIDEO_HW_CHILD_CALLBACK)(
310 PVOID HwDeviceExtension,
311 PVOID ChildDeviceExtension);
312
313 typedef BOOLEAN
314 (NTAPI *PVIDEO_HW_RESET_HW)(
315 IN PVOID HwDeviceExtension,
316 IN ULONG Columns,
317 IN ULONG Rows);
318
319 typedef struct _STATUS_BLOCK {
320 _ANONYMOUS_UNION union {
321 VP_STATUS Status;
322 PVOID Pointer;
323 } DUMMYUNIONNAME;
324 ULONG_PTR Information;
325 } STATUS_BLOCK, *PSTATUS_BLOCK;
326
327 typedef struct _VIDEO_REQUEST_PACKET {
328 ULONG IoControlCode;
329 PSTATUS_BLOCK StatusBlock;
330 PVOID InputBuffer;
331 ULONG InputBufferLength;
332 PVOID OutputBuffer;
333 ULONG OutputBufferLength;
334 } VIDEO_REQUEST_PACKET, *PVIDEO_REQUEST_PACKET;
335
336 typedef BOOLEAN
337 (NTAPI *PVIDEO_HW_START_IO)(
338 IN PVOID HwDeviceExtension,
339 IN PVIDEO_REQUEST_PACKET RequestPacket);
340
341 typedef VOID
342 (NTAPI *PVIDEO_HW_TIMER)(
343 IN PVOID HwDeviceExtension);
344
345 typedef VOID
346 (NTAPI *PVIDEO_WRITE_CLOCK_LINE)(
347 PVOID HwDeviceExtension,
348 UCHAR Data);
349
350 typedef VOID
351 (NTAPI *PVIDEO_WRITE_DATA_LINE)(
352 PVOID HwDeviceExtension,
353 UCHAR Data);
354
355 typedef BOOLEAN
356 (NTAPI *PVIDEO_READ_CLOCK_LINE)(
357 PVOID HwDeviceExtension);
358
359 typedef BOOLEAN
360 (NTAPI *PVIDEO_READ_DATA_LINE)(
361 PVOID HwDeviceExtension);
362
363 typedef VOID
364 (NTAPI *PVIDEO_WAIT_VSYNC_ACTIVE)(
365 PVOID HwDeviceExtension);
366
367 typedef struct _I2C_CALLBACKS {
368 IN PVIDEO_WRITE_CLOCK_LINE WriteClockLine;
369 IN PVIDEO_WRITE_DATA_LINE WriteDataLine;
370 IN PVIDEO_READ_CLOCK_LINE ReadClockLine;
371 IN PVIDEO_READ_DATA_LINE ReadDataLine;
372 } I2C_CALLBACKS, *PI2C_CALLBACKS;
373
374 typedef BOOLEAN
375 (NTAPI *PI2C_START)(
376 IN PVOID HwDeviceExtension,
377 IN PI2C_CALLBACKS I2CCallbacks);
378
379 typedef BOOLEAN
380 (NTAPI *PI2C_STOP)(
381 IN PVOID HwDeviceExtension,
382 IN PI2C_CALLBACKS I2CCallbacks);
383
384 typedef BOOLEAN
385 (NTAPI *PI2C_WRITE)(
386 IN PVOID HwDeviceExtension,
387 IN PI2C_CALLBACKS I2CCallbacks,
388 IN PUCHAR Buffer,
389 IN ULONG Length);
390
391 typedef BOOLEAN
392 (NTAPI *PI2C_READ)(
393 IN PVOID HwDeviceExtension,
394 IN PI2C_CALLBACKS I2CCallbacks,
395 OUT PUCHAR Buffer,
396 IN ULONG Length);
397
398 typedef struct _VIDEO_I2C_CONTROL {
399 IN PVIDEO_WRITE_CLOCK_LINE WriteClockLine;
400 IN PVIDEO_WRITE_DATA_LINE WriteDataLine;
401 IN PVIDEO_READ_CLOCK_LINE ReadClockLine;
402 IN PVIDEO_READ_DATA_LINE ReadDataLine;
403 IN ULONG I2CDelay;
404 } VIDEO_I2C_CONTROL, *PVIDEO_I2C_CONTROL;
405
406 typedef BOOLEAN
407 (NTAPI *PI2C_START_2)(
408 IN PVOID HwDeviceExtension,
409 IN PVIDEO_I2C_CONTROL I2CControl);
410
411 typedef BOOLEAN
412 (NTAPI *PI2C_STOP_2)(
413 IN PVOID HwDeviceExtension,
414 IN PVIDEO_I2C_CONTROL I2CControl);
415
416 typedef BOOLEAN
417 (NTAPI *PI2C_WRITE_2)(
418 IN PVOID HwDeviceExtension,
419 IN PVIDEO_I2C_CONTROL I2CControl,
420 IN PUCHAR Buffer,
421 IN ULONG Length);
422
423 typedef BOOLEAN
424 (NTAPI *PI2C_READ_2)(
425 IN PVOID HwDeviceExtension,
426 IN PVIDEO_I2C_CONTROL I2CControl,
427 OUT PUCHAR Buffer,
428 IN ULONG Length,
429 IN BOOLEAN EndOfRead);
430
431 typedef struct _INT10_BIOS_ARGUMENTS {
432 ULONG Eax;
433 ULONG Ebx;
434 ULONG Ecx;
435 ULONG Edx;
436 ULONG Esi;
437 ULONG Edi;
438 ULONG Ebp;
439 USHORT SegDs;
440 USHORT SegEs;
441 } INT10_BIOS_ARGUMENTS, *PINT10_BIOS_ARGUMENTS;
442
443 typedef VP_STATUS
444 (NTAPI *PINT10_CALL_BIOS)(
445 IN PVOID Context,
446 IN OUT PINT10_BIOS_ARGUMENTS BiosArguments);
447
448 typedef VP_STATUS
449 (NTAPI *PINT10_ALLOCATE_BUFFER)(
450 IN PVOID Context,
451 OUT PUSHORT Seg,
452 OUT PUSHORT Off,
453 IN OUT PULONG Length);
454
455 typedef VP_STATUS
456 (NTAPI *PINT10_FREE_BUFFER)(
457 IN PVOID Context,
458 IN USHORT Seg,
459 IN USHORT Off);
460
461 typedef VP_STATUS
462 (NTAPI *PINT10_READ_MEMORY)(
463 IN PVOID Context,
464 IN USHORT Seg,
465 IN USHORT Off,
466 OUT PVOID Buffer,
467 IN ULONG Length);
468
469 typedef VP_STATUS
470 (NTAPI *PINT10_WRITE_MEMORY)(
471 IN PVOID Context,
472 IN USHORT Seg,
473 IN USHORT Off,
474 IN PVOID Buffer,
475 IN ULONG Length);
476
477 typedef VP_STATUS
478 (NTAPI *PROTECT_WC_MEMORY)(
479 IN PVOID Context,
480 IN PVOID HwDeviceExtension);
481
482 typedef VP_STATUS
483 (NTAPI *RESTORE_WC_MEMORY)(
484 IN PVOID Context,
485 IN PVOID HwDeviceExtension);
486
487 typedef enum _VIDEO_DEVICE_DATA_TYPE {
488 VpMachineData = 0,
489 VpCmosData,
490 VpBusData,
491 VpControllerData,
492 VpMonitorData
493 } VIDEO_DEVICE_DATA_TYPE, *PVIDEO_DEVICE_DATA_TYPE;
494
495 typedef VP_STATUS
496 (NTAPI *PMINIPORT_QUERY_DEVICE_ROUTINE)(
497 IN PVOID HwDeviceExtension,
498 IN PVOID Context,
499 IN VIDEO_DEVICE_DATA_TYPE DeviceDataType,
500 IN PVOID Identifier,
501 IN ULONG IdentifierLength,
502 IN PVOID ConfigurationData,
503 IN ULONG ConfigurationDataLength,
504 IN OUT PVOID ComponentInformation,
505 IN ULONG ComponentInformationLength);
506
507 typedef VP_STATUS
508 (NTAPI *PMINIPORT_GET_REGISTRY_ROUTINE)(
509 IN PVOID HwDeviceExtension,
510 IN PVOID Context,
511 IN OUT PWSTR ValueName,
512 IN OUT PVOID ValueData,
513 IN ULONG ValueLength);
514
515 typedef VOID
516 (NTAPI *PMINIPORT_DPC_ROUTINE)(
517 IN PVOID HwDeviceExtension,
518 IN PVOID Context);
519
520 typedef BOOLEAN
521 (NTAPI *PMINIPORT_SYNCHRONIZE_ROUTINE)(
522 IN PVOID Context);
523
524 typedef VOID
525 (NTAPI *PVIDEO_BUGCHECK_CALLBACK)(
526 IN PVOID HwDeviceExtension,
527 IN ULONG BugcheckCode,
528 IN PUCHAR Buffer,
529 IN ULONG BufferSize);
530
531 /* VideoPortSynchronizeExecution.Priority constants */
532 typedef enum VIDEO_SYNCHRONIZE_PRIORITY {
533 VpLowPriority = 0,
534 VpMediumPriority,
535 VpHighPriority
536 } VIDEO_SYNCHRONIZE_PRIORITY, *PVIDEO_SYNCHRONIZE_PRIORITY;
537
538 /* VideoPortAllocatePool.PoolType constants */
539 typedef enum _VP_POOL_TYPE {
540 VpNonPagedPool = 0,
541 VpPagedPool,
542 VpNonPagedPoolCacheAligned = 4,
543 VpPagedPoolCacheAligned
544 } VP_POOL_TYPE, *PVP_POOL_TYPE;
545
546 typedef enum _DMA_FLAGS {
547 VideoPortUnlockAfterDma = 1,
548 VideoPortKeepPagesLocked,
549 VideoPortDmaInitOnly
550 } DMA_FLAGS;
551
552 typedef struct _VIDEO_HARDWARE_CONFIGURATION_DATA {
553 INTERFACE_TYPE InterfaceType;
554 ULONG BusNumber;
555 USHORT Version;
556 USHORT Revision;
557 USHORT Irql;
558 USHORT Vector;
559 ULONG ControlBase;
560 ULONG ControlSize;
561 ULONG CursorBase;
562 ULONG CursorSize;
563 ULONG FrameBase;
564 ULONG FrameSize;
565 } VIDEO_HARDWARE_CONFIGURATION_DATA, *PVIDEO_HARDWARE_CONFIGURATION_DATA;
566
567 typedef struct _VIDEO_X86_BIOS_ARGUMENTS {
568 ULONG Eax;
569 ULONG Ebx;
570 ULONG Ecx;
571 ULONG Edx;
572 ULONG Esi;
573 ULONG Edi;
574 ULONG Ebp;
575 } VIDEO_X86_BIOS_ARGUMENTS, *PVIDEO_X86_BIOS_ARGUMENTS;
576
577 typedef enum VIDEO_DEBUG_LEVEL {
578 Error = 0,
579 Warn,
580 Trace,
581 Info
582 } VIDEO_DEBUG_LEVEL, *PVIDEO_DEBUG_LEVEL;
583
584 #ifndef _NTOS_
585
586 typedef VP_STATUS
587 (NTAPI *PDRIVER_IO_PORT_UCHAR)(
588 IN ULONG_PTR Context,
589 IN ULONG Port,
590 IN UCHAR AccessMode,
591 IN PUCHAR Data);
592
593 typedef VP_STATUS
594 (NTAPI *PDRIVER_IO_PORT_UCHAR_STRING)(
595 IN ULONG_PTR Context,
596 IN ULONG Port,
597 IN UCHAR AccessMode,
598 IN PUCHAR Data,
599 IN ULONG DataLength);
600
601 typedef VP_STATUS
602 (NTAPI *PDRIVER_IO_PORT_ULONG)(
603 IN ULONG_PTR Context,
604 IN ULONG Port,
605 IN UCHAR AccessMode,
606 IN PULONG Data);
607
608 typedef VP_STATUS
609 (NTAPI *PDRIVER_IO_PORT_ULONG_STRING)(
610 IN ULONG_PTR Context,
611 IN ULONG Port,
612 IN UCHAR AccessMode,
613 IN PULONG Data,
614 IN ULONG DataLength);
615
616 typedef VP_STATUS
617 (NTAPI *PDRIVER_IO_PORT_USHORT)(
618 IN ULONG_PTR Context,
619 IN ULONG Port,
620 IN UCHAR AccessMode,
621 IN PUSHORT Data);
622
623 typedef VP_STATUS
624 (NTAPI *PDRIVER_IO_PORT_USHORT_STRING)(
625 IN ULONG_PTR Context,
626 IN ULONG Port,
627 IN UCHAR AccessMode,
628 IN PUSHORT Data,
629 IN ULONG DataLength);
630
631 #endif /* _NTOS_ */
632
633 typedef struct __VRB_SG {
634 __int64 PhysicalAddress;
635 ULONG Length;
636 } VRB_SG, *PVRB_SG;
637
638 typedef enum _VP_LOCK_OPERATION {
639 VpReadAccess = 0,
640 VpWriteAccess,
641 VpModifyAccess
642 } VP_LOCK_OPERATION;
643
644 typedef struct _VP_DEVICE_DESCRIPTION {
645 BOOLEAN ScatterGather;
646 BOOLEAN Dma32BitAddresses;
647 BOOLEAN Dma64BitAddresses;
648 ULONG MaximumLength;
649 } VP_DEVICE_DESCRIPTION, *PVP_DEVICE_DESCRIPTION;
650
651 typedef struct _VIDEO_CHILD_STATE {
652 ULONG Id;
653 ULONG State;
654 } VIDEO_CHILD_STATE, *PVIDEO_CHILD_STATE;
655
656 typedef struct _VIDEO_CHILD_STATE_CONFIGURATION {
657 ULONG Count;
658 VIDEO_CHILD_STATE ChildStateArray[ANYSIZE_ARRAY];
659 } VIDEO_CHILD_STATE_CONFIGURATION, *PVIDEO_CHILD_STATE_CONFIGURATION;
660
661 typedef struct _VIDEO_HW_INITIALIZATION_DATA {
662 ULONG HwInitDataSize;
663 INTERFACE_TYPE AdapterInterfaceType;
664 PVIDEO_HW_FIND_ADAPTER HwFindAdapter;
665 PVIDEO_HW_INITIALIZE HwInitialize;
666 PVIDEO_HW_INTERRUPT HwInterrupt;
667 PVIDEO_HW_START_IO HwStartIO;
668 ULONG HwDeviceExtensionSize;
669 ULONG StartingDeviceNumber;
670 PVIDEO_HW_RESET_HW HwResetHw;
671 PVIDEO_HW_TIMER HwTimer;
672 PVIDEO_HW_START_DMA HwStartDma;
673 PVIDEO_HW_POWER_SET HwSetPowerState;
674 PVIDEO_HW_POWER_GET HwGetPowerState;
675 PVIDEO_HW_GET_CHILD_DESCRIPTOR HwGetVideoChildDescriptor;
676 PVIDEO_HW_QUERY_INTERFACE HwQueryInterface;
677 ULONG HwChildDeviceExtensionSize;
678 PVIDEO_ACCESS_RANGE HwLegacyResourceList;
679 ULONG HwLegacyResourceCount;
680 PVIDEO_HW_LEGACYRESOURCES HwGetLegacyResources;
681 BOOLEAN AllowEarlyEnumeration;
682 ULONG Reserved;
683 } VIDEO_HW_INITIALIZATION_DATA, *PVIDEO_HW_INITIALIZATION_DATA;
684
685 typedef struct _I2C_FNC_TABLE {
686 IN ULONG Size;
687 IN PVIDEO_WRITE_CLOCK_LINE WriteClockLine;
688 IN PVIDEO_WRITE_DATA_LINE WriteDataLine;
689 IN PVIDEO_READ_CLOCK_LINE ReadClockLine;
690 IN PVIDEO_READ_DATA_LINE ReadDataLine;
691 IN PVIDEO_WAIT_VSYNC_ACTIVE WaitVsync;
692 PVOID Reserved;
693 } I2C_FNC_TABLE, *PI2C_FNC_TABLE;
694
695 typedef struct _DDC_CONTROL {
696 IN ULONG Size;
697 IN I2C_CALLBACKS I2CCallbacks;
698 IN UCHAR EdidSegment;
699 } DDC_CONTROL, *PDDC_CONTROL;
700
701 /* VideoPortQueryServices.ServicesType constants */
702 typedef enum _VIDEO_PORT_SERVICES {
703 VideoPortServicesAGP = 1,
704 VideoPortServicesI2C,
705 VideoPortServicesHeadless,
706 VideoPortServicesInt10,
707 VideoPortServicesDebugReport,
708 VideoPortServicesWCMemoryProtection
709 } VIDEO_PORT_SERVICES;
710
711 typedef struct _VIDEO_PORT_AGP_INTERFACE {
712 SHORT Size;
713 SHORT Version;
714 PVOID Context;
715 PINTERFACE_REFERENCE InterfaceReference;
716 PINTERFACE_DEREFERENCE InterfaceDereference;
717 PAGP_RESERVE_PHYSICAL AgpReservePhysical;
718 PAGP_RELEASE_PHYSICAL AgpReleasePhysical;
719 PAGP_COMMIT_PHYSICAL AgpCommitPhysical;
720 PAGP_FREE_PHYSICAL AgpFreePhysical;
721 PAGP_RESERVE_VIRTUAL AgpReserveVirtual;
722 PAGP_RELEASE_VIRTUAL AgpReleaseVirtual;
723 PAGP_COMMIT_VIRTUAL AgpCommitVirtual;
724 PAGP_FREE_VIRTUAL AgpFreeVirtual;
725 ULONGLONG AgpAllocationLimit;
726 } VIDEO_PORT_AGP_INTERFACE, *PVIDEO_PORT_AGP_INTERFACE;
727
728 typedef struct _VIDEO_PORT_AGP_INTERFACE_2 {
729 IN USHORT Size;
730 IN USHORT Version;
731 OUT PVOID Context;
732 OUT PINTERFACE_REFERENCE InterfaceReference;
733 OUT PINTERFACE_DEREFERENCE InterfaceDereference;
734 OUT PAGP_RESERVE_PHYSICAL AgpReservePhysical;
735 OUT PAGP_RELEASE_PHYSICAL AgpReleasePhysical;
736 OUT PAGP_COMMIT_PHYSICAL AgpCommitPhysical;
737 OUT PAGP_FREE_PHYSICAL AgpFreePhysical;
738 OUT PAGP_RESERVE_VIRTUAL AgpReserveVirtual;
739 OUT PAGP_RELEASE_VIRTUAL AgpReleaseVirtual;
740 OUT PAGP_COMMIT_VIRTUAL AgpCommitVirtual;
741 OUT PAGP_FREE_VIRTUAL AgpFreeVirtual;
742 OUT ULONGLONG AgpAllocationLimit;
743 OUT PAGP_SET_RATE AgpSetRate;
744 } VIDEO_PORT_AGP_INTERFACE_2, *PVIDEO_PORT_AGP_INTERFACE_2;
745
746 typedef struct _VIDEO_PORT_I2C_INTERFACE {
747 USHORT Size;
748 USHORT Version;
749 PVOID Context;
750 PINTERFACE_REFERENCE InterfaceReference;
751 PINTERFACE_DEREFERENCE InterfaceDereference;
752 PI2C_START I2CStart;
753 PI2C_STOP I2CStop;
754 PI2C_WRITE I2CWrite;
755 PI2C_READ I2CRead;
756 } VIDEO_PORT_I2C_INTERFACE, *PVIDEO_PORT_I2C_INTERFACE;
757
758 typedef struct _VIDEO_PORT_I2C_INTERFACE_2 {
759 IN USHORT Size;
760 IN USHORT Version;
761 OUT PVOID Context;
762 OUT PINTERFACE_REFERENCE InterfaceReference;
763 OUT PINTERFACE_DEREFERENCE InterfaceDereference;
764 OUT PI2C_START_2 I2CStart;
765 OUT PI2C_STOP_2 I2CStop;
766 OUT PI2C_WRITE_2 I2CWrite;
767 OUT PI2C_READ_2 I2CRead;
768 } VIDEO_PORT_I2C_INTERFACE_2, *PVIDEO_PORT_I2C_INTERFACE_2;
769
770 typedef struct _VIDEO_PORT_INT10_INTERFACE {
771 IN USHORT Size;
772 IN USHORT Version;
773 OUT PVOID Context;
774 OUT PINTERFACE_REFERENCE InterfaceReference;
775 OUT PINTERFACE_DEREFERENCE InterfaceDereference;
776 OUT PINT10_ALLOCATE_BUFFER Int10AllocateBuffer;
777 OUT PINT10_FREE_BUFFER Int10FreeBuffer;
778 OUT PINT10_READ_MEMORY Int10ReadMemory;
779 OUT PINT10_WRITE_MEMORY Int10WriteMemory;
780 OUT PINT10_CALL_BIOS Int10CallBios;
781 } VIDEO_PORT_INT10_INTERFACE, *PVIDEO_PORT_INT10_INTERFACE;
782
783 typedef struct _VIDEO_PORT_WCMEMORYPROTECTION_INTERFACE {
784 IN USHORT Size;
785 IN USHORT Version;
786 OUT PVOID Context;
787 OUT PINTERFACE_REFERENCE InterfaceReference;
788 OUT PINTERFACE_DEREFERENCE InterfaceDereference;
789 OUT PROTECT_WC_MEMORY VideoPortProtectWCMemory;
790 OUT RESTORE_WC_MEMORY VideoPortRestoreWCMemory;
791 } VIDEO_PORT_WCMEMORYPROTECTION_INTERFACE, *PVIDEO_PORT_WCMEMORYPROTECTION_INTERFACE;
792
793 typedef struct _VPOSVERSIONINFO {
794 IN ULONG Size;
795 OUT ULONG MajorVersion;
796 OUT ULONG MinorVersion;
797 OUT ULONG BuildNumber;
798 OUT USHORT ServicePackMajor;
799 OUT USHORT ServicePackMinor;
800 } VPOSVERSIONINFO, *PVPOSVERSIONINFO;
801
802 typedef struct _VIDEO_PORT_DEBUG_REPORT_INTERFACE {
803 IN USHORT Size;
804 IN USHORT Version;
805 OUT PVOID Context;
806 OUT PINTERFACE_REFERENCE InterfaceReference;
807 OUT PINTERFACE_DEREFERENCE InterfaceDereference;
808 OUT PVIDEO_DEBUG_REPORT (*DbgReportCreate)(
809 IN PVOID HwDeviceExtension,
810 IN ULONG ulCode,
811 IN ULONG_PTR ulpArg1,
812 IN ULONG_PTR ulpArg2,
813 IN ULONG_PTR ulpArg3,
814 IN ULONG_PTR ulpArg4
815 );
816 OUT BOOLEAN (*DbgReportSecondaryData)(
817 IN OUT PVIDEO_DEBUG_REPORT pReport,
818 IN PVOID pvData,
819 IN ULONG ulDataSize
820 );
821 OUT VOID (*DbgReportComplete)(
822 IN OUT PVIDEO_DEBUG_REPORT pReport
823 );
824 } VIDEO_PORT_DEBUG_REPORT_INTERFACE, *PVIDEO_PORT_DEBUG_REPORT_INTERFACE;
825
826 /* Video port functions for miniports */
827
828 VPAPI
829 VP_STATUS
830 NTAPI
831 VideoPortAllocateBuffer(
832 IN PVOID HwDeviceExtension,
833 IN ULONG Size,
834 OUT PVOID *Buffer);
835
836 VPAPI
837 VOID
838 NTAPI
839 VideoPortAcquireDeviceLock(
840 IN PVOID HwDeviceExtension);
841
842 VPAPI
843 ULONG
844 NTAPI
845 VideoPortCompareMemory(
846 IN PVOID Source1,
847 IN PVOID Source2,
848 IN SIZE_T Length);
849
850 VPAPI
851 BOOLEAN
852 NTAPI
853 VideoPortDDCMonitorHelper(
854 IN PVOID HwDeviceExtension,
855 IN PVOID DDCControl,
856 IN OUT PUCHAR EdidBuffer,
857 IN ULONG EdidBufferSize);
858
859 VPAPI
860 VOID
861 __cdecl
862 VideoPortDebugPrint(
863 IN VIDEO_DEBUG_LEVEL DebugPrintLevel,
864 IN PSTR DebugMessage,
865 IN ...);
866
867 VPAPI
868 VP_STATUS
869 NTAPI
870 VideoPortDisableInterrupt(
871 IN PVOID HwDeviceExtension);
872
873 VPAPI
874 VP_STATUS
875 NTAPI
876 VideoPortEnableInterrupt(
877 IN PVOID HwDeviceExtension);
878
879 VPAPI
880 VP_STATUS
881 NTAPI
882 VideoPortEnumerateChildren(
883 IN PVOID HwDeviceExtension,
884 IN PVOID Reserved);
885
886 VPAPI
887 VOID
888 NTAPI
889 VideoPortFreeDeviceBase(
890 IN PVOID HwDeviceExtension,
891 IN PVOID MappedAddress);
892
893 VPAPI
894 VP_STATUS
895 NTAPI
896 VideoPortGetAccessRanges(
897 IN PVOID HwDeviceExtension,
898 IN ULONG NumRequestedResources,
899 IN PIO_RESOURCE_DESCRIPTOR RequestedResources OPTIONAL,
900 IN ULONG NumAccessRanges,
901 OUT PVIDEO_ACCESS_RANGE AccessRanges,
902 IN PVOID VendorId,
903 IN PVOID DeviceId,
904 OUT PULONG Slot);
905
906 VPAPI
907 PVOID
908 NTAPI
909 VideoPortGetAssociatedDeviceExtension(
910 IN PVOID DeviceObject);
911
912 VPAPI
913 ULONG
914 NTAPI
915 VideoPortGetBusData(
916 IN PVOID HwDeviceExtension,
917 IN BUS_DATA_TYPE BusDataType,
918 IN ULONG SlotNumber,
919 IN OUT PVOID Buffer,
920 IN ULONG Offset,
921 IN ULONG Length);
922
923 VPAPI
924 UCHAR
925 NTAPI
926 VideoPortGetCurrentIrql(VOID);
927
928 VPAPI
929 PVOID
930 NTAPI
931 VideoPortGetDeviceBase(
932 IN PVOID HwDeviceExtension,
933 IN PHYSICAL_ADDRESS IoAddress,
934 IN ULONG NumberOfUchars,
935 IN UCHAR InIoSpace);
936
937 VPAPI
938 VP_STATUS
939 NTAPI
940 VideoPortGetDeviceData(
941 IN PVOID HwDeviceExtension,
942 IN VIDEO_DEVICE_DATA_TYPE DeviceDataType,
943 IN PMINIPORT_QUERY_DEVICE_ROUTINE CallbackRoutine,
944 IN PVOID Context);
945
946 VPAPI
947 VP_STATUS
948 NTAPI
949 VideoPortGetRegistryParameters(
950 IN PVOID HwDeviceExtension,
951 IN PWSTR ParameterName,
952 IN UCHAR IsParameterFileName,
953 IN PMINIPORT_GET_REGISTRY_ROUTINE CallbackRoutine,
954 IN PVOID Context);
955
956 VPAPI
957 PVOID
958 NTAPI
959 VideoPortGetRomImage(
960 IN PVOID HwDeviceExtension,
961 IN PVOID Unused1,
962 IN ULONG Unused2,
963 IN ULONG Length);
964
965 VPAPI
966 VP_STATUS
967 NTAPI
968 VideoPortGetVgaStatus(
969 IN PVOID HwDeviceExtension,
970 OUT PULONG VgaStatus);
971
972 VPAPI
973 LONG
974 FASTCALL
975 VideoPortInterlockedDecrement(
976 IN PLONG Addend);
977
978 VPAPI
979 LONG
980 FASTCALL
981 VideoPortInterlockedExchange(
982 IN OUT PLONG Target,
983 IN LONG Value);
984
985 VPAPI
986 LONG
987 FASTCALL
988 VideoPortInterlockedIncrement(
989 IN PLONG Addend);
990
991 VPAPI
992 ULONG
993 NTAPI
994 VideoPortInitialize(
995 IN PVOID Argument1,
996 IN PVOID Argument2,
997 IN PVIDEO_HW_INITIALIZATION_DATA HwInitializationData,
998 IN PVOID HwContext);
999
1000 VPAPI
1001 VP_STATUS
1002 NTAPI
1003 VideoPortInt10(
1004 IN PVOID HwDeviceExtension,
1005 IN PVIDEO_X86_BIOS_ARGUMENTS BiosArguments);
1006
1007 VPAPI
1008 VOID
1009 NTAPI
1010 VideoPortLogError(
1011 IN PVOID HwDeviceExtension,
1012 IN PVIDEO_REQUEST_PACKET Vrp OPTIONAL,
1013 IN VP_STATUS ErrorCode,
1014 IN ULONG UniqueId);
1015
1016 VPAPI
1017 VP_STATUS
1018 NTAPI
1019 VideoPortMapBankedMemory(
1020 IN PVOID HwDeviceExtension,
1021 IN PHYSICAL_ADDRESS PhysicalAddress,
1022 IN OUT PULONG Length,
1023 PULONG InIoSpace,
1024 PVOID *VirtualAddress,
1025 ULONG BankLength,
1026 UCHAR ReadWriteBank,
1027 PBANKED_SECTION_ROUTINE BankRoutine,
1028 PVOID Context);
1029
1030 VPAPI
1031 VP_STATUS
1032 NTAPI
1033 VideoPortMapMemory(
1034 IN PVOID HwDeviceExtension,
1035 IN PHYSICAL_ADDRESS PhysicalAddress,
1036 IN OUT PULONG Length,
1037 IN PULONG InIoSpace,
1038 IN OUT PVOID *VirtualAddress);
1039
1040 VPAPI
1041 VOID
1042 NTAPI
1043 VideoPortMoveMemory(
1044 IN PVOID Destination,
1045 IN PVOID Source,
1046 IN ULONG Length);
1047
1048 VPAPI
1049 LONGLONG
1050 NTAPI
1051 VideoPortQueryPerformanceCounter(
1052 IN PVOID HwDeviceExtension,
1053 OUT PLONGLONG PerformanceFrequency OPTIONAL);
1054
1055 VPAPI
1056 VP_STATUS
1057 NTAPI
1058 VideoPortQueryServices(
1059 IN PVOID HwDeviceExtension,
1060 IN VIDEO_PORT_SERVICES ServicesType,
1061 IN OUT PINTERFACE Interface);
1062
1063 VPAPI
1064 BOOLEAN
1065 NTAPI
1066 VideoPortQueueDpc(
1067 IN PVOID HwDeviceExtension,
1068 IN PMINIPORT_DPC_ROUTINE CallbackRoutine,
1069 IN PVOID Context);
1070
1071 VPAPI
1072 VOID
1073 NTAPI
1074 VideoPortReadPortBufferUchar(
1075 IN PUCHAR Port,
1076 OUT PUCHAR Buffer,
1077 IN ULONG Count);
1078
1079 VPAPI
1080 VOID
1081 NTAPI
1082 VideoPortReadPortBufferUlong(
1083 IN PULONG Port,
1084 OUT PULONG Buffer,
1085 IN ULONG Count);
1086
1087 VPAPI
1088 VOID
1089 NTAPI
1090 VideoPortReadPortBufferUshort(
1091 IN PUSHORT Port,
1092 OUT PUSHORT Buffer,
1093 IN ULONG Count);
1094
1095 VPAPI
1096 UCHAR
1097 NTAPI
1098 VideoPortReadPortUchar(
1099 IN PUCHAR Port);
1100
1101 VPAPI
1102 ULONG
1103 NTAPI
1104 VideoPortReadPortUlong(
1105 IN PULONG Port);
1106
1107 VPAPI
1108 USHORT
1109 NTAPI
1110 VideoPortReadPortUshort(
1111 IN PUSHORT Port);
1112
1113 VPAPI
1114 VOID
1115 NTAPI
1116 VideoPortReadRegisterBufferUchar(
1117 IN PUCHAR Register,
1118 OUT PUCHAR Buffer,
1119 IN ULONG Count);
1120
1121 VPAPI
1122 VOID
1123 NTAPI
1124 VideoPortReadRegisterBufferUlong(
1125 IN PULONG Register,
1126 OUT PULONG Buffer,
1127 IN ULONG Count);
1128
1129 VPAPI
1130 VOID
1131 NTAPI
1132 VideoPortReadRegisterBufferUshort(
1133 IN PUSHORT Register,
1134 OUT PUSHORT Buffer,
1135 IN ULONG Count);
1136
1137 VPAPI
1138 UCHAR
1139 NTAPI
1140 VideoPortReadRegisterUchar(
1141 IN PUCHAR Register);
1142
1143 VPAPI
1144 ULONG
1145 NTAPI
1146 VideoPortReadRegisterUlong(
1147 IN PULONG Register);
1148
1149 VPAPI
1150 USHORT
1151 NTAPI
1152 VideoPortReadRegisterUshort(
1153 IN PUSHORT Register);
1154
1155 VPAPI
1156 VOID
1157 NTAPI
1158 VideoPortReleaseBuffer(
1159 IN PVOID HwDeviceExtension,
1160 IN PVOID Buffer);
1161
1162 VPAPI
1163 VOID
1164 NTAPI
1165 VideoPortReleaseDeviceLock(
1166 IN PVOID HwDeviceExtension);
1167
1168 VPAPI
1169 BOOLEAN
1170 NTAPI
1171 VideoPortScanRom(
1172 PVOID HwDeviceExtension,
1173 PUCHAR RomBase,
1174 ULONG RomLength,
1175 PUCHAR String);
1176
1177 VPAPI
1178 ULONG
1179 NTAPI
1180 VideoPortSetBusData(
1181 IN PVOID HwDeviceExtension,
1182 IN BUS_DATA_TYPE BusDataType,
1183 IN ULONG SlotNumber,
1184 IN PVOID Buffer,
1185 IN ULONG Offset,
1186 IN ULONG Length);
1187
1188 VPAPI
1189 VP_STATUS
1190 NTAPI
1191 VideoPortSetRegistryParameters(
1192 IN PVOID HwDeviceExtension,
1193 IN PWSTR ValueName,
1194 IN PVOID ValueData,
1195 IN ULONG ValueLength);
1196
1197 VPAPI
1198 VP_STATUS
1199 NTAPI
1200 VideoPortSetTrappedEmulatorPorts(
1201 IN PVOID HwDeviceExtension,
1202 IN ULONG NumAccessRanges,
1203 IN PVIDEO_ACCESS_RANGE AccessRange);
1204
1205 VPAPI
1206 VOID
1207 NTAPI
1208 VideoPortStallExecution(
1209 IN ULONG Microseconds);
1210
1211 VPAPI
1212 VOID
1213 NTAPI
1214 VideoPortStartTimer(
1215 IN PVOID HwDeviceExtension);
1216
1217 VPAPI
1218 VOID
1219 NTAPI
1220 VideoPortStopTimer(
1221 IN PVOID HwDeviceExtension);
1222
1223 VPAPI
1224 BOOLEAN
1225 NTAPI
1226 VideoPortSynchronizeExecution(
1227 IN PVOID HwDeviceExtension,
1228 IN VIDEO_SYNCHRONIZE_PRIORITY Priority,
1229 IN PMINIPORT_SYNCHRONIZE_ROUTINE SynchronizeRoutine,
1230 IN PVOID Context);
1231
1232 VPAPI
1233 VP_STATUS
1234 NTAPI
1235 VideoPortUnmapMemory(
1236 IN PVOID HwDeviceExtension,
1237 IN OUT PVOID VirtualAddress,
1238 IN HANDLE ProcessHandle);
1239
1240 VPAPI
1241 VP_STATUS
1242 NTAPI
1243 VideoPortVerifyAccessRanges(
1244 IN PVOID HwDeviceExtension,
1245 IN ULONG NumAccessRanges,
1246 IN PVIDEO_ACCESS_RANGE AccessRanges);
1247
1248 VPAPI
1249 VOID
1250 NTAPI
1251 VideoPortWritePortBufferUchar(
1252 IN PUCHAR Port,
1253 IN PUCHAR Buffer,
1254 IN ULONG Count);
1255
1256 VPAPI
1257 VOID
1258 NTAPI
1259 VideoPortWritePortBufferUlong(
1260 IN PULONG Port,
1261 IN PULONG Buffer,
1262 IN ULONG Count);
1263
1264 VPAPI
1265 VOID
1266 NTAPI
1267 VideoPortWritePortBufferUshort(
1268 IN PUSHORT Port,
1269 IN PUSHORT Buffer,
1270 IN ULONG Count);
1271
1272 VPAPI
1273 VOID
1274 NTAPI
1275 VideoPortWritePortUchar(
1276 IN PUCHAR Port,
1277 IN UCHAR Value);
1278
1279 VPAPI
1280 VOID
1281 NTAPI
1282 VideoPortWritePortUlong(
1283 IN PULONG Port,
1284 IN ULONG Value);
1285
1286 VPAPI
1287 VOID
1288 NTAPI
1289 VideoPortWritePortUshort(
1290 IN PUSHORT Port,
1291 IN USHORT Value);
1292
1293 VPAPI
1294 VOID
1295 NTAPI
1296 VideoPortWriteRegisterBufferUchar(
1297 IN PUCHAR Register,
1298 IN PUCHAR Buffer,
1299 IN ULONG Count);
1300
1301 VPAPI
1302 VOID
1303 NTAPI
1304 VideoPortWriteRegisterBufferUlong(
1305 IN PULONG Register,
1306 IN PULONG Buffer,
1307 IN ULONG Count);
1308
1309 VPAPI
1310 VOID
1311 NTAPI
1312 VideoPortWriteRegisterBufferUshort(
1313 IN PUSHORT Register,
1314 IN PUSHORT Buffer,
1315 IN ULONG Count);
1316
1317 VPAPI
1318 VOID
1319 NTAPI
1320 VideoPortWriteRegisterUchar(
1321 IN PUCHAR Register,
1322 IN UCHAR Value);
1323
1324 VPAPI
1325 VOID
1326 NTAPI
1327 VideoPortWriteRegisterUlong(
1328 IN PULONG Register,
1329 IN ULONG Value);
1330
1331 VPAPI
1332 VOID
1333 NTAPI
1334 VideoPortWriteRegisterUshort(
1335 IN PUSHORT Register,
1336 IN USHORT Value);
1337
1338 VPAPI
1339 VOID
1340 NTAPI
1341 VideoPortZeroDeviceMemory(
1342 IN PVOID Destination,
1343 IN ULONG Length);
1344
1345 VPAPI
1346 VOID
1347 NTAPI
1348 VideoPortZeroMemory(
1349 IN PVOID Destination,
1350 IN ULONG Length);
1351
1352 VPAPI
1353 PVOID
1354 NTAPI
1355 VideoPortAllocateContiguousMemory(
1356 IN PVOID HwDeviceExtension,
1357 IN ULONG NumberOfBytes,
1358 IN PHYSICAL_ADDRESS HighestAcceptableAddress);
1359
1360 VPAPI
1361 PVOID
1362 NTAPI
1363 VideoPortGetCommonBuffer(
1364 IN PVOID HwDeviceExtension,
1365 IN ULONG DesiredLength,
1366 IN ULONG Alignment,
1367 OUT PPHYSICAL_ADDRESS LogicalAddress,
1368 OUT PULONG pActualLength,
1369 IN BOOLEAN CacheEnabled);
1370
1371 VPAPI
1372 VOID
1373 NTAPI
1374 VideoPortFreeCommonBuffer(
1375 IN PVOID HwDeviceExtension,
1376 IN ULONG Length,
1377 IN PVOID VirtualAddress,
1378 IN PHYSICAL_ADDRESS LogicalAddress,
1379 IN BOOLEAN CacheEnabled);
1380
1381 VPAPI
1382 PDMA
1383 NTAPI
1384 VideoPortDoDma(
1385 IN PVOID HwDeviceExtension,
1386 IN PDMA pDma,
1387 IN DMA_FLAGS DmaFlags);
1388
1389 VPAPI
1390 BOOLEAN
1391 NTAPI
1392 VideoPortLockPages(
1393 IN PVOID HwDeviceExtension,
1394 IN OUT PVIDEO_REQUEST_PACKET pVrp,
1395 IN OUT PEVENT pUEvent,
1396 IN PEVENT pDisplayEvent,
1397 IN DMA_FLAGS DmaFlags);
1398
1399 VPAPI
1400 BOOLEAN
1401 NTAPI
1402 VideoPortUnlockPages(
1403 IN PVOID hwDeviceExtension,
1404 IN OUT PDMA pDma);
1405
1406 VPAPI
1407 BOOLEAN
1408 NTAPI
1409 VideoPortSignalDmaComplete(
1410 IN PVOID HwDeviceExtension,
1411 IN PDMA pDmaHandle);
1412
1413 VPAPI
1414 PVOID
1415 NTAPI
1416 VideoPortGetMdl(
1417 IN PVOID HwDeviceExtension,
1418 IN PDMA pDma);
1419
1420 VPAPI
1421 PVOID
1422 NTAPI
1423 VideoPortGetDmaContext(
1424 IN PVOID HwDeviceExtension,
1425 IN PDMA pDma);
1426
1427 VPAPI
1428 VOID
1429 NTAPI
1430 VideoPortSetDmaContext(
1431 IN PVOID HwDeviceExtension,
1432 OUT PDMA pDma,
1433 IN PVOID InstanceContext);
1434
1435 VPAPI
1436 ULONG
1437 NTAPI
1438 VideoPortGetBytesUsed(
1439 IN PVOID HwDeviceExtension,
1440 IN PDMA pDma);
1441
1442 VPAPI
1443 VOID
1444 NTAPI
1445 VideoPortSetBytesUsed(
1446 IN PVOID HwDeviceExtension,
1447 IN OUT PDMA pDma,
1448 IN ULONG BytesUsed);
1449
1450 VPAPI
1451 PDMA
1452 NTAPI
1453 VideoPortAssociateEventsWithDmaHandle(
1454 IN PVOID HwDeviceExtension,
1455 IN OUT PVIDEO_REQUEST_PACKET pVrp,
1456 IN PVOID MappedUserEvent,
1457 IN PVOID DisplayDriverEvent);
1458
1459 VPAPI
1460 PDMA
1461 NTAPI
1462 VideoPortMapDmaMemory(
1463 IN PVOID HwDeviceExtension,
1464 IN PVIDEO_REQUEST_PACKET pVrp,
1465 IN PHYSICAL_ADDRESS BoardAddress,
1466 IN PULONG Length,
1467 IN PULONG InIoSpace,
1468 IN PVOID MappedUserEvent,
1469 IN PVOID DisplayDriverEvent,
1470 IN OUT PVOID *VirtualAddress);
1471
1472 VPAPI
1473 BOOLEAN
1474 NTAPI
1475 VideoPortUnmapDmaMemory(
1476 IN PVOID HwDeviceExtension,
1477 IN PVOID VirtualAddress,
1478 IN HANDLE ProcessHandle,
1479 IN PDMA BoardMemoryHandle);
1480
1481 VPAPI
1482 VP_STATUS
1483 NTAPI
1484 VideoPortCreateSecondaryDisplay(
1485 IN PVOID HwDeviceExtension,
1486 IN OUT PVOID *SecondaryDeviceExtension,
1487 IN ULONG ulFlag);
1488
1489 VPAPI
1490 PVP_DMA_ADAPTER
1491 NTAPI
1492 VideoPortGetDmaAdapter(
1493 IN PVOID HwDeviceExtension,
1494 IN PVP_DEVICE_DESCRIPTION VpDeviceDescription);
1495
1496 VPAPI
1497 VOID
1498 NTAPI
1499 VideoPortPutDmaAdapter(
1500 IN PVOID HwDeviceExtension,
1501 IN PVP_DMA_ADAPTER VpDmaAdapter);
1502
1503 VPAPI
1504 PVOID
1505 NTAPI
1506 VideoPortAllocateCommonBuffer(
1507 IN PVOID HwDeviceExtension,
1508 IN PVP_DMA_ADAPTER VpDmaAdapter,
1509 IN ULONG DesiredLength,
1510 OUT PPHYSICAL_ADDRESS LogicalAddress,
1511 IN BOOLEAN CacheEnabled,
1512 PVOID Reserved);
1513
1514 VPAPI
1515 VOID
1516 NTAPI
1517 VideoPortReleaseCommonBuffer(
1518 IN PVOID HwDeviceExtension,
1519 IN PVP_DMA_ADAPTER VpDmaAdapter,
1520 IN ULONG Length,
1521 IN PHYSICAL_ADDRESS LogicalAddress,
1522 IN PVOID VirtualAddress,
1523 IN BOOLEAN CacheEnabled);
1524
1525 VPAPI
1526 PVOID
1527 NTAPI
1528 VideoPortLockBuffer(
1529 IN PVOID HwDeviceExtension,
1530 IN PVOID BaseAddress,
1531 IN ULONG Length,
1532 IN VP_LOCK_OPERATION Operation);
1533
1534 VPAPI
1535 VOID
1536 NTAPI
1537 VideoPortUnLockBuffer(
1538 IN PVOID HwDeviceExtension,
1539 IN PVOID Mdl);
1540
1541 VPAPI
1542 VP_STATUS
1543 NTAPI
1544 VideoPortStartDma(
1545 IN PVOID HwDeviceExtension,
1546 IN PVP_DMA_ADAPTER VpDmaAdapter,
1547 IN PVOID Mdl,
1548 IN ULONG Offset,
1549 IN OUT PULONG pLength,
1550 IN PEXECUTE_DMA ExecuteDmaRoutine,
1551 IN PVOID Context,
1552 IN BOOLEAN WriteToDevice);
1553
1554 VPAPI
1555 VP_STATUS
1556 NTAPI
1557 VideoPortCompleteDma(
1558 IN PVOID HwDeviceExtension,
1559 IN PVP_DMA_ADAPTER VpDmaAdapter,
1560 IN PVP_SCATTER_GATHER_LIST VpScatterGather,
1561 IN BOOLEAN WriteToDevice);
1562
1563 VPAPI
1564 VP_STATUS
1565 NTAPI
1566 VideoPortCreateEvent(
1567 IN PVOID HwDeviceExtension,
1568 IN ULONG EventFlag,
1569 IN PVOID Unused,
1570 OUT PEVENT *ppEvent);
1571
1572 VPAPI
1573 VP_STATUS
1574 NTAPI
1575 VideoPortDeleteEvent(
1576 IN PVOID HwDeviceExtension,
1577 IN PEVENT pEvent);
1578
1579 VPAPI
1580 LONG
1581 NTAPI
1582 VideoPortSetEvent(
1583 IN PVOID HwDeviceExtension,
1584 IN PEVENT pEvent);
1585
1586 VPAPI
1587 VOID
1588 NTAPI
1589 VideoPortClearEvent(
1590 IN PVOID HwDeviceExtension,
1591 IN PEVENT pEvent);
1592
1593 VPAPI
1594 LONG
1595 NTAPI
1596 VideoPortReadStateEvent(
1597 IN PVOID HwDeviceExtension,
1598 IN PEVENT pEvent);
1599
1600 VPAPI
1601 VP_STATUS
1602 NTAPI
1603 VideoPortWaitForSingleObject(
1604 IN PVOID HwDeviceExtension,
1605 IN PVOID Object,
1606 IN PLARGE_INTEGER Timeout OPTIONAL);
1607
1608 VPAPI
1609 PVOID
1610 NTAPI
1611 VideoPortAllocatePool(
1612 IN PVOID HwDeviceExtension,
1613 IN VP_POOL_TYPE PoolType,
1614 IN SIZE_T NumberOfBytes,
1615 IN ULONG Tag);
1616
1617 VPAPI
1618 VOID
1619 NTAPI
1620 VideoPortFreePool(
1621 IN PVOID HwDeviceExtension,
1622 IN PVOID Ptr);
1623
1624 VPAPI
1625 VP_STATUS
1626 NTAPI
1627 VideoPortCreateSpinLock(
1628 IN PVOID HwDeviceExtension,
1629 OUT PSPIN_LOCK *SpinLock);
1630
1631 VPAPI
1632 VP_STATUS
1633 NTAPI
1634 VideoPortDeleteSpinLock(
1635 IN PVOID HwDeviceExtension,
1636 IN PSPIN_LOCK SpinLock);
1637
1638 VPAPI
1639 VOID
1640 NTAPI
1641 VideoPortAcquireSpinLock(
1642 IN PVOID HwDeviceExtension,
1643 IN PSPIN_LOCK SpinLock,
1644 OUT PUCHAR OldIrql);
1645
1646 VPAPI
1647 VOID
1648 NTAPI
1649 VideoPortAcquireSpinLockAtDpcLevel(
1650 IN PVOID HwDeviceExtension,
1651 IN PSPIN_LOCK SpinLock);
1652
1653 VPAPI
1654 VOID
1655 NTAPI
1656 VideoPortReleaseSpinLock(
1657 IN PVOID HwDeviceExtension,
1658 IN PSPIN_LOCK SpinLock,
1659 IN UCHAR NewIrql);
1660
1661 VPAPI
1662 VOID
1663 NTAPI
1664 VideoPortReleaseSpinLockFromDpcLevel(
1665 IN PVOID HwDeviceExtension,
1666 IN PSPIN_LOCK SpinLock);
1667
1668 VPAPI
1669 VOID
1670 NTAPI
1671 VideoPortQuerySystemTime(
1672 OUT PLARGE_INTEGER CurrentTime);
1673
1674 VPAPI
1675 BOOLEAN
1676 NTAPI
1677 VideoPortCheckForDeviceExistence(
1678 IN PVOID HwDeviceExtension,
1679 IN USHORT VendorId,
1680 IN USHORT DeviceId,
1681 IN UCHAR RevisionId,
1682 IN USHORT SubVendorId,
1683 IN USHORT SubSystemId,
1684 IN ULONG Flags);
1685
1686 VPAPI
1687 ULONG
1688 NTAPI
1689 VideoPortGetAssociatedDeviceID(
1690 IN PVOID DeviceObject);
1691
1692 VPAPI
1693 VP_STATUS
1694 NTAPI
1695 VideoPortFlushRegistry(
1696 PVOID HwDeviceExtension);
1697
1698 VPAPI
1699 VP_STATUS
1700 NTAPI
1701 VideoPortGetVersion(
1702 IN PVOID HwDeviceExtension,
1703 IN OUT PVPOSVERSIONINFO pVpOsVersionInfo);
1704
1705 VPAPI
1706 BOOLEAN
1707 NTAPI
1708 VideoPortIsNoVesa(VOID);
1709
1710 VPAPI
1711 VP_STATUS
1712 NTAPI
1713 VideoPortRegisterBugcheckCallback(
1714 IN PVOID HwDeviceExtension,
1715 IN ULONG BugcheckCode,
1716 IN PVIDEO_BUGCHECK_CALLBACK Callback,
1717 IN ULONG BugcheckDataSize);
1718
1719 VPAPI
1720 PVIDEO_DEBUG_REPORT
1721 NTAPI
1722 VideoPortDbgReportCreate(
1723 IN PVOID HwDeviceExtension,
1724 IN ULONG ulCode,
1725 IN ULONG_PTR ulpArg1,
1726 IN ULONG_PTR ulpArg2,
1727 IN ULONG_PTR ulpArg3,
1728 IN ULONG_PTR ulpArg4);
1729
1730 VPAPI
1731 BOOLEAN
1732 NTAPI
1733 VideoPortDbgReportSecondaryData(
1734 IN OUT PVIDEO_DEBUG_REPORT pReport,
1735 IN PVOID pvData,
1736 IN ULONG ulDataSize);
1737
1738 VPAPI
1739 VOID
1740 NTAPI
1741 VideoPortDbgReportComplete(
1742 IN OUT PVIDEO_DEBUG_REPORT pReport);
1743
1744 #ifdef __cplusplus
1745 }
1746 #endif