mingw-5.1.4/win32/include/ddk/video.h
changeset 0 76b1f169d9fe
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mingw-5.1.4/win32/include/ddk/video.h	Fri Apr 03 17:16:45 2009 +0100
@@ -0,0 +1,1566 @@
+/*
+ * video.h
+ *
+ * Video port and miniport driver interface
+ *
+ * This file is part of the w32api package.
+ *
+ * Contributors:
+ *   Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
+ *
+ * THIS SOFTWARE IS NOT COPYRIGHTED
+ *
+ * This source code is offered for use in the public domain. You may
+ * use, modify or distribute it freely.
+ *
+ * This code is distributed in the hope that it will be useful but
+ * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
+ * DISCLAIMED. This includes but is not limited to warranties of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ */
+
+#ifndef __VIDEO_H
+#define __VIDEO_H
+
+
+#if __GNUC__ >=3
+#pragma GCC system_header
+#endif
+
+#ifdef __WINDDI_H
+#error winddi.h cannot be included with video.h
+#else
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "ntddk.h"
+
+#if defined(_VIDEOPORT_)
+  #define VPAPI DECLSPEC_EXPORT
+#else
+  #define VPAPI DECLSPEC_IMPORT
+#endif
+
+#include "videoagp.h"
+#include "ntddvdeo.h"
+
+
+typedef LONG VP_STATUS;
+typedef VP_STATUS *PVP_STATUS;
+typedef struct __DMA_PARAMETERS * PDMA;
+typedef struct _VIDEO_PORT_EVENT *PEVENT;
+typedef struct _VIDEO_PORT_SPIN_LOCK *PSPIN_LOCK;
+typedef struct __VP_DMA_ADAPTER *PVP_DMA_ADAPTER;
+
+#define DISPLAY_ADAPTER_HW_ID             0xFFFFFFFF
+
+#define EVENT_TYPE_MASK                   1
+#define SYNCHRONIZATION_EVENT             0
+#define NOTIFICATION_EVENT                1
+
+#define INITIAL_EVENT_STATE_MASK          2
+#define INITIAL_EVENT_NOT_SIGNALED        0
+#define INITIAL_EVENT_SIGNALED            2
+
+typedef enum VIDEO_DEBUG_LEVEL {
+  Error = 0,
+  Warn,
+  Trace,
+  Info
+} VIDEO_DEBUG_LEVEL, *PVIDEO_DEBUG_LEVEL;
+
+typedef enum {
+  VideoPortUnlockAfterDma = 1,
+  VideoPortKeepPagesLocked,
+  VideoPortDmaInitOnly
+} DMA_FLAGS;
+
+typedef enum _HW_DMA_RETURN {
+  DmaAsyncReturn,
+  DmaSyncReturn
+} HW_DMA_RETURN, *PHW_DMA_RETURN;
+
+typedef HW_DMA_RETURN
+(*PVIDEO_HW_START_DMA)(
+    PVOID  HwDeviceExtension,
+    PDMA  pDma);
+
+
+#ifdef DBG
+
+#define PAGED_CODE() \
+  if (VideoPortGetCurrentIrql() > 1 /* APC_LEVEL */) \
+  { \
+    VideoPortDebugPrint(Error, "Video: Pageable code called at IRQL %d\n", VideoPortGetCurrentIrql() ); \
+    ASSERT(FALSE); \
+  }
+
+#else
+
+#define PAGED_CODE()
+
+#endif
+
+typedef struct _VIDEO_HARDWARE_CONFIGURATION_DATA {
+  INTERFACE_TYPE InterfaceType;
+  ULONG BusNumber;
+  USHORT Version;
+  USHORT Revision;
+  USHORT Irql;
+  USHORT Vector;
+  ULONG ControlBase;
+  ULONG ControlSize;
+  ULONG CursorBase;
+  ULONG CursorSize;
+  ULONG FrameBase;
+  ULONG FrameSize;
+} VIDEO_HARDWARE_CONFIGURATION_DATA, *PVIDEO_HARDWARE_CONFIGURATION_DATA;
+
+#define SIZE_OF_NT4_VIDEO_PORT_CONFIG_INFO       0x42
+#define SIZE_OF_NT4_VIDEO_HW_INITIALIZATION_DATA 0x28
+#define SIZE_OF_W2K_VIDEO_HW_INITIALIZATION_DATA 0x50
+
+typedef enum _VIDEO_DEVICE_DATA_TYPE {
+  VpMachineData = 0,
+  VpCmosData,
+  VpBusData,
+  VpControllerData,
+  VpMonitorData
+} VIDEO_DEVICE_DATA_TYPE, *PVIDEO_DEVICE_DATA_TYPE;
+
+
+
+/* Video miniport driver functions */
+
+typedef struct _VP_SCATTER_GATHER_ELEMENT {
+  PHYSICAL_ADDRESS  Address;
+  ULONG  Length;
+  ULONG_PTR  Reserved;
+} VP_SCATTER_GATHER_ELEMENT, *PVP_SCATTER_GATHER_ELEMENT;
+
+typedef struct _VP_SCATTER_GATHER_LIST {
+  ULONG  NumberOfElements;
+  ULONG_PTR  Reserved;
+  VP_SCATTER_GATHER_ELEMENT  Elements[0];
+} VP_SCATTER_GATHER_LIST, *PVP_SCATTER_GATHER_LIST;
+
+typedef VOID DDKAPI
+(*PEXECUTE_DMA)(
+  /*IN*/ PVOID  HwDeviceExtension,
+  /*IN*/ PVP_DMA_ADAPTER  VpDmaAdapter,
+  /*IN*/ PVP_SCATTER_GATHER_LIST  SGList,
+  /*IN*/ PVOID  Context);
+
+typedef PVOID DDKAPI
+(*PVIDEO_PORT_GET_PROC_ADDRESS)(
+/*IN*/ PVOID  HwDeviceExtension,
+/*IN*/ PUCHAR  FunctionName);
+
+typedef struct _VIDEO_PORT_CONFIG_INFO {
+  ULONG  Length;
+  ULONG  SystemIoBusNumber;
+  INTERFACE_TYPE  AdapterInterfaceType;
+  ULONG  BusInterruptLevel;
+  ULONG  BusInterruptVector;
+  KINTERRUPT_MODE  InterruptMode;
+  ULONG  NumEmulatorAccessEntries;
+  PEMULATOR_ACCESS_ENTRY  EmulatorAccessEntries;
+  ULONG_PTR  EmulatorAccessEntriesContext;
+  PHYSICAL_ADDRESS  VdmPhysicalVideoMemoryAddress;
+  ULONG  VdmPhysicalVideoMemoryLength;
+  ULONG  HardwareStateSize;
+  ULONG  DmaChannel;
+  ULONG  DmaPort;
+  UCHAR  DmaShareable;
+  UCHAR  InterruptShareable;
+  BOOLEAN  Master;
+  DMA_WIDTH  DmaWidth;
+  DMA_SPEED  DmaSpeed;
+  BOOLEAN  bMapBuffers;
+  BOOLEAN  NeedPhysicalAddresses;
+  BOOLEAN  DemandMode;
+  ULONG  MaximumTransferLength;
+  ULONG  NumberOfPhysicalBreaks;
+  BOOLEAN  ScatterGather;
+  ULONG  MaximumScatterGatherChunkSize;
+  PVIDEO_PORT_GET_PROC_ADDRESS VideoPortGetProcAddress;
+  PWSTR  DriverRegistryPath;
+  ULONGLONG  SystemMemorySize;
+} VIDEO_PORT_CONFIG_INFO, *PVIDEO_PORT_CONFIG_INFO;
+
+typedef VP_STATUS DDKAPI
+(*PVIDEO_HW_FIND_ADAPTER)(
+  /*IN*/ PVOID  HwDeviceExtension,
+  /*IN*/ PVOID  HwContext,
+  /*IN*/ PWSTR  ArgumentString,
+  /*IN OUT*/  PVIDEO_PORT_CONFIG_INFO  ConfigInfo,
+  /*OUT*/ PUCHAR  Again);
+
+typedef VP_STATUS DDKAPI
+(*PVIDEO_HW_POWER_GET)(
+  /*IN*/ PVOID  HwDeviceExtension,
+  /*IN*/ ULONG  HwId,
+  /*IN OUT*/  PVIDEO_POWER_MANAGEMENT  VideoPowerControl);
+
+/* PVIDEO_HW_GET_CHILD_DESCRIPTOR return values */
+#define VIDEO_ENUM_MORE_DEVICES           ERROR_CONTINUE
+#define VIDEO_ENUM_NO_MORE_DEVICES        ERROR_NO_MORE_DEVICES
+#define VIDEO_ENUM_INVALID_DEVICE         ERROR_INVALID_NAME
+
+/* PVIDEO_HW_GET_CHILD_DESCRIPTOR.ChildEnumInfo constants */
+typedef struct _VIDEO_CHILD_ENUM_INFO {
+  ULONG  Size;
+  ULONG  ChildDescriptorSize;
+  ULONG  ChildIndex;
+  ULONG  ACPIHwId;
+  PVOID  ChildHwDeviceExtension;
+} VIDEO_CHILD_ENUM_INFO, *PVIDEO_CHILD_ENUM_INFO;
+
+/* PVIDEO_HW_GET_CHILD_DESCRIPTOR.VideoChildType constants */
+typedef enum _VIDEO_CHILD_TYPE {
+  Monitor = 1,
+  NonPrimaryChip,
+  VideoChip,
+  Other
+} VIDEO_CHILD_TYPE, *PVIDEO_CHILD_TYPE;
+
+typedef VP_STATUS DDKAPI
+(*PVIDEO_HW_GET_CHILD_DESCRIPTOR)(
+  /*IN*/ PVOID  HwDeviceExtension,
+  /*IN*/ PVIDEO_CHILD_ENUM_INFO  ChildEnumInfo,
+  /*OUT*/  PVIDEO_CHILD_TYPE  VideoChildType,
+  /*OUT*/  PUCHAR  pChildDescriptor,
+  /*OUT*/  PULONG  UId,
+  /*OUT*/  PULONG  pUnused);
+
+typedef BOOLEAN DDKAPI
+(*PVIDEO_HW_INITIALIZE)(
+  /*IN*/ PVOID  HwDeviceExtension);
+
+typedef BOOLEAN DDKAPI
+(*PVIDEO_HW_INTERRUPT)(
+  /*IN*/ PVOID  HwDeviceExtension);
+
+/* VIDEO_ACCESS_RANGE.RangePassive */
+#define VIDEO_RANGE_PASSIVE_DECODE        1
+#define VIDEO_RANGE_10_BIT_DECODE         2
+
+#ifndef VIDEO_ACCESS_RANGE_DEFINED /* also in miniport.h */
+#define VIDEO_ACCESS_RANGE_DEFINED
+typedef struct _VIDEO_ACCESS_RANGE {
+  PHYSICAL_ADDRESS  RangeStart;
+  ULONG  RangeLength;
+  UCHAR  RangeInIoSpace;
+  UCHAR  RangeVisible;
+  UCHAR  RangeShareable;
+  UCHAR  RangePassive;
+} VIDEO_ACCESS_RANGE, *PVIDEO_ACCESS_RANGE;
+#endif
+
+typedef VOID DDKAPI
+(*PVIDEO_HW_LEGACYRESOURCES)(
+  /*IN*/ ULONG  VendorId,
+  /*IN*/ ULONG  DeviceId,
+  /*IN OUT*/  PVIDEO_ACCESS_RANGE  *LegacyResourceList,
+  /*IN OUT*/  PULONG  LegacyResourceCount);
+
+typedef VP_STATUS DDKAPI
+(*PMINIPORT_QUERY_DEVICE_ROUTINE)(
+  /*IN*/ PVOID  HwDeviceExtension,
+  /*IN*/ PVOID  Context,
+  /*IN*/ VIDEO_DEVICE_DATA_TYPE  DeviceDataType,
+  /*IN*/ PVOID  Identifier,
+  /*IN*/ ULONG  IdentifierLength,
+  /*IN*/ PVOID  ConfigurationData,
+  /*IN*/ ULONG  ConfigurationDataLength,
+  /*IN OUT*/  PVOID  ComponentInformation,
+  /*IN*/ ULONG  ComponentInformationLength);
+
+typedef struct _QUERY_INTERFACE {
+  CONST GUID  *InterfaceType;
+  USHORT  Size;
+  USHORT  Version;
+  PINTERFACE  Interface;
+  PVOID  InterfaceSpecificData;
+} QUERY_INTERFACE, *PQUERY_INTERFACE;
+
+typedef VP_STATUS DDKAPI
+(*PVIDEO_HW_QUERY_INTERFACE)(
+  /*IN*/ PVOID  HwDeviceExtension,
+  /*IN OUT*/  PQUERY_INTERFACE  QueryInterface);
+
+typedef VP_STATUS DDKAPI
+(*PMINIPORT_GET_REGISTRY_ROUTINE)(
+  /*IN*/ PVOID  HwDeviceExtension,
+  /*IN*/ PVOID  Context,
+  /*IN OUT*/  PWSTR  ValueName,
+  /*IN OUT*/  PVOID  ValueData,
+  /*IN*/ ULONG  ValueLength);
+
+typedef BOOLEAN DDKAPI
+(*PVIDEO_HW_RESET_HW)(
+  /*IN*/ PVOID  HwDeviceExtension,
+  /*IN*/ ULONG  Columns,
+  /*IN*/ ULONG  Rows);
+
+typedef VP_STATUS DDKAPI
+(*PVIDEO_HW_POWER_SET)(
+  /*IN*/ PVOID  HwDeviceExtension,
+  /*IN*/ ULONG  HwId,
+  /*IN*/ PVIDEO_POWER_MANAGEMENT  VideoPowerControl);
+
+typedef struct _STATUS_BLOCK {
+   _ANONYMOUS_UNION union {
+    VP_STATUS  Status;
+    PVOID  Pointer;
+  } DUMMYUNIONNAME;
+  ULONG_PTR Information;
+} STATUS_BLOCK, *PSTATUS_BLOCK;
+
+typedef struct _VIDEO_REQUEST_PACKET {
+  ULONG  IoControlCode;
+  PSTATUS_BLOCK  StatusBlock;
+  PVOID  InputBuffer;
+  ULONG  InputBufferLength;
+  PVOID  OutputBuffer;
+  ULONG  OutputBufferLength;
+} VIDEO_REQUEST_PACKET, *PVIDEO_REQUEST_PACKET;
+
+typedef BOOLEAN DDKAPI
+(*PVIDEO_HW_START_IO)(
+  /*IN*/ PVOID  HwDeviceExtension,
+  /*IN*/ PVIDEO_REQUEST_PACKET  RequestPacket);
+
+typedef BOOLEAN DDKAPI
+(*PMINIPORT_SYNCHRONIZE_ROUTINE)(
+  /*IN*/ PVOID  Context);
+
+typedef VOID DDKAPI
+(*PVIDEO_HW_TIMER)(
+  /*IN*/ PVOID  HwDeviceExtension);
+
+typedef VOID DDKAPI
+(*PMINIPORT_DPC_ROUTINE)(
+  /*IN*/ PVOID  HwDeviceExtension,
+  /*IN*/ PVOID  Context);
+
+typedef VP_STATUS DDKAPI
+(*PDRIVER_IO_PORT_UCHAR)(
+  /*IN*/ ULONG_PTR  Context,
+  /*IN*/ ULONG  Port,
+  /*IN*/ UCHAR  AccessMode,
+  /*IN*/ PUCHAR  Data);
+
+typedef VP_STATUS DDKAPI
+(*PDRIVER_IO_PORT_UCHAR_STRING)(
+  /*IN*/ ULONG_PTR  Context,
+  /*IN*/ ULONG  Port,
+  /*IN*/ UCHAR  AccessMode,
+  /*IN*/ PUCHAR  Data,
+  /*IN*/ ULONG  DataLength);
+
+typedef VP_STATUS DDKAPI
+(*PDRIVER_IO_PORT_ULONG)(
+  /*IN*/ ULONG_PTR  Context,
+  /*IN*/ ULONG  Port,
+  /*IN*/ UCHAR  AccessMode,
+  /*IN*/ PULONG  Data);
+
+typedef VP_STATUS DDKAPI
+(*PDRIVER_IO_PORT_ULONG_STRING)(
+  /*IN*/ ULONG_PTR  Context,
+  /*IN*/ ULONG  Port,
+  /*IN*/ UCHAR  AccessMode,
+  /*IN*/ PULONG  Data,
+  /*IN*/ ULONG  DataLength);
+
+typedef VP_STATUS DDKAPI
+(*PDRIVER_IO_PORT_USHORT)(
+  /*IN*/ ULONG_PTR  Context,
+  /*IN*/ ULONG  Port,
+  /*IN*/ UCHAR  AccessMode,
+  /*IN*/ PUSHORT  Data);
+
+typedef VP_STATUS DDKAPI
+(*PDRIVER_IO_PORT_USHORT_STRING)(
+  /*IN*/ ULONG_PTR  Context,
+  /*IN*/ ULONG  Port,
+  /*IN*/ UCHAR  AccessMode,
+  /*IN*/ PUSHORT  Data,
+  /*IN*/ ULONG  DataLength);
+
+
+
+typedef struct _INT10_BIOS_ARGUMENTS {
+  ULONG  Eax;
+  ULONG  Ebx;
+  ULONG  Ecx;
+  ULONG  Edx;
+  ULONG  Esi;
+  ULONG  Edi;
+  ULONG  Ebp;
+  USHORT  SegDs;
+  USHORT  SegEs;
+} INT10_BIOS_ARGUMENTS, *PINT10_BIOS_ARGUMENTS;
+
+typedef struct _VIDEO_CHILD_STATE {
+  ULONG  Id;
+  ULONG  State;
+} VIDEO_CHILD_STATE, *PVIDEO_CHILD_STATE;
+
+typedef struct _VIDEO_CHILD_STATE_CONFIGURATION {
+  ULONG  Count;
+  VIDEO_CHILD_STATE  ChildStateArray[ANYSIZE_ARRAY];
+} VIDEO_CHILD_STATE_CONFIGURATION, *PVIDEO_CHILD_STATE_CONFIGURATION;
+
+typedef struct _VIDEO_HW_INITIALIZATION_DATA {
+  ULONG  HwInitDataSize;
+  INTERFACE_TYPE  AdapterInterfaceType;
+  PVIDEO_HW_FIND_ADAPTER  HwFindAdapter;
+  PVIDEO_HW_INITIALIZE  HwInitialize;
+  PVIDEO_HW_INTERRUPT  HwInterrupt;
+  PVIDEO_HW_START_IO  HwStartIO;
+  ULONG  HwDeviceExtensionSize;
+  ULONG  StartingDeviceNumber;
+  PVIDEO_HW_RESET_HW  HwResetHw;
+  PVIDEO_HW_TIMER  HwTimer;
+  PVIDEO_HW_START_DMA  HwStartDma;
+  PVIDEO_HW_POWER_SET  HwSetPowerState;
+  PVIDEO_HW_POWER_GET  HwGetPowerState;
+  PVIDEO_HW_GET_CHILD_DESCRIPTOR  HwGetVideoChildDescriptor;
+  PVIDEO_HW_QUERY_INTERFACE  HwQueryInterface;
+  ULONG  HwChildDeviceExtensionSize;
+  PVIDEO_ACCESS_RANGE  HwLegacyResourceList;
+  ULONG  HwLegacyResourceCount;
+  PVIDEO_HW_LEGACYRESOURCES  HwGetLegacyResources;
+  BOOLEAN  AllowEarlyEnumeration;
+  ULONG  Reserved;
+} VIDEO_HW_INITIALIZATION_DATA, *PVIDEO_HW_INITIALIZATION_DATA;
+
+  /* VIDEO_PORT_AGP_INTERFACE.Version contants */
+#define VIDEO_PORT_AGP_INTERFACE_VERSION_1 1
+
+typedef struct _VIDEO_PORT_AGP_INTERFACE {
+  SHORT  Size;
+  SHORT  Version;
+  PVOID  Context;
+  PINTERFACE_REFERENCE  InterfaceReference;
+  PINTERFACE_DEREFERENCE  InterfaceDereference;
+  PAGP_RESERVE_PHYSICAL  AgpReservePhysical;
+  PAGP_RELEASE_PHYSICAL  AgpReleasePhysical;
+  PAGP_COMMIT_PHYSICAL  AgpCommitPhysical;
+  PAGP_FREE_PHYSICAL  AgpFreePhysical;
+  PAGP_RESERVE_VIRTUAL  AgpReserveVirtual;
+  PAGP_RELEASE_VIRTUAL  AgpReleaseVirtual;
+  PAGP_COMMIT_VIRTUAL  AgpCommitVirtual;
+  PAGP_FREE_VIRTUAL  AgpFreeVirtual;
+  ULONGLONG  AgpAllocationLimit;
+} VIDEO_PORT_AGP_INTERFACE, *PVIDEO_PORT_AGP_INTERFACE;
+
+  /* VIDEO_PORT_AGP_INTERFACE_2.Version constants */
+#define VIDEO_PORT_AGP_INTERFACE_VERSION_2 2
+
+typedef struct _VIDEO_PORT_AGP_INTERFACE_2 {
+  /*IN*/ USHORT  Size;
+  /*IN*/ USHORT  Version;
+  /*OUT*/ PVOID  Context;
+  /*OUT*/ PINTERFACE_REFERENCE  InterfaceReference;
+  /*OUT*/ PINTERFACE_DEREFERENCE  InterfaceDereference;
+  /*OUT*/ PAGP_RESERVE_PHYSICAL  AgpReservePhysical;
+  /*OUT*/ PAGP_RELEASE_PHYSICAL  AgpReleasePhysical;
+  /*OUT*/ PAGP_COMMIT_PHYSICAL  AgpCommitPhysical;
+  /*OUT*/ PAGP_FREE_PHYSICAL  AgpFreePhysical;
+  /*OUT*/ PAGP_RESERVE_VIRTUAL  AgpReserveVirtual;
+  /*OUT*/ PAGP_RELEASE_VIRTUAL  AgpReleaseVirtual;
+  /*OUT*/ PAGP_COMMIT_VIRTUAL  AgpCommitVirtual;
+  /*OUT*/ PAGP_FREE_VIRTUAL  AgpFreeVirtual;
+  /*OUT*/ ULONGLONG  AgpAllocationLimit;
+  /*OUT*/ PAGP_SET_RATE  AgpSetRate;
+} VIDEO_PORT_AGP_INTERFACE_2, *PVIDEO_PORT_AGP_INTERFACE_2;
+
+#define VIDEO_PORT_I2C_INTERFACE_VERSION_1  1
+
+typedef VOID DDKAPI
+(*PVIDEO_WRITE_CLOCK_LINE)(
+  PVOID HwDeviceExtension,
+  UCHAR Data);
+
+typedef VOID DDKAPI
+(*PVIDEO_WRITE_DATA_LINE)(
+  PVOID HwDeviceExtension,
+  UCHAR Data);
+
+typedef BOOLEAN DDKAPI
+(*PVIDEO_READ_CLOCK_LINE)(
+  PVOID HwDeviceExtension);
+
+typedef BOOLEAN DDKAPI
+(*PVIDEO_READ_DATA_LINE)(
+  PVOID HwDeviceExtension);
+
+typedef struct _I2C_CALLBACKS
+{
+  /*IN*/ PVIDEO_WRITE_CLOCK_LINE  WriteClockLine;
+  /*IN*/ PVIDEO_WRITE_DATA_LINE  WriteDataLine;
+  /*IN*/ PVIDEO_READ_CLOCK_LINE  ReadClockLine;
+  /*IN*/ PVIDEO_READ_DATA_LINE  ReadDataLine;
+} I2C_CALLBACKS, *PI2C_CALLBACKS;
+
+typedef BOOLEAN DDKAPI
+(*PI2C_START)(
+  /*IN*/ PVOID  HwDeviceExtension,
+  /*IN*/ PI2C_CALLBACKS  I2CCallbacks);
+
+typedef BOOLEAN DDKAPI
+(*PI2C_STOP)(
+  /*IN*/ PVOID  HwDeviceExtension,
+  /*IN*/ PI2C_CALLBACKS  I2CCallbacks);
+
+typedef BOOLEAN DDKAPI
+(*PI2C_WRITE)(
+  /*IN*/ PVOID  HwDeviceExtension,
+  /*IN*/ PI2C_CALLBACKS  I2CCallbacks,
+  /*IN*/ PUCHAR  Buffer,
+  /*IN*/ ULONG  Length);
+
+typedef BOOLEAN DDKAPI
+(*PI2C_READ)(
+  /*IN*/ PVOID  HwDeviceExtension,
+  /*IN*/ PI2C_CALLBACKS  I2CCallbacks,
+  /*OUT*/ PUCHAR  Buffer,
+  /*IN*/ ULONG  Length);
+
+typedef struct _VIDEO_PORT_I2C_INTERFACE {
+  USHORT  Size;
+  USHORT  Version;
+  PVOID  Context;
+  PINTERFACE_REFERENCE  InterfaceReference;
+  PINTERFACE_DEREFERENCE  InterfaceDereference;
+  PI2C_START  I2CStart;
+  PI2C_STOP  I2CStop;
+  PI2C_WRITE  I2CWrite;
+  PI2C_READ  I2CRead;
+} VIDEO_PORT_I2C_INTERFACE, *PVIDEO_PORT_I2C_INTERFACE;
+
+  /* VIDEO_PORT_INT10_INTERFACE.Version constants */
+#define VIDEO_PORT_INT10_INTERFACE_VERSION_1 1
+
+typedef VP_STATUS DDKAPI
+(*PINT10_ALLOCATE_BUFFER)(
+  /*IN*/ PVOID  Context,
+  /*OUT*/ PUSHORT  Seg,
+  /*OUT*/ PUSHORT  Off,
+  /*IN OUT*/ PULONG  Length);
+
+typedef VP_STATUS DDKAPI
+(*PINT10_CALL_BIOS)(
+  /*IN*/ PVOID  Context,
+  /*IN OUT*/ PINT10_BIOS_ARGUMENTS  BiosArguments);
+
+typedef VP_STATUS DDKAPI
+(*PINT10_FREE_BUFFER)(
+  /*IN*/ PVOID  Context,
+  /*IN*/ USHORT  Seg,
+  /*IN*/ USHORT  Off);
+
+typedef VP_STATUS DDKAPI
+(*PINT10_READ_MEMORY)(
+  /*IN*/ PVOID  Context,
+  /*IN*/ USHORT  Seg,
+  /*IN*/ USHORT  Off,
+  /*OUT*/ PVOID  Buffer,
+  /*IN*/ ULONG  Length);
+
+typedef VP_STATUS DDKAPI
+(*PINT10_WRITE_MEMORY)(
+  /*IN*/ PVOID  Context,
+  /*IN*/ USHORT  Seg,
+  /*IN*/ USHORT  Off,
+  /*IN*/ PVOID  Buffer,
+  /*IN*/ ULONG  Length);
+
+typedef struct _VIDEO_PORT_INT10_INTERFACE {
+  /*IN*/ USHORT  Size;
+  /*IN*/ USHORT  Version;
+  /*OUT*/ PVOID  Context;
+  /*OUT*/ PINTERFACE_REFERENCE  InterfaceReference;
+  /*OUT*/ PINTERFACE_DEREFERENCE  InterfaceDereference;
+  /*OUT*/ PINT10_ALLOCATE_BUFFER  Int10AllocateBuffer;
+  /*OUT*/ PINT10_FREE_BUFFER  Int10FreeBuffer;
+  /*OUT*/ PINT10_READ_MEMORY  Int10ReadMemory;
+  /*OUT*/ PINT10_WRITE_MEMORY  Int10WriteMemory;
+  /*OUT*/ PINT10_CALL_BIOS  Int10CallBios;
+} VIDEO_PORT_INT10_INTERFACE, *PVIDEO_PORT_INT10_INTERFACE;
+
+  /* Flags for VideoPortGetDeviceBase and VideoPortMapMemory */
+#define VIDEO_MEMORY_SPACE_MEMORY         0x00
+#define VIDEO_MEMORY_SPACE_IO             0x01
+#define VIDEO_MEMORY_SPACE_USER_MODE      0x02
+#define VIDEO_MEMORY_SPACE_DENSE          0x04
+#define VIDEO_MEMORY_SPACE_P6CACHE        0x08
+
+typedef struct _VIDEO_X86_BIOS_ARGUMENTS {
+  ULONG  Eax;
+  ULONG  Ebx;
+  ULONG  Ecx;
+  ULONG  Edx;
+  ULONG  Esi;
+  ULONG  Edi;
+  ULONG  Ebp;
+} VIDEO_X86_BIOS_ARGUMENTS, *PVIDEO_X86_BIOS_ARGUMENTS;
+
+typedef struct _VP_DEVICE_DESCRIPTION {
+  BOOLEAN  ScatterGather;
+  BOOLEAN  Dma32BitAddresses;
+  BOOLEAN  Dma64BitAddresses;
+  ULONG  MaximumLength;
+} VP_DEVICE_DESCRIPTION, *PVP_DEVICE_DESCRIPTION;
+
+typedef struct _VPOSVERSIONINFO {
+  /*IN*/ ULONG  Size;
+  /*OUT*/ ULONG  MajorVersion;
+  /*OUT*/ ULONG  MinorVersion;
+  /*OUT*/ ULONG  BuildNumber;
+  /*OUT*/ USHORT  ServicePackMajor;
+  /*OUT*/ USHORT  ServicePackMinor;
+} VPOSVERSIONINFO, *PVPOSVERSIONINFO;
+
+
+
+  /* Video port functions for miniports */
+
+VPAPI
+VOID
+DDKAPI
+VideoDebugPrint(
+  /*IN*/ ULONG  DebugPrintLevel,
+  /*IN*/ PCHAR  DebugMessage,
+  /*IN*/ ...);
+
+VPAPI
+VOID
+DDKAPI
+VideoPortAcquireDeviceLock(
+  /*IN*/ PVOID  HwDeviceExtension);
+
+VPAPI
+VOID
+DDKAPI
+VideoPortAcquireSpinLock(
+  /*IN*/ PVOID  HwDeviceExtension,
+  /*IN*/ PSPIN_LOCK  SpinLock,
+  /*OUT*/ PUCHAR  OldIrql);
+
+VPAPI
+VOID
+DDKAPI
+VideoPortAcquireSpinLockAtDpcLevel(
+  /*IN*/ PVOID  HwDeviceExtension,
+  /*IN*/ PSPIN_LOCK  SpinLock);
+
+VPAPI
+VP_STATUS
+DDKAPI
+VideoPortAllocateBuffer(
+  /*IN*/ PVOID  HwDeviceExtension,
+  /*IN*/ ULONG  Size,
+  /*OUT*/ PVOID  *Buffer);
+
+VPAPI
+PVOID
+DDKAPI
+VideoPortAllocateCommonBuffer(
+  /*IN*/ PVOID  HwDeviceExtension,
+  /*IN*/ PVP_DMA_ADAPTER  VpDmaAdapter,
+  /*IN*/ ULONG  DesiredLength,
+  /*OUT*/ PPHYSICAL_ADDRESS  LogicalAddress,
+  /*IN*/ BOOLEAN  CacheEnabled,
+  PVOID  Reserved);
+
+VPAPI
+PVOID
+DDKAPI
+VideoPortAllocateContiguousMemory(
+  /*IN*/ PVOID  HwDeviceExtension,
+  /*IN*/ ULONG  NumberOfBytes,
+  /*IN*/ PHYSICAL_ADDRESS  HighestAcceptableAddress);
+
+  /* VideoPortAllocatePool.PoolType constants */
+typedef enum _VP_POOL_TYPE {
+  VpNonPagedPool = 0,
+  VpPagedPool,
+  VpNonPagedPoolCacheAligned = 4,
+  VpPagedPoolCacheAligned
+} VP_POOL_TYPE, *PVP_POOL_TYPE;
+
+VPAPI
+PVOID
+DDKAPI
+VideoPortAllocatePool(
+  /*IN*/ PVOID  HwDeviceExtension,
+  /*IN*/ VP_POOL_TYPE  PoolType,
+  /*IN*/ SIZE_T  NumberOfBytes,
+  /*IN*/ ULONG  Tag);
+
+VPAPI
+PDMA
+DDKAPI
+VideoPortAssociateEventsWithDmaHandle(
+  /*IN*/ PVOID  HwDeviceExtension,
+  /*IN OUT*/ PVIDEO_REQUEST_PACKET  pVrp,
+  /*IN*/ PVOID  MappedUserEvent,
+  /*IN*/ PVOID  DisplayDriverEvent);
+
+  /* VideoPortCheckForDeviceExistence.Flags constants */
+#define CDE_USE_SUBSYSTEM_IDS             0x00000001
+#define CDE_USE_REVISION                  0x00000002
+
+VPAPI
+BOOLEAN
+DDKAPI
+VideoPortCheckForDeviceExistence(
+  /*IN*/ PVOID  HwDeviceExtension,
+  /*IN*/ USHORT  VendorId,
+  /*IN*/ USHORT  DeviceId,
+  /*IN*/ UCHAR  RevisionId,
+  /*IN*/ USHORT  SubVendorId,
+  /*IN*/ USHORT  SubSystemId,
+  /*IN*/ ULONG  Flags);
+
+VPAPI
+VOID
+DDKAPI
+VideoPortClearEvent(
+  /*IN*/ PVOID  HwDeviceExtension,
+  /*IN*/ PEVENT  pEvent);
+
+VPAPI
+ULONG
+DDKAPI
+VideoPortCompareMemory(
+  /*IN*/ PVOID  Source1,
+  /*IN*/ PVOID  Source2,
+  /*IN*/ ULONG  Length);
+
+VPAPI
+VP_STATUS
+DDKAPI
+VideoPortCompleteDma(
+  /*IN*/ PVOID  HwDeviceExtension,
+  /*IN*/ PVP_DMA_ADAPTER  VpDmaAdapter,
+  /*IN*/ PVP_SCATTER_GATHER_LIST  VpScatterGather,
+  /*IN*/ BOOLEAN  WriteToDevice);
+
+VPAPI
+VP_STATUS
+DDKAPI
+VideoPortCreateEvent(
+  /*IN*/ PVOID  HwDeviceExtension,
+  /*IN*/ ULONG  EventFlag,
+  /*IN*/ PVOID  Unused,
+  /*OUT*/ PEVENT  *ppEvent);
+
+VPAPI
+VP_STATUS
+DDKAPI
+VideoPortCreateSecondaryDisplay(
+  /*IN*/ PVOID  HwDeviceExtension,
+  /*IN OUT*/ PVOID  *SecondaryDeviceExtension,
+  /*IN*/ ULONG  ulFlag);
+
+VPAPI
+VP_STATUS
+DDKAPI
+VideoPortCreateSpinLock(
+  /*IN*/ PVOID  HwDeviceExtension,
+  /*OUT*/ PSPIN_LOCK  *SpinLock);
+
+typedef struct _DDC_CONTROL {
+  /*IN*/ ULONG  Size;
+  /*IN*/ I2C_CALLBACKS  I2CCallbacks;
+  /*IN*/ UCHAR  EdidSegment;
+} DDC_CONTROL, *PDDC_CONTROL;
+
+VPAPI
+BOOLEAN
+DDKAPI
+VideoPortDDCMonitorHelper(
+  /*IN*/ PVOID  HwDeviceExtension,
+  /*IN*/ PVOID  DDCControl,
+  /*IN OUT*/ PUCHAR  EdidBuffer,
+  /*IN*/ ULONG  EdidBufferSize);
+
+VPAPI
+VOID
+DDKCDECLAPI
+VideoPortDebugPrint(
+  /*IN*/ VIDEO_DEBUG_LEVEL  DebugPrintLevel,
+  /*IN*/ PCHAR  DebugMessage,
+  /*IN*/ ...);
+
+VPAPI
+VP_STATUS
+DDKAPI
+VideoPortDeleteEvent(
+  /*IN*/ PVOID  HwDeviceExtension,
+  /*IN*/ PEVENT  pEvent);
+
+VPAPI
+VP_STATUS
+DDKAPI
+VideoPortDeleteSpinLock(
+  /*IN*/ PVOID  HwDeviceExtension,
+  /*IN*/ PSPIN_LOCK  SpinLock);
+
+VPAPI
+VP_STATUS
+DDKAPI
+VideoPortDisableInterrupt(
+  /*IN*/ PVOID  HwDeviceExtension);
+
+VPAPI
+PDMA
+DDKAPI
+VideoPortDoDma(
+  /*IN*/ PVOID  HwDeviceExtension,
+  /*IN*/ PDMA  pDma,
+  /*IN*/ DMA_FLAGS  DmaFlags);
+
+VPAPI
+VP_STATUS
+DDKAPI
+VideoPortEnableInterrupt(
+  /*IN*/ PVOID  HwDeviceExtension);
+
+VPAPI
+VP_STATUS
+DDKAPI
+VideoPortEnumerateChildren(
+  /*IN*/ PVOID  HwDeviceExtension,
+  /*IN*/ PVOID  Reserved);
+
+VPAPI
+VOID
+DDKAPI
+VideoPortFreeCommonBuffer(
+  /*IN*/ PVOID  HwDeviceExtension,
+  /*IN*/ ULONG  Length,
+  /*IN*/ PVOID  VirtualAddress,
+  /*IN*/ PHYSICAL_ADDRESS  LogicalAddress,
+  /*IN*/ BOOLEAN  CacheEnabled);
+
+VPAPI
+VOID
+DDKAPI
+VideoPortFreeDeviceBase(
+  /*IN*/ PVOID  HwDeviceExtension,
+  /*IN*/ PVOID  MappedAddress);
+
+VPAPI
+VOID
+DDKAPI
+VideoPortFreePool(
+  /*IN*/ PVOID  HwDeviceExtension,
+  /*IN*/ PVOID  Ptr);
+
+VPAPI
+VP_STATUS
+DDKAPI
+VideoPortGetAccessRanges(
+  /*IN*/ PVOID  HwDeviceExtension,
+  /*IN*/ ULONG  NumRequestedResources,
+  /*IN*/ PIO_RESOURCE_DESCRIPTOR  RequestedResources  /*OPTIONAL*/,
+  /*IN*/ ULONG  NumAccessRanges,
+  /*OUT*/ PVIDEO_ACCESS_RANGE  AccessRanges,
+  /*IN*/ PVOID  VendorId,
+  /*IN*/ PVOID  DeviceId,
+  /*OUT*/ PULONG  Slot);
+
+VPAPI
+PVOID
+DDKAPI
+VideoPortGetAssociatedDeviceExtension(
+  /*IN*/ PVOID  DeviceObject);
+
+VPAPI
+ULONG
+DDKAPI
+VideoPortGetAssociatedDeviceID(
+  /*IN*/ PVOID DeviceObject);
+
+VPAPI
+ULONG
+DDKAPI
+VideoPortGetBusData(
+  /*IN*/ PVOID  HwDeviceExtension,
+  /*IN*/ BUS_DATA_TYPE  BusDataType,
+  /*IN*/ ULONG  SlotNumber,
+  /*IN OUT*/ PVOID  Buffer,
+  /*IN*/ ULONG  Offset,
+  /*IN*/ ULONG  Length);
+
+VPAPI
+ULONG
+DDKAPI
+VideoPortGetBytesUsed(
+  /*IN*/ PVOID  HwDeviceExtension,
+  /*IN*/ PDMA  pDma);
+
+VPAPI
+PVOID
+DDKAPI
+VideoPortGetCommonBuffer(
+  /*IN*/ PVOID  HwDeviceExtension,
+  /*IN*/ ULONG  DesiredLength,
+  /*IN*/ ULONG  Alignment,
+  /*OUT*/ PPHYSICAL_ADDRESS  LogicalAddress,
+  /*OUT*/ PULONG  pActualLength,
+  /*IN*/ BOOLEAN  CacheEnabled);
+
+VPAPI
+UCHAR
+DDKAPI
+VideoPortGetCurrentIrql(
+  VOID);
+
+VPAPI
+PVOID
+DDKAPI
+VideoPortGetDeviceBase(
+  /*IN*/ PVOID  HwDeviceExtension,
+  /*IN*/ PHYSICAL_ADDRESS  IoAddress,
+  /*IN*/ ULONG  NumberOfUchars,
+  /*IN*/ UCHAR  InIoSpace);
+
+VPAPI
+VP_STATUS
+DDKAPI
+VideoPortGetDeviceData(
+  /*IN*/ PVOID  HwDeviceExtension,
+  /*IN*/ VIDEO_DEVICE_DATA_TYPE  DeviceDataType,
+  /*IN*/ PMINIPORT_QUERY_DEVICE_ROUTINE  CallbackRoutine,
+  /*IN*/ PVOID  Context);
+
+VPAPI
+PVP_DMA_ADAPTER
+DDKAPI
+VideoPortGetDmaAdapter(
+  /*IN*/ PVOID  HwDeviceExtension,
+  /*IN*/ PVP_DEVICE_DESCRIPTION  VpDeviceDescription);
+
+VPAPI
+PVOID
+DDKAPI
+VideoPortGetDmaContext(
+  /*IN*/ PVOID  HwDeviceExtension,
+  /*IN*/ PDMA  pDma);
+
+VPAPI
+PVOID
+DDKAPI
+VideoPortGetMdl(
+  /*IN*/ PVOID  HwDeviceExtension,
+  /*IN*/ PDMA  pDma);
+
+VPAPI
+VP_STATUS
+DDKAPI
+VideoPortGetRegistryParameters(
+  /*IN*/ PVOID  HwDeviceExtension,
+  /*IN*/ PWSTR  ParameterName,
+  /*IN*/ UCHAR  IsParameterFileName,
+  /*IN*/ PMINIPORT_GET_REGISTRY_ROUTINE  CallbackRoutine,
+  /*IN*/ PVOID  Context);
+
+VPAPI
+PVOID
+DDKAPI
+VideoPortGetRomImage(
+  /*IN*/ PVOID  HwDeviceExtension,
+  /*IN*/ PVOID  Unused1,
+  /*IN*/ ULONG  Unused2,
+  /*IN*/ ULONG  Length);
+
+VPAPI
+VP_STATUS
+DDKAPI
+VideoPortGetVersion(
+  /*IN*/ PVOID  HwDeviceExtension,
+  /*IN OUT*/ PVPOSVERSIONINFO  pVpOsVersionInfo);
+
+VPAPI
+VP_STATUS
+DDKAPI
+VideoPortGetVgaStatus(
+  /*IN*/ PVOID  HwDeviceExtension,
+  /*OUT*/ PULONG  VgaStatus);
+
+VPAPI
+ULONG
+DDKAPI
+VideoPortInitialize(
+  /*IN*/ PVOID  Argument1,
+  /*IN*/ PVOID  Argument2,
+  /*IN*/ PVIDEO_HW_INITIALIZATION_DATA  HwInitializationData,
+  /*IN*/ PVOID  HwContext);
+
+VPAPI
+VP_STATUS
+DDKAPI
+VideoPortInt10(
+  /*IN*/ PVOID  HwDeviceExtension,
+  /*IN*/ PVIDEO_X86_BIOS_ARGUMENTS  BiosArguments);
+
+VPAPI
+LONG
+DDKFASTAPI
+VideoPortInterlockedDecrement(
+  /*IN*/ PLONG  Addend);
+
+VPAPI
+LONG
+DDKFASTAPI
+VideoPortInterlockedExchange(
+  /*IN OUT*/ PLONG  Target,
+  /*IN*/ LONG  Value);
+
+VPAPI
+LONG
+DDKFASTAPI
+VideoPortInterlockedIncrement(
+  /*IN*/ PLONG  Addend);
+
+typedef enum _VP_LOCK_OPERATION {
+  VpReadAccess = 0,
+  VpWriteAccess,
+  VpModifyAccess
+} VP_LOCK_OPERATION;
+
+VPAPI
+PVOID
+DDKAPI
+VideoPortLockBuffer(
+  /*IN*/ PVOID  HwDeviceExtension,
+  /*IN*/ PVOID  BaseAddress,
+  /*IN*/ ULONG  Length,
+  /*IN*/ VP_LOCK_OPERATION  Operation);
+
+VPAPI
+BOOLEAN
+DDKAPI
+VideoPortLockPages(
+  /*IN*/ PVOID  HwDeviceExtension,
+  /*IN OUT*/ PVIDEO_REQUEST_PACKET  pVrp,
+  /*IN OUT*/ PEVENT  pUEvent,
+  /*IN*/ PEVENT  pDisplayEvent,
+  /*IN*/ DMA_FLAGS  DmaFlags);
+
+VPAPI
+VOID
+DDKAPI
+VideoPortLogError(
+  /*IN*/ PVOID  HwDeviceExtension,
+  /*IN*/ PVIDEO_REQUEST_PACKET  Vrp  /*OPTIONAL*/,
+  /*IN*/ VP_STATUS  ErrorCode,
+  /*IN*/ ULONG  UniqueId);
+
+VPAPI
+VP_STATUS
+DDKAPI
+VideoPortMapBankedMemory(
+  /*IN*/ PVOID  HwDeviceExtension,
+  /*IN*/ PHYSICAL_ADDRESS  PhysicalAddress,
+  /*IN OUT*/ PULONG  Length,
+  PULONG  InIoSpace,
+  PVOID  *VirtualAddress,
+  ULONG  BankLength,
+  UCHAR  ReadWriteBank,
+  PBANKED_SECTION_ROUTINE  BankRoutine,
+  PVOID  Context);
+
+VPAPI
+PDMA
+DDKAPI
+VideoPortMapDmaMemory(
+  /*IN*/ PVOID  HwDeviceExtension,
+  /*IN*/ PVIDEO_REQUEST_PACKET  pVrp,
+  /*IN*/ PHYSICAL_ADDRESS  BoardAddress,
+  /*IN*/ PULONG  Length,
+  /*IN*/ PULONG  InIoSpace,
+  /*IN*/ PVOID  MappedUserEvent,
+  /*IN*/ PVOID  DisplayDriverEvent,
+  /*IN OUT*/ PVOID  *VirtualAddress);
+
+VPAPI
+VP_STATUS
+DDKAPI
+VideoPortMapMemory(
+  /*IN*/ PVOID  HwDeviceExtension,
+  /*IN*/ PHYSICAL_ADDRESS  PhysicalAddress,
+  /*IN OUT*/ PULONG  Length,
+  /*IN*/ PULONG  InIoSpace,
+  /*IN OUT*/ PVOID  *VirtualAddress);
+
+VPAPI
+VOID
+DDKAPI
+VideoPortMoveMemory(
+  /*IN*/ PVOID  Destination,
+  /*IN*/ PVOID  Source,
+  /*IN*/ ULONG  Length);
+
+VPAPI
+VOID
+DDKAPI
+VideoPortPutDmaAdapter(
+  /*IN*/ PVOID  HwDeviceExtension,
+  /*IN*/ PVP_DMA_ADAPTER  VpDmaAdapter);
+
+VPAPI
+LONGLONG
+DDKAPI
+VideoPortQueryPerformanceCounter(
+  /*IN*/ PVOID  HwDeviceExtension,
+  /*OUT*/ PLONGLONG  PerformanceFrequency  /*OPTIONAL*/);
+
+  /* VideoPortQueryServices.ServicesType constants */
+typedef enum _VIDEO_PORT_SERVICES {
+  VideoPortServicesAGP = 1,
+  VideoPortServicesI2C,
+  VideoPortServicesHeadless,
+  VideoPortServicesInt10
+} VIDEO_PORT_SERVICES;
+
+VPAPI
+VP_STATUS
+DDKAPI
+VideoPortQueryServices(
+  /*IN*/ PVOID HwDeviceExtension,
+  /*IN*/ VIDEO_PORT_SERVICES ServicesType,
+  /*IN OUT*/ PINTERFACE Interface);
+
+VPAPI
+VOID
+DDKAPI
+VideoPortQuerySystemTime(
+  /*OUT*/ PLARGE_INTEGER  CurrentTime);
+
+VPAPI
+BOOLEAN
+DDKAPI
+VideoPortQueueDpc(
+  /*IN*/ PVOID  HwDeviceExtension,
+  /*IN*/ PMINIPORT_DPC_ROUTINE  CallbackRoutine,
+  /*IN*/ PVOID  Context);
+
+VPAPI
+VOID
+DDKAPI
+VideoPortReadPortBufferUchar(
+  /*IN*/ PUCHAR  Port,
+  /*OUT*/ PUCHAR  Buffer,
+  /*IN*/ ULONG  Count);
+
+VPAPI
+VOID
+DDKAPI
+VideoPortReadPortBufferUlong(
+  /*IN*/ PULONG  Port,
+  /*OUT*/ PULONG  Buffer,
+  /*IN*/ ULONG  Count);
+
+VPAPI
+VOID
+DDKAPI
+VideoPortReadPortBufferUshort(
+  /*IN*/ PUSHORT  Port,
+  /*OUT*/ PUSHORT  Buffer,
+  /*IN*/ ULONG  Count);
+
+VPAPI
+UCHAR
+DDKAPI
+VideoPortReadPortUchar(
+  /*IN*/ PUCHAR  Port);
+
+VPAPI
+ULONG
+DDKAPI
+VideoPortReadPortUlong(
+  /*IN*/ PULONG  Port);
+
+VPAPI
+USHORT
+DDKAPI
+VideoPortReadPortUshort(
+  /*IN*/ PUSHORT  Port);
+
+VPAPI
+VOID
+DDKAPI
+VideoPortReadRegisterBufferUchar(
+  /*IN*/ PUCHAR  Register,
+  /*OUT*/ PUCHAR  Buffer,
+  /*IN*/ ULONG  Count);
+
+VPAPI
+VOID
+DDKAPI
+VideoPortReadRegisterBufferUlong(
+  /*IN*/ PULONG  Register,
+  /*OUT*/ PULONG  Buffer,
+  /*IN*/ ULONG  Count);
+
+VPAPI
+VOID
+DDKAPI
+VideoPortReadRegisterBufferUshort(
+  /*IN*/ PUSHORT  Register,
+  /*OUT*/ PUSHORT  Buffer,
+  /*IN*/ ULONG  Count);
+
+VPAPI
+UCHAR
+DDKAPI
+VideoPortReadRegisterUchar(
+  /*IN*/ PUCHAR  Register);
+
+VPAPI
+ULONG
+DDKAPI
+VideoPortReadRegisterUlong(
+  /*IN*/ PULONG  Register);
+
+VPAPI
+USHORT
+DDKAPI
+VideoPortReadRegisterUshort(
+  /*IN*/ PUSHORT  Register);
+
+VPAPI
+LONG
+DDKAPI
+VideoPortReadStateEvent(
+  /*IN*/ PVOID  HwDeviceExtension,
+  /*IN*/ PEVENT  pEvent);
+
+VPAPI
+VOID
+DDKAPI
+VideoPortReleaseBuffer(
+  /*IN*/ PVOID  HwDeviceExtension,
+  /*IN*/ PVOID  Buffer);
+
+VPAPI
+VOID
+DDKAPI
+VideoPortReleaseCommonBuffer(
+  /*IN*/ PVOID  HwDeviceExtension,
+  /*IN*/ PVP_DMA_ADAPTER  VpDmaAdapter,
+  /*IN*/ ULONG  Length,
+  /*IN*/ PHYSICAL_ADDRESS  LogicalAddress,
+  /*IN*/ PVOID  VirtualAddress,
+  /*IN*/ BOOLEAN  CacheEnabled);
+
+VPAPI
+VOID
+DDKAPI
+VideoPortReleaseDeviceLock(
+  /*IN*/ PVOID  HwDeviceExtension);
+
+VPAPI
+VOID
+DDKAPI
+VideoPortReleaseSpinLock(
+  /*IN*/ PVOID  HwDeviceExtension,
+  /*IN*/ PSPIN_LOCK  SpinLock,
+  /*IN*/ UCHAR  NewIrql);
+
+VPAPI
+VOID
+DDKAPI
+VideoPortReleaseSpinLockFromDpcLevel(
+  /*IN*/ PVOID  HwDeviceExtension,
+  /*IN*/ PSPIN_LOCK  SpinLock);
+
+VPAPI
+BOOLEAN
+DDKAPI
+VideoPortScanRom(
+  PVOID  HwDeviceExtension,
+  PUCHAR  RomBase,
+  ULONG  RomLength,
+  PUCHAR  String);
+
+VPAPI
+ULONG
+DDKAPI
+VideoPortSetBusData(
+  /*IN*/ PVOID  HwDeviceExtension,
+  /*IN*/ BUS_DATA_TYPE  BusDataType,
+  /*IN*/ ULONG  SlotNumber,
+  /*IN*/ PVOID  Buffer,
+  /*IN*/ ULONG  Offset,
+  /*IN*/ ULONG  Length);
+
+VPAPI
+VOID
+DDKAPI
+VideoPortSetBytesUsed(
+  /*IN*/ PVOID  HwDeviceExtension,
+  /*IN OUT*/ PDMA  pDma,
+  /*IN*/ ULONG  BytesUsed);
+
+VPAPI
+VOID
+DDKAPI
+VideoPortSetDmaContext(
+  /*IN*/ PVOID  HwDeviceExtension,
+  /*OUT*/ PDMA  pDma,
+  /*IN*/ PVOID  InstanceContext);
+
+VPAPI
+LONG
+DDKAPI
+VideoPortSetEvent(
+  /*IN*/ PVOID  HwDeviceExtension,
+  /*IN*/ PEVENT  pEvent);
+
+VPAPI
+VP_STATUS
+DDKAPI
+VideoPortSetRegistryParameters(
+  /*IN*/ PVOID  HwDeviceExtension,
+  /*IN*/ PWSTR  ValueName,
+  /*IN*/ PVOID  ValueData,
+  /*IN*/ ULONG  ValueLength);
+
+VPAPI
+VP_STATUS
+DDKAPI
+VideoPortSetTrappedEmulatorPorts(
+  /*IN*/ PVOID  HwDeviceExtension,
+  /*IN*/ ULONG  NumAccessRanges,
+  /*IN*/ PVIDEO_ACCESS_RANGE  AccessRange);
+
+VPAPI
+BOOLEAN
+DDKAPI
+VideoPortSignalDmaComplete(
+  /*IN*/ PVOID  HwDeviceExtension,
+  /*IN*/ PVOID  pDmaHandle);
+
+VPAPI
+VOID
+DDKAPI
+VideoPortStallExecution(
+  /*IN*/ ULONG  Microseconds);
+
+VPAPI
+VP_STATUS
+DDKAPI
+VideoPortStartDma(
+  /*IN*/ PVOID  HwDeviceExtension,
+  /*IN*/ PVP_DMA_ADAPTER  VpDmaAdapter,
+  /*IN*/ PVOID  Mdl,
+  /*IN*/ ULONG  Offset,
+  /*IN OUT*/ PULONG  pLength,
+  /*IN*/ PEXECUTE_DMA  ExecuteDmaRoutine,
+  /*IN*/ PVOID  Context,
+  /*IN*/ BOOLEAN  WriteToDevice);
+
+VPAPI
+VOID
+DDKAPI
+VideoPortStartTimer(
+  /*IN*/ PVOID  HwDeviceExtension);
+
+VPAPI
+VOID
+DDKAPI
+VideoPortStopTimer(
+  /*IN*/ PVOID  HwDeviceExtension);
+
+  /* VideoPortSynchronizeExecution.Priority constants */
+typedef enum VIDEO_SYNCHRONIZE_PRIORITY {
+  VpLowPriority = 0,
+  VpMediumPriority,
+  VpHighPriority
+} VIDEO_SYNCHRONIZE_PRIORITY, *PVIDEO_SYNCHRONIZE_PRIORITY;
+
+VPAPI
+BOOLEAN
+DDKAPI
+VideoPortSynchronizeExecution(
+  /*IN*/ PVOID  HwDeviceExtension,
+  /*IN*/ VIDEO_SYNCHRONIZE_PRIORITY  Priority,
+  /*IN*/ PMINIPORT_SYNCHRONIZE_ROUTINE  SynchronizeRoutine,
+  /*IN*/ PVOID  Context);
+
+VPAPI
+VOID
+DDKAPI
+VideoPortUnLockBuffer(
+  /*IN*/ PVOID  HwDeviceExtension,
+  /*IN*/ PVOID  Mdl);
+
+VPAPI
+BOOLEAN
+DDKAPI
+VideoPortUnlockPages(
+  /*IN*/ PVOID  hwDeviceExtension,
+  /*IN OUT*/ PDMA  pDma);
+
+VPAPI
+BOOLEAN
+DDKAPI
+VideoPortUnmapDmaMemory(
+  /*IN*/ PVOID  HwDeviceExtension,
+  /*IN*/ PVOID  VirtualAddress,
+  /*IN*/ HANDLE  ProcessHandle,
+  /*IN*/ PDMA  BoardMemoryHandle);
+
+VPAPI
+VP_STATUS
+DDKAPI
+VideoPortUnmapMemory(
+  /*IN*/ PVOID  HwDeviceExtension,
+  /*IN OUT*/ PVOID  VirtualAddress,
+  /*IN*/ HANDLE  ProcessHandle);
+
+VPAPI
+VP_STATUS
+DDKAPI
+VideoPortVerifyAccessRanges(
+  /*IN*/ PVOID  HwDeviceExtension,
+  /*IN*/ ULONG  NumAccessRanges,
+  /*IN*/ PVIDEO_ACCESS_RANGE  AccessRanges);
+
+VPAPI
+VP_STATUS
+DDKAPI
+VideoPortWaitForSingleObject(
+  /*IN*/ PVOID  HwDeviceExtension,
+  /*IN*/ PVOID  Object,
+  /*IN*/ PLARGE_INTEGER  Timeout /*OPTIONAL*/);
+
+VPAPI
+VOID
+DDKAPI
+VideoPortWritePortBufferUchar(
+  /*IN*/ PUCHAR  Port,
+  /*IN*/ PUCHAR  Buffer,
+  /*IN*/ ULONG  Count);
+
+VPAPI
+VOID
+DDKAPI
+VideoPortWritePortBufferUlong(
+  /*IN*/ PULONG  Port,
+  /*IN*/ PULONG  Buffer,
+  /*IN*/ ULONG  Count);
+
+VPAPI
+VOID
+DDKAPI
+VideoPortWritePortBufferUshort(
+  /*IN*/ PUSHORT  Port,
+  /*IN*/ PUSHORT  Buffer,
+  /*IN*/ ULONG  Count);
+
+VPAPI
+VOID
+DDKAPI
+VideoPortWritePortUchar(
+  /*IN*/ PUCHAR  Port,
+  /*IN*/ UCHAR  Value);
+
+VPAPI
+VOID
+DDKAPI
+VideoPortWritePortUlong(
+  /*IN*/ PULONG  Port,
+  /*IN*/ ULONG  Value);
+
+VPAPI
+VOID
+DDKAPI
+VideoPortWritePortUshort(
+  /*IN*/ PUSHORT  Port,
+  /*IN*/ USHORT  Value);
+
+VPAPI
+VOID
+DDKAPI
+VideoPortWriteRegisterBufferUchar(
+  /*IN*/ PUCHAR  Register,
+  /*IN*/ PUCHAR  Buffer,
+  /*IN*/ ULONG  Count);
+
+VPAPI
+VOID
+DDKAPI
+VideoPortWriteRegisterBufferUlong(
+  /*IN*/ PULONG  Register,
+  /*IN*/ PULONG  Buffer,
+  /*IN*/ ULONG  Count);
+
+VPAPI
+VOID
+DDKAPI
+VideoPortWriteRegisterBufferUshort(
+  /*IN*/ PUSHORT  Register,
+  /*IN*/ PUSHORT  Buffer,
+  /*IN*/ ULONG  Count);
+
+VPAPI
+VOID
+DDKAPI
+VideoPortWriteRegisterUchar(
+  /*IN*/ PUCHAR  Register,
+  /*IN*/ UCHAR  Value);
+
+VPAPI
+VOID
+DDKAPI
+VideoPortWriteRegisterUlong(
+  /*IN*/ PULONG  Register,
+  /*IN*/ ULONG  Value);
+
+VPAPI
+VOID
+DDKAPI
+VideoPortWriteRegisterUshort(
+  /*IN*/ PUSHORT  Register,
+  /*IN*/ USHORT  Value);
+
+VPAPI
+VOID
+DDKAPI
+VideoPortZeroDeviceMemory(
+  /*IN*/ PVOID  Destination,
+  /*IN*/ ULONG  Length);
+
+VPAPI
+VOID
+DDKAPI
+VideoPortZeroMemory(
+  /*IN*/ PVOID  Destination,
+  /*2IN*/ ULONG  Length);
+
+#ifdef DBG
+#define VideoDebugPrint(x) VideoPortDebugPrint x
+#else
+#define VideoDebugPrint(x)
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* defined __WINDDI_H */
+
+#endif /* __VIDEO_H */