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