holdingarea/llvm/llvm-gcc4.2-2.7-x86-mingw32/include/ddk/video.h
author Matt Plumtree <matt.plumtree@nokia.com>
Thu, 07 Oct 2010 13:58:22 +0100
branchbug235_bringup_0
changeset 55 09263774e342
parent 20 d2d6724aef32
permissions -rw-r--r--
Move GLES20 source into standard locations Move Khronos headers into their respective components, to be exported by each. Remove hostthreadadapter as nothing outside of the vghwapiwrapper, which now contains the code, needs it

/*
 * 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 */