Naveen Neel / shedskin
Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers video.h Source File

video.h

00001 /*
00002  * video.h
00003  *
00004  * Video port and miniport driver interface
00005  *
00006  * This file is part of the w32api package.
00007  *
00008  * Contributors:
00009  *   Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
00010  *
00011  * THIS SOFTWARE IS NOT COPYRIGHTED
00012  *
00013  * This source code is offered for use in the public domain. You may
00014  * use, modify or distribute it freely.
00015  *
00016  * This code is distributed in the hope that it will be useful but
00017  * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
00018  * DISCLAIMED. This includes but is not limited to warranties of
00019  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
00020  *
00021  */
00022 
00023 #ifndef __VIDEO_H
00024 #define __VIDEO_H
00025 
00026 
00027 #if __GNUC__ >=3
00028 #pragma GCC system_header
00029 #endif
00030 
00031 #ifdef __WINDDI_H
00032 #error winddi.h cannot be included with video.h
00033 #else
00034 
00035 #ifdef __cplusplus
00036 extern "C" {
00037 #endif
00038 
00039 #include "ntddk.h"
00040 
00041 #if defined(_VIDEOPORT_)
00042   #define VPAPI DECLSPEC_EXPORT
00043 #else
00044   #define VPAPI DECLSPEC_IMPORT
00045 #endif
00046 
00047 #include "videoagp.h"
00048 #include "ntddvdeo.h"
00049 
00050 
00051 typedef LONG VP_STATUS;
00052 typedef VP_STATUS *PVP_STATUS;
00053 typedef struct __DMA_PARAMETERS * PDMA;
00054 typedef struct _VIDEO_PORT_EVENT *PEVENT;
00055 typedef struct _VIDEO_PORT_SPIN_LOCK *PSPIN_LOCK;
00056 typedef struct __VP_DMA_ADAPTER *PVP_DMA_ADAPTER;
00057 
00058 #define DISPLAY_ADAPTER_HW_ID             0xFFFFFFFF
00059 
00060 #define EVENT_TYPE_MASK                   1
00061 #define SYNCHRONIZATION_EVENT             0
00062 #define NOTIFICATION_EVENT                1
00063 
00064 #define INITIAL_EVENT_STATE_MASK          2
00065 #define INITIAL_EVENT_NOT_SIGNALED        0
00066 #define INITIAL_EVENT_SIGNALED            2
00067 
00068 typedef enum VIDEO_DEBUG_LEVEL {
00069   Error = 0,
00070   Warn,
00071   Trace,
00072   Info
00073 } VIDEO_DEBUG_LEVEL, *PVIDEO_DEBUG_LEVEL;
00074 
00075 typedef enum {
00076   VideoPortUnlockAfterDma = 1,
00077   VideoPortKeepPagesLocked,
00078   VideoPortDmaInitOnly
00079 } DMA_FLAGS;
00080 
00081 typedef enum _HW_DMA_RETURN {
00082   DmaAsyncReturn,
00083   DmaSyncReturn
00084 } HW_DMA_RETURN, *PHW_DMA_RETURN;
00085 
00086 typedef HW_DMA_RETURN
00087 (*PVIDEO_HW_START_DMA)(
00088     PVOID  HwDeviceExtension,
00089     PDMA  pDma);
00090 
00091 
00092 #ifdef DBG
00093 
00094 #define PAGED_CODE() \
00095   if (VideoPortGetCurrentIrql() > 1 /* APC_LEVEL */) \
00096   { \
00097     VideoPortDebugPrint(Error, "Video: Pageable code called at IRQL %d\n", VideoPortGetCurrentIrql() ); \
00098     ASSERT(FALSE); \
00099   }
00100 
00101 #else
00102 
00103 #define PAGED_CODE()
00104 
00105 #endif
00106 
00107 typedef struct _VIDEO_HARDWARE_CONFIGURATION_DATA {
00108   INTERFACE_TYPE InterfaceType;
00109   ULONG BusNumber;
00110   USHORT Version;
00111   USHORT Revision;
00112   USHORT Irql;
00113   USHORT Vector;
00114   ULONG ControlBase;
00115   ULONG ControlSize;
00116   ULONG CursorBase;
00117   ULONG CursorSize;
00118   ULONG FrameBase;
00119   ULONG FrameSize;
00120 } VIDEO_HARDWARE_CONFIGURATION_DATA, *PVIDEO_HARDWARE_CONFIGURATION_DATA;
00121 
00122 #define SIZE_OF_NT4_VIDEO_PORT_CONFIG_INFO       0x42
00123 #define SIZE_OF_NT4_VIDEO_HW_INITIALIZATION_DATA 0x28
00124 #define SIZE_OF_W2K_VIDEO_HW_INITIALIZATION_DATA 0x50
00125 
00126 typedef enum _VIDEO_DEVICE_DATA_TYPE {
00127   VpMachineData = 0,
00128   VpCmosData,
00129   VpBusData,
00130   VpControllerData,
00131   VpMonitorData
00132 } VIDEO_DEVICE_DATA_TYPE, *PVIDEO_DEVICE_DATA_TYPE;
00133 
00134 
00135 
00136 /* Video miniport driver functions */
00137 
00138 typedef struct _VP_SCATTER_GATHER_ELEMENT {
00139   PHYSICAL_ADDRESS  Address;
00140   ULONG  Length;
00141   ULONG_PTR  Reserved;
00142 } VP_SCATTER_GATHER_ELEMENT, *PVP_SCATTER_GATHER_ELEMENT;
00143 
00144 typedef struct _VP_SCATTER_GATHER_LIST {
00145   ULONG  NumberOfElements;
00146   ULONG_PTR  Reserved;
00147   VP_SCATTER_GATHER_ELEMENT  Elements[0];
00148 } VP_SCATTER_GATHER_LIST, *PVP_SCATTER_GATHER_LIST;
00149 
00150 typedef VOID DDKAPI
00151 (*PEXECUTE_DMA)(
00152   /*IN*/ PVOID  HwDeviceExtension,
00153   /*IN*/ PVP_DMA_ADAPTER  VpDmaAdapter,
00154   /*IN*/ PVP_SCATTER_GATHER_LIST  SGList,
00155   /*IN*/ PVOID  Context);
00156 
00157 typedef PVOID DDKAPI
00158 (*PVIDEO_PORT_GET_PROC_ADDRESS)(
00159 /*IN*/ PVOID  HwDeviceExtension,
00160 /*IN*/ PUCHAR  FunctionName);
00161 
00162 typedef struct _VIDEO_PORT_CONFIG_INFO {
00163   ULONG  Length;
00164   ULONG  SystemIoBusNumber;
00165   INTERFACE_TYPE  AdapterInterfaceType;
00166   ULONG  BusInterruptLevel;
00167   ULONG  BusInterruptVector;
00168   KINTERRUPT_MODE  InterruptMode;
00169   ULONG  NumEmulatorAccessEntries;
00170   PEMULATOR_ACCESS_ENTRY  EmulatorAccessEntries;
00171   ULONG_PTR  EmulatorAccessEntriesContext;
00172   PHYSICAL_ADDRESS  VdmPhysicalVideoMemoryAddress;
00173   ULONG  VdmPhysicalVideoMemoryLength;
00174   ULONG  HardwareStateSize;
00175   ULONG  DmaChannel;
00176   ULONG  DmaPort;
00177   UCHAR  DmaShareable;
00178   UCHAR  InterruptShareable;
00179   BOOLEAN  Master;
00180   DMA_WIDTH  DmaWidth;
00181   DMA_SPEED  DmaSpeed;
00182   BOOLEAN  bMapBuffers;
00183   BOOLEAN  NeedPhysicalAddresses;
00184   BOOLEAN  DemandMode;
00185   ULONG  MaximumTransferLength;
00186   ULONG  NumberOfPhysicalBreaks;
00187   BOOLEAN  ScatterGather;
00188   ULONG  MaximumScatterGatherChunkSize;
00189   PVIDEO_PORT_GET_PROC_ADDRESS VideoPortGetProcAddress;
00190   PWSTR  DriverRegistryPath;
00191   ULONGLONG  SystemMemorySize;
00192 } VIDEO_PORT_CONFIG_INFO, *PVIDEO_PORT_CONFIG_INFO;
00193 
00194 typedef VP_STATUS DDKAPI
00195 (*PVIDEO_HW_FIND_ADAPTER)(
00196   /*IN*/ PVOID  HwDeviceExtension,
00197   /*IN*/ PVOID  HwContext,
00198   /*IN*/ PWSTR  ArgumentString,
00199   /*IN OUT*/  PVIDEO_PORT_CONFIG_INFO  ConfigInfo,
00200   /*OUT*/ PUCHAR  Again);
00201 
00202 typedef VP_STATUS DDKAPI
00203 (*PVIDEO_HW_POWER_GET)(
00204   /*IN*/ PVOID  HwDeviceExtension,
00205   /*IN*/ ULONG  HwId,
00206   /*IN OUT*/  PVIDEO_POWER_MANAGEMENT  VideoPowerControl);
00207 
00208 /* PVIDEO_HW_GET_CHILD_DESCRIPTOR return values */
00209 #define VIDEO_ENUM_MORE_DEVICES           ERROR_CONTINUE
00210 #define VIDEO_ENUM_NO_MORE_DEVICES        ERROR_NO_MORE_DEVICES
00211 #define VIDEO_ENUM_INVALID_DEVICE         ERROR_INVALID_NAME
00212 
00213 /* PVIDEO_HW_GET_CHILD_DESCRIPTOR.ChildEnumInfo constants */
00214 typedef struct _VIDEO_CHILD_ENUM_INFO {
00215   ULONG  Size;
00216   ULONG  ChildDescriptorSize;
00217   ULONG  ChildIndex;
00218   ULONG  ACPIHwId;
00219   PVOID  ChildHwDeviceExtension;
00220 } VIDEO_CHILD_ENUM_INFO, *PVIDEO_CHILD_ENUM_INFO;
00221 
00222 /* PVIDEO_HW_GET_CHILD_DESCRIPTOR.VideoChildType constants */
00223 typedef enum _VIDEO_CHILD_TYPE {
00224   Monitor = 1,
00225   NonPrimaryChip,
00226   VideoChip,
00227   Other
00228 } VIDEO_CHILD_TYPE, *PVIDEO_CHILD_TYPE;
00229 
00230 typedef VP_STATUS DDKAPI
00231 (*PVIDEO_HW_GET_CHILD_DESCRIPTOR)(
00232   /*IN*/ PVOID  HwDeviceExtension,
00233   /*IN*/ PVIDEO_CHILD_ENUM_INFO  ChildEnumInfo,
00234   /*OUT*/  PVIDEO_CHILD_TYPE  VideoChildType,
00235   /*OUT*/  PUCHAR  pChildDescriptor,
00236   /*OUT*/  PULONG  UId,
00237   /*OUT*/  PULONG  pUnused);
00238 
00239 typedef BOOLEAN DDKAPI
00240 (*PVIDEO_HW_INITIALIZE)(
00241   /*IN*/ PVOID  HwDeviceExtension);
00242 
00243 typedef BOOLEAN DDKAPI
00244 (*PVIDEO_HW_INTERRUPT)(
00245   /*IN*/ PVOID  HwDeviceExtension);
00246 
00247 /* VIDEO_ACCESS_RANGE.RangePassive */
00248 #define VIDEO_RANGE_PASSIVE_DECODE        1
00249 #define VIDEO_RANGE_10_BIT_DECODE         2
00250 
00251 #ifndef VIDEO_ACCESS_RANGE_DEFINED /* also in miniport.h */
00252 #define VIDEO_ACCESS_RANGE_DEFINED
00253 typedef struct _VIDEO_ACCESS_RANGE {
00254   PHYSICAL_ADDRESS  RangeStart;
00255   ULONG  RangeLength;
00256   UCHAR  RangeInIoSpace;
00257   UCHAR  RangeVisible;
00258   UCHAR  RangeShareable;
00259   UCHAR  RangePassive;
00260 } VIDEO_ACCESS_RANGE, *PVIDEO_ACCESS_RANGE;
00261 #endif
00262 
00263 typedef VOID DDKAPI
00264 (*PVIDEO_HW_LEGACYRESOURCES)(
00265   /*IN*/ ULONG  VendorId,
00266   /*IN*/ ULONG  DeviceId,
00267   /*IN OUT*/  PVIDEO_ACCESS_RANGE  *LegacyResourceList,
00268   /*IN OUT*/  PULONG  LegacyResourceCount);
00269 
00270 typedef VP_STATUS DDKAPI
00271 (*PMINIPORT_QUERY_DEVICE_ROUTINE)(
00272   /*IN*/ PVOID  HwDeviceExtension,
00273   /*IN*/ PVOID  Context,
00274   /*IN*/ VIDEO_DEVICE_DATA_TYPE  DeviceDataType,
00275   /*IN*/ PVOID  Identifier,
00276   /*IN*/ ULONG  IdentifierLength,
00277   /*IN*/ PVOID  ConfigurationData,
00278   /*IN*/ ULONG  ConfigurationDataLength,
00279   /*IN OUT*/  PVOID  ComponentInformation,
00280   /*IN*/ ULONG  ComponentInformationLength);
00281 
00282 typedef struct _QUERY_INTERFACE {
00283   CONST GUID  *InterfaceType;
00284   USHORT  Size;
00285   USHORT  Version;
00286   PINTERFACE  Interface;
00287   PVOID  InterfaceSpecificData;
00288 } QUERY_INTERFACE, *PQUERY_INTERFACE;
00289 
00290 typedef VP_STATUS DDKAPI
00291 (*PVIDEO_HW_QUERY_INTERFACE)(
00292   /*IN*/ PVOID  HwDeviceExtension,
00293   /*IN OUT*/  PQUERY_INTERFACE  QueryInterface);
00294 
00295 typedef VP_STATUS DDKAPI
00296 (*PMINIPORT_GET_REGISTRY_ROUTINE)(
00297   /*IN*/ PVOID  HwDeviceExtension,
00298   /*IN*/ PVOID  Context,
00299   /*IN OUT*/  PWSTR  ValueName,
00300   /*IN OUT*/  PVOID  ValueData,
00301   /*IN*/ ULONG  ValueLength);
00302 
00303 typedef BOOLEAN DDKAPI
00304 (*PVIDEO_HW_RESET_HW)(
00305   /*IN*/ PVOID  HwDeviceExtension,
00306   /*IN*/ ULONG  Columns,
00307   /*IN*/ ULONG  Rows);
00308 
00309 typedef VP_STATUS DDKAPI
00310 (*PVIDEO_HW_POWER_SET)(
00311   /*IN*/ PVOID  HwDeviceExtension,
00312   /*IN*/ ULONG  HwId,
00313   /*IN*/ PVIDEO_POWER_MANAGEMENT  VideoPowerControl);
00314 
00315 typedef struct _STATUS_BLOCK {
00316    _ANONYMOUS_UNION union {
00317     VP_STATUS  Status;
00318     PVOID  Pointer;
00319   } DUMMYUNIONNAME;
00320   ULONG_PTR Information;
00321 } STATUS_BLOCK, *PSTATUS_BLOCK;
00322 
00323 typedef struct _VIDEO_REQUEST_PACKET {
00324   ULONG  IoControlCode;
00325   PSTATUS_BLOCK  StatusBlock;
00326   PVOID  InputBuffer;
00327   ULONG  InputBufferLength;
00328   PVOID  OutputBuffer;
00329   ULONG  OutputBufferLength;
00330 } VIDEO_REQUEST_PACKET, *PVIDEO_REQUEST_PACKET;
00331 
00332 typedef BOOLEAN DDKAPI
00333 (*PVIDEO_HW_START_IO)(
00334   /*IN*/ PVOID  HwDeviceExtension,
00335   /*IN*/ PVIDEO_REQUEST_PACKET  RequestPacket);
00336 
00337 typedef BOOLEAN DDKAPI
00338 (*PMINIPORT_SYNCHRONIZE_ROUTINE)(
00339   /*IN*/ PVOID  Context);
00340 
00341 typedef VOID DDKAPI
00342 (*PVIDEO_HW_TIMER)(
00343   /*IN*/ PVOID  HwDeviceExtension);
00344 
00345 typedef VOID DDKAPI
00346 (*PMINIPORT_DPC_ROUTINE)(
00347   /*IN*/ PVOID  HwDeviceExtension,
00348   /*IN*/ PVOID  Context);
00349 
00350 typedef VP_STATUS DDKAPI
00351 (*PDRIVER_IO_PORT_UCHAR)(
00352   /*IN*/ ULONG_PTR  Context,
00353   /*IN*/ ULONG  Port,
00354   /*IN*/ UCHAR  AccessMode,
00355   /*IN*/ PUCHAR  Data);
00356 
00357 typedef VP_STATUS DDKAPI
00358 (*PDRIVER_IO_PORT_UCHAR_STRING)(
00359   /*IN*/ ULONG_PTR  Context,
00360   /*IN*/ ULONG  Port,
00361   /*IN*/ UCHAR  AccessMode,
00362   /*IN*/ PUCHAR  Data,
00363   /*IN*/ ULONG  DataLength);
00364 
00365 typedef VP_STATUS DDKAPI
00366 (*PDRIVER_IO_PORT_ULONG)(
00367   /*IN*/ ULONG_PTR  Context,
00368   /*IN*/ ULONG  Port,
00369   /*IN*/ UCHAR  AccessMode,
00370   /*IN*/ PULONG  Data);
00371 
00372 typedef VP_STATUS DDKAPI
00373 (*PDRIVER_IO_PORT_ULONG_STRING)(
00374   /*IN*/ ULONG_PTR  Context,
00375   /*IN*/ ULONG  Port,
00376   /*IN*/ UCHAR  AccessMode,
00377   /*IN*/ PULONG  Data,
00378   /*IN*/ ULONG  DataLength);
00379 
00380 typedef VP_STATUS DDKAPI
00381 (*PDRIVER_IO_PORT_USHORT)(
00382   /*IN*/ ULONG_PTR  Context,
00383   /*IN*/ ULONG  Port,
00384   /*IN*/ UCHAR  AccessMode,
00385   /*IN*/ PUSHORT  Data);
00386 
00387 typedef VP_STATUS DDKAPI
00388 (*PDRIVER_IO_PORT_USHORT_STRING)(
00389   /*IN*/ ULONG_PTR  Context,
00390   /*IN*/ ULONG  Port,
00391   /*IN*/ UCHAR  AccessMode,
00392   /*IN*/ PUSHORT  Data,
00393   /*IN*/ ULONG  DataLength);
00394 
00395 
00396 
00397 typedef struct _INT10_BIOS_ARGUMENTS {
00398   ULONG  Eax;
00399   ULONG  Ebx;
00400   ULONG  Ecx;
00401   ULONG  Edx;
00402   ULONG  Esi;
00403   ULONG  Edi;
00404   ULONG  Ebp;
00405   USHORT  SegDs;
00406   USHORT  SegEs;
00407 } INT10_BIOS_ARGUMENTS, *PINT10_BIOS_ARGUMENTS;
00408 
00409 typedef struct _VIDEO_CHILD_STATE {
00410   ULONG  Id;
00411   ULONG  State;
00412 } VIDEO_CHILD_STATE, *PVIDEO_CHILD_STATE;
00413 
00414 typedef struct _VIDEO_CHILD_STATE_CONFIGURATION {
00415   ULONG  Count;
00416   VIDEO_CHILD_STATE  ChildStateArray[ANYSIZE_ARRAY];
00417 } VIDEO_CHILD_STATE_CONFIGURATION, *PVIDEO_CHILD_STATE_CONFIGURATION;
00418 
00419 typedef struct _VIDEO_HW_INITIALIZATION_DATA {
00420   ULONG  HwInitDataSize;
00421   INTERFACE_TYPE  AdapterInterfaceType;
00422   PVIDEO_HW_FIND_ADAPTER  HwFindAdapter;
00423   PVIDEO_HW_INITIALIZE  HwInitialize;
00424   PVIDEO_HW_INTERRUPT  HwInterrupt;
00425   PVIDEO_HW_START_IO  HwStartIO;
00426   ULONG  HwDeviceExtensionSize;
00427   ULONG  StartingDeviceNumber;
00428   PVIDEO_HW_RESET_HW  HwResetHw;
00429   PVIDEO_HW_TIMER  HwTimer;
00430   PVIDEO_HW_START_DMA  HwStartDma;
00431   PVIDEO_HW_POWER_SET  HwSetPowerState;
00432   PVIDEO_HW_POWER_GET  HwGetPowerState;
00433   PVIDEO_HW_GET_CHILD_DESCRIPTOR  HwGetVideoChildDescriptor;
00434   PVIDEO_HW_QUERY_INTERFACE  HwQueryInterface;
00435   ULONG  HwChildDeviceExtensionSize;
00436   PVIDEO_ACCESS_RANGE  HwLegacyResourceList;
00437   ULONG  HwLegacyResourceCount;
00438   PVIDEO_HW_LEGACYRESOURCES  HwGetLegacyResources;
00439   BOOLEAN  AllowEarlyEnumeration;
00440   ULONG  Reserved;
00441 } VIDEO_HW_INITIALIZATION_DATA, *PVIDEO_HW_INITIALIZATION_DATA;
00442 
00443   /* VIDEO_PORT_AGP_INTERFACE.Version contants */
00444 #define VIDEO_PORT_AGP_INTERFACE_VERSION_1 1
00445 
00446 typedef struct _VIDEO_PORT_AGP_INTERFACE {
00447   SHORT  Size;
00448   SHORT  Version;
00449   PVOID  Context;
00450   PINTERFACE_REFERENCE  InterfaceReference;
00451   PINTERFACE_DEREFERENCE  InterfaceDereference;
00452   PAGP_RESERVE_PHYSICAL  AgpReservePhysical;
00453   PAGP_RELEASE_PHYSICAL  AgpReleasePhysical;
00454   PAGP_COMMIT_PHYSICAL  AgpCommitPhysical;
00455   PAGP_FREE_PHYSICAL  AgpFreePhysical;
00456   PAGP_RESERVE_VIRTUAL  AgpReserveVirtual;
00457   PAGP_RELEASE_VIRTUAL  AgpReleaseVirtual;
00458   PAGP_COMMIT_VIRTUAL  AgpCommitVirtual;
00459   PAGP_FREE_VIRTUAL  AgpFreeVirtual;
00460   ULONGLONG  AgpAllocationLimit;
00461 } VIDEO_PORT_AGP_INTERFACE, *PVIDEO_PORT_AGP_INTERFACE;
00462 
00463   /* VIDEO_PORT_AGP_INTERFACE_2.Version constants */
00464 #define VIDEO_PORT_AGP_INTERFACE_VERSION_2 2
00465 
00466 typedef struct _VIDEO_PORT_AGP_INTERFACE_2 {
00467   /*IN*/ USHORT  Size;
00468   /*IN*/ USHORT  Version;
00469   /*OUT*/ PVOID  Context;
00470   /*OUT*/ PINTERFACE_REFERENCE  InterfaceReference;
00471   /*OUT*/ PINTERFACE_DEREFERENCE  InterfaceDereference;
00472   /*OUT*/ PAGP_RESERVE_PHYSICAL  AgpReservePhysical;
00473   /*OUT*/ PAGP_RELEASE_PHYSICAL  AgpReleasePhysical;
00474   /*OUT*/ PAGP_COMMIT_PHYSICAL  AgpCommitPhysical;
00475   /*OUT*/ PAGP_FREE_PHYSICAL  AgpFreePhysical;
00476   /*OUT*/ PAGP_RESERVE_VIRTUAL  AgpReserveVirtual;
00477   /*OUT*/ PAGP_RELEASE_VIRTUAL  AgpReleaseVirtual;
00478   /*OUT*/ PAGP_COMMIT_VIRTUAL  AgpCommitVirtual;
00479   /*OUT*/ PAGP_FREE_VIRTUAL  AgpFreeVirtual;
00480   /*OUT*/ ULONGLONG  AgpAllocationLimit;
00481   /*OUT*/ PAGP_SET_RATE  AgpSetRate;
00482 } VIDEO_PORT_AGP_INTERFACE_2, *PVIDEO_PORT_AGP_INTERFACE_2;
00483 
00484 #define VIDEO_PORT_I2C_INTERFACE_VERSION_1  1
00485 
00486 typedef VOID DDKAPI
00487 (*PVIDEO_WRITE_CLOCK_LINE)(
00488   PVOID HwDeviceExtension,
00489   UCHAR Data);
00490 
00491 typedef VOID DDKAPI
00492 (*PVIDEO_WRITE_DATA_LINE)(
00493   PVOID HwDeviceExtension,
00494   UCHAR Data);
00495 
00496 typedef BOOLEAN DDKAPI
00497 (*PVIDEO_READ_CLOCK_LINE)(
00498   PVOID HwDeviceExtension);
00499 
00500 typedef BOOLEAN DDKAPI
00501 (*PVIDEO_READ_DATA_LINE)(
00502   PVOID HwDeviceExtension);
00503 
00504 typedef struct _I2C_CALLBACKS
00505 {
00506   /*IN*/ PVIDEO_WRITE_CLOCK_LINE  WriteClockLine;
00507   /*IN*/ PVIDEO_WRITE_DATA_LINE  WriteDataLine;
00508   /*IN*/ PVIDEO_READ_CLOCK_LINE  ReadClockLine;
00509   /*IN*/ PVIDEO_READ_DATA_LINE  ReadDataLine;
00510 } I2C_CALLBACKS, *PI2C_CALLBACKS;
00511 
00512 typedef BOOLEAN DDKAPI
00513 (*PI2C_START)(
00514   /*IN*/ PVOID  HwDeviceExtension,
00515   /*IN*/ PI2C_CALLBACKS  I2CCallbacks);
00516 
00517 typedef BOOLEAN DDKAPI
00518 (*PI2C_STOP)(
00519   /*IN*/ PVOID  HwDeviceExtension,
00520   /*IN*/ PI2C_CALLBACKS  I2CCallbacks);
00521 
00522 typedef BOOLEAN DDKAPI
00523 (*PI2C_WRITE)(
00524   /*IN*/ PVOID  HwDeviceExtension,
00525   /*IN*/ PI2C_CALLBACKS  I2CCallbacks,
00526   /*IN*/ PUCHAR  Buffer,
00527   /*IN*/ ULONG  Length);
00528 
00529 typedef BOOLEAN DDKAPI
00530 (*PI2C_READ)(
00531   /*IN*/ PVOID  HwDeviceExtension,
00532   /*IN*/ PI2C_CALLBACKS  I2CCallbacks,
00533   /*OUT*/ PUCHAR  Buffer,
00534   /*IN*/ ULONG  Length);
00535 
00536 typedef struct _VIDEO_PORT_I2C_INTERFACE {
00537   USHORT  Size;
00538   USHORT  Version;
00539   PVOID  Context;
00540   PINTERFACE_REFERENCE  InterfaceReference;
00541   PINTERFACE_DEREFERENCE  InterfaceDereference;
00542   PI2C_START  I2CStart;
00543   PI2C_STOP  I2CStop;
00544   PI2C_WRITE  I2CWrite;
00545   PI2C_READ  I2CRead;
00546 } VIDEO_PORT_I2C_INTERFACE, *PVIDEO_PORT_I2C_INTERFACE;
00547 
00548   /* VIDEO_PORT_INT10_INTERFACE.Version constants */
00549 #define VIDEO_PORT_INT10_INTERFACE_VERSION_1 1
00550 
00551 typedef VP_STATUS DDKAPI
00552 (*PINT10_ALLOCATE_BUFFER)(
00553   /*IN*/ PVOID  Context,
00554   /*OUT*/ PUSHORT  Seg,
00555   /*OUT*/ PUSHORT  Off,
00556   /*IN OUT*/ PULONG  Length);
00557 
00558 typedef VP_STATUS DDKAPI
00559 (*PINT10_CALL_BIOS)(
00560   /*IN*/ PVOID  Context,
00561   /*IN OUT*/ PINT10_BIOS_ARGUMENTS  BiosArguments);
00562 
00563 typedef VP_STATUS DDKAPI
00564 (*PINT10_FREE_BUFFER)(
00565   /*IN*/ PVOID  Context,
00566   /*IN*/ USHORT  Seg,
00567   /*IN*/ USHORT  Off);
00568 
00569 typedef VP_STATUS DDKAPI
00570 (*PINT10_READ_MEMORY)(
00571   /*IN*/ PVOID  Context,
00572   /*IN*/ USHORT  Seg,
00573   /*IN*/ USHORT  Off,
00574   /*OUT*/ PVOID  Buffer,
00575   /*IN*/ ULONG  Length);
00576 
00577 typedef VP_STATUS DDKAPI
00578 (*PINT10_WRITE_MEMORY)(
00579   /*IN*/ PVOID  Context,
00580   /*IN*/ USHORT  Seg,
00581   /*IN*/ USHORT  Off,
00582   /*IN*/ PVOID  Buffer,
00583   /*IN*/ ULONG  Length);
00584 
00585 typedef struct _VIDEO_PORT_INT10_INTERFACE {
00586   /*IN*/ USHORT  Size;
00587   /*IN*/ USHORT  Version;
00588   /*OUT*/ PVOID  Context;
00589   /*OUT*/ PINTERFACE_REFERENCE  InterfaceReference;
00590   /*OUT*/ PINTERFACE_DEREFERENCE  InterfaceDereference;
00591   /*OUT*/ PINT10_ALLOCATE_BUFFER  Int10AllocateBuffer;
00592   /*OUT*/ PINT10_FREE_BUFFER  Int10FreeBuffer;
00593   /*OUT*/ PINT10_READ_MEMORY  Int10ReadMemory;
00594   /*OUT*/ PINT10_WRITE_MEMORY  Int10WriteMemory;
00595   /*OUT*/ PINT10_CALL_BIOS  Int10CallBios;
00596 } VIDEO_PORT_INT10_INTERFACE, *PVIDEO_PORT_INT10_INTERFACE;
00597 
00598   /* Flags for VideoPortGetDeviceBase and VideoPortMapMemory */
00599 #define VIDEO_MEMORY_SPACE_MEMORY         0x00
00600 #define VIDEO_MEMORY_SPACE_IO             0x01
00601 #define VIDEO_MEMORY_SPACE_USER_MODE      0x02
00602 #define VIDEO_MEMORY_SPACE_DENSE          0x04
00603 #define VIDEO_MEMORY_SPACE_P6CACHE        0x08
00604 
00605 typedef struct _VIDEO_X86_BIOS_ARGUMENTS {
00606   ULONG  Eax;
00607   ULONG  Ebx;
00608   ULONG  Ecx;
00609   ULONG  Edx;
00610   ULONG  Esi;
00611   ULONG  Edi;
00612   ULONG  Ebp;
00613 } VIDEO_X86_BIOS_ARGUMENTS, *PVIDEO_X86_BIOS_ARGUMENTS;
00614 
00615 typedef struct _VP_DEVICE_DESCRIPTION {
00616   BOOLEAN  ScatterGather;
00617   BOOLEAN  Dma32BitAddresses;
00618   BOOLEAN  Dma64BitAddresses;
00619   ULONG  MaximumLength;
00620 } VP_DEVICE_DESCRIPTION, *PVP_DEVICE_DESCRIPTION;
00621 
00622 typedef struct _VPOSVERSIONINFO {
00623   /*IN*/ ULONG  Size;
00624   /*OUT*/ ULONG  MajorVersion;
00625   /*OUT*/ ULONG  MinorVersion;
00626   /*OUT*/ ULONG  BuildNumber;
00627   /*OUT*/ USHORT  ServicePackMajor;
00628   /*OUT*/ USHORT  ServicePackMinor;
00629 } VPOSVERSIONINFO, *PVPOSVERSIONINFO;
00630 
00631 
00632 
00633   /* Video port functions for miniports */
00634 
00635 VPAPI
00636 VOID
00637 DDKAPI
00638 VideoDebugPrint(
00639   /*IN*/ ULONG  DebugPrintLevel,
00640   /*IN*/ PCHAR  DebugMessage,
00641   /*IN*/ ...);
00642 
00643 VPAPI
00644 VOID
00645 DDKAPI
00646 VideoPortAcquireDeviceLock(
00647   /*IN*/ PVOID  HwDeviceExtension);
00648 
00649 VPAPI
00650 VOID
00651 DDKAPI
00652 VideoPortAcquireSpinLock(
00653   /*IN*/ PVOID  HwDeviceExtension,
00654   /*IN*/ PSPIN_LOCK  SpinLock,
00655   /*OUT*/ PUCHAR  OldIrql);
00656 
00657 VPAPI
00658 VOID
00659 DDKAPI
00660 VideoPortAcquireSpinLockAtDpcLevel(
00661   /*IN*/ PVOID  HwDeviceExtension,
00662   /*IN*/ PSPIN_LOCK  SpinLock);
00663 
00664 VPAPI
00665 VP_STATUS
00666 DDKAPI
00667 VideoPortAllocateBuffer(
00668   /*IN*/ PVOID  HwDeviceExtension,
00669   /*IN*/ ULONG  Size,
00670   /*OUT*/ PVOID  *Buffer);
00671 
00672 VPAPI
00673 PVOID
00674 DDKAPI
00675 VideoPortAllocateCommonBuffer(
00676   /*IN*/ PVOID  HwDeviceExtension,
00677   /*IN*/ PVP_DMA_ADAPTER  VpDmaAdapter,
00678   /*IN*/ ULONG  DesiredLength,
00679   /*OUT*/ PPHYSICAL_ADDRESS  LogicalAddress,
00680   /*IN*/ BOOLEAN  CacheEnabled,
00681   PVOID  Reserved);
00682 
00683 VPAPI
00684 PVOID
00685 DDKAPI
00686 VideoPortAllocateContiguousMemory(
00687   /*IN*/ PVOID  HwDeviceExtension,
00688   /*IN*/ ULONG  NumberOfBytes,
00689   /*IN*/ PHYSICAL_ADDRESS  HighestAcceptableAddress);
00690 
00691   /* VideoPortAllocatePool.PoolType constants */
00692 typedef enum _VP_POOL_TYPE {
00693   VpNonPagedPool = 0,
00694   VpPagedPool,
00695   VpNonPagedPoolCacheAligned = 4,
00696   VpPagedPoolCacheAligned
00697 } VP_POOL_TYPE, *PVP_POOL_TYPE;
00698 
00699 VPAPI
00700 PVOID
00701 DDKAPI
00702 VideoPortAllocatePool(
00703   /*IN*/ PVOID  HwDeviceExtension,
00704   /*IN*/ VP_POOL_TYPE  PoolType,
00705   /*IN*/ SIZE_T  NumberOfBytes,
00706   /*IN*/ ULONG  Tag);
00707 
00708 VPAPI
00709 PDMA
00710 DDKAPI
00711 VideoPortAssociateEventsWithDmaHandle(
00712   /*IN*/ PVOID  HwDeviceExtension,
00713   /*IN OUT*/ PVIDEO_REQUEST_PACKET  pVrp,
00714   /*IN*/ PVOID  MappedUserEvent,
00715   /*IN*/ PVOID  DisplayDriverEvent);
00716 
00717   /* VideoPortCheckForDeviceExistence.Flags constants */
00718 #define CDE_USE_SUBSYSTEM_IDS             0x00000001
00719 #define CDE_USE_REVISION                  0x00000002
00720 
00721 VPAPI
00722 BOOLEAN
00723 DDKAPI
00724 VideoPortCheckForDeviceExistence(
00725   /*IN*/ PVOID  HwDeviceExtension,
00726   /*IN*/ USHORT  VendorId,
00727   /*IN*/ USHORT  DeviceId,
00728   /*IN*/ UCHAR  RevisionId,
00729   /*IN*/ USHORT  SubVendorId,
00730   /*IN*/ USHORT  SubSystemId,
00731   /*IN*/ ULONG  Flags);
00732 
00733 VPAPI
00734 VOID
00735 DDKAPI
00736 VideoPortClearEvent(
00737   /*IN*/ PVOID  HwDeviceExtension,
00738   /*IN*/ PEVENT  pEvent);
00739 
00740 VPAPI
00741 ULONG
00742 DDKAPI
00743 VideoPortCompareMemory(
00744   /*IN*/ PVOID  Source1,
00745   /*IN*/ PVOID  Source2,
00746   /*IN*/ ULONG  Length);
00747 
00748 VPAPI
00749 VP_STATUS
00750 DDKAPI
00751 VideoPortCompleteDma(
00752   /*IN*/ PVOID  HwDeviceExtension,
00753   /*IN*/ PVP_DMA_ADAPTER  VpDmaAdapter,
00754   /*IN*/ PVP_SCATTER_GATHER_LIST  VpScatterGather,
00755   /*IN*/ BOOLEAN  WriteToDevice);
00756 
00757 VPAPI
00758 VP_STATUS
00759 DDKAPI
00760 VideoPortCreateEvent(
00761   /*IN*/ PVOID  HwDeviceExtension,
00762   /*IN*/ ULONG  EventFlag,
00763   /*IN*/ PVOID  Unused,
00764   /*OUT*/ PEVENT  *ppEvent);
00765 
00766 VPAPI
00767 VP_STATUS
00768 DDKAPI
00769 VideoPortCreateSecondaryDisplay(
00770   /*IN*/ PVOID  HwDeviceExtension,
00771   /*IN OUT*/ PVOID  *SecondaryDeviceExtension,
00772   /*IN*/ ULONG  ulFlag);
00773 
00774 VPAPI
00775 VP_STATUS
00776 DDKAPI
00777 VideoPortCreateSpinLock(
00778   /*IN*/ PVOID  HwDeviceExtension,
00779   /*OUT*/ PSPIN_LOCK  *SpinLock);
00780 
00781 typedef struct _DDC_CONTROL {
00782   /*IN*/ ULONG  Size;
00783   /*IN*/ I2C_CALLBACKS  I2CCallbacks;
00784   /*IN*/ UCHAR  EdidSegment;
00785 } DDC_CONTROL, *PDDC_CONTROL;
00786 
00787 VPAPI
00788 BOOLEAN
00789 DDKAPI
00790 VideoPortDDCMonitorHelper(
00791   /*IN*/ PVOID  HwDeviceExtension,
00792   /*IN*/ PVOID  DDCControl,
00793   /*IN OUT*/ PUCHAR  EdidBuffer,
00794   /*IN*/ ULONG  EdidBufferSize);
00795 
00796 VPAPI
00797 VOID
00798 DDKCDECLAPI
00799 VideoPortDebugPrint(
00800   /*IN*/ VIDEO_DEBUG_LEVEL  DebugPrintLevel,
00801   /*IN*/ PCHAR  DebugMessage,
00802   /*IN*/ ...);
00803 
00804 VPAPI
00805 VP_STATUS
00806 DDKAPI
00807 VideoPortDeleteEvent(
00808   /*IN*/ PVOID  HwDeviceExtension,
00809   /*IN*/ PEVENT  pEvent);
00810 
00811 VPAPI
00812 VP_STATUS
00813 DDKAPI
00814 VideoPortDeleteSpinLock(
00815   /*IN*/ PVOID  HwDeviceExtension,
00816   /*IN*/ PSPIN_LOCK  SpinLock);
00817 
00818 VPAPI
00819 VP_STATUS
00820 DDKAPI
00821 VideoPortDisableInterrupt(
00822   /*IN*/ PVOID  HwDeviceExtension);
00823 
00824 VPAPI
00825 PDMA
00826 DDKAPI
00827 VideoPortDoDma(
00828   /*IN*/ PVOID  HwDeviceExtension,
00829   /*IN*/ PDMA  pDma,
00830   /*IN*/ DMA_FLAGS  DmaFlags);
00831 
00832 VPAPI
00833 VP_STATUS
00834 DDKAPI
00835 VideoPortEnableInterrupt(
00836   /*IN*/ PVOID  HwDeviceExtension);
00837 
00838 VPAPI
00839 VP_STATUS
00840 DDKAPI
00841 VideoPortEnumerateChildren(
00842   /*IN*/ PVOID  HwDeviceExtension,
00843   /*IN*/ PVOID  Reserved);
00844 
00845 VPAPI
00846 VOID
00847 DDKAPI
00848 VideoPortFreeCommonBuffer(
00849   /*IN*/ PVOID  HwDeviceExtension,
00850   /*IN*/ ULONG  Length,
00851   /*IN*/ PVOID  VirtualAddress,
00852   /*IN*/ PHYSICAL_ADDRESS  LogicalAddress,
00853   /*IN*/ BOOLEAN  CacheEnabled);
00854 
00855 VPAPI
00856 VOID
00857 DDKAPI
00858 VideoPortFreeDeviceBase(
00859   /*IN*/ PVOID  HwDeviceExtension,
00860   /*IN*/ PVOID  MappedAddress);
00861 
00862 VPAPI
00863 VOID
00864 DDKAPI
00865 VideoPortFreePool(
00866   /*IN*/ PVOID  HwDeviceExtension,
00867   /*IN*/ PVOID  Ptr);
00868 
00869 VPAPI
00870 VP_STATUS
00871 DDKAPI
00872 VideoPortGetAccessRanges(
00873   /*IN*/ PVOID  HwDeviceExtension,
00874   /*IN*/ ULONG  NumRequestedResources,
00875   /*IN*/ PIO_RESOURCE_DESCRIPTOR  RequestedResources  /*OPTIONAL*/,
00876   /*IN*/ ULONG  NumAccessRanges,
00877   /*OUT*/ PVIDEO_ACCESS_RANGE  AccessRanges,
00878   /*IN*/ PVOID  VendorId,
00879   /*IN*/ PVOID  DeviceId,
00880   /*OUT*/ PULONG  Slot);
00881 
00882 VPAPI
00883 PVOID
00884 DDKAPI
00885 VideoPortGetAssociatedDeviceExtension(
00886   /*IN*/ PVOID  DeviceObject);
00887 
00888 VPAPI
00889 ULONG
00890 DDKAPI
00891 VideoPortGetAssociatedDeviceID(
00892   /*IN*/ PVOID DeviceObject);
00893 
00894 VPAPI
00895 ULONG
00896 DDKAPI
00897 VideoPortGetBusData(
00898   /*IN*/ PVOID  HwDeviceExtension,
00899   /*IN*/ BUS_DATA_TYPE  BusDataType,
00900   /*IN*/ ULONG  SlotNumber,
00901   /*IN OUT*/ PVOID  Buffer,
00902   /*IN*/ ULONG  Offset,
00903   /*IN*/ ULONG  Length);
00904 
00905 VPAPI
00906 ULONG
00907 DDKAPI
00908 VideoPortGetBytesUsed(
00909   /*IN*/ PVOID  HwDeviceExtension,
00910   /*IN*/ PDMA  pDma);
00911 
00912 VPAPI
00913 PVOID
00914 DDKAPI
00915 VideoPortGetCommonBuffer(
00916   /*IN*/ PVOID  HwDeviceExtension,
00917   /*IN*/ ULONG  DesiredLength,
00918   /*IN*/ ULONG  Alignment,
00919   /*OUT*/ PPHYSICAL_ADDRESS  LogicalAddress,
00920   /*OUT*/ PULONG  pActualLength,
00921   /*IN*/ BOOLEAN  CacheEnabled);
00922 
00923 VPAPI
00924 UCHAR
00925 DDKAPI
00926 VideoPortGetCurrentIrql(
00927   VOID);
00928 
00929 VPAPI
00930 PVOID
00931 DDKAPI
00932 VideoPortGetDeviceBase(
00933   /*IN*/ PVOID  HwDeviceExtension,
00934   /*IN*/ PHYSICAL_ADDRESS  IoAddress,
00935   /*IN*/ ULONG  NumberOfUchars,
00936   /*IN*/ UCHAR  InIoSpace);
00937 
00938 VPAPI
00939 VP_STATUS
00940 DDKAPI
00941 VideoPortGetDeviceData(
00942   /*IN*/ PVOID  HwDeviceExtension,
00943   /*IN*/ VIDEO_DEVICE_DATA_TYPE  DeviceDataType,
00944   /*IN*/ PMINIPORT_QUERY_DEVICE_ROUTINE  CallbackRoutine,
00945   /*IN*/ PVOID  Context);
00946 
00947 VPAPI
00948 PVP_DMA_ADAPTER
00949 DDKAPI
00950 VideoPortGetDmaAdapter(
00951   /*IN*/ PVOID  HwDeviceExtension,
00952   /*IN*/ PVP_DEVICE_DESCRIPTION  VpDeviceDescription);
00953 
00954 VPAPI
00955 PVOID
00956 DDKAPI
00957 VideoPortGetDmaContext(
00958   /*IN*/ PVOID  HwDeviceExtension,
00959   /*IN*/ PDMA  pDma);
00960 
00961 VPAPI
00962 PVOID
00963 DDKAPI
00964 VideoPortGetMdl(
00965   /*IN*/ PVOID  HwDeviceExtension,
00966   /*IN*/ PDMA  pDma);
00967 
00968 VPAPI
00969 VP_STATUS
00970 DDKAPI
00971 VideoPortGetRegistryParameters(
00972   /*IN*/ PVOID  HwDeviceExtension,
00973   /*IN*/ PWSTR  ParameterName,
00974   /*IN*/ UCHAR  IsParameterFileName,
00975   /*IN*/ PMINIPORT_GET_REGISTRY_ROUTINE  CallbackRoutine,
00976   /*IN*/ PVOID  Context);
00977 
00978 VPAPI
00979 PVOID
00980 DDKAPI
00981 VideoPortGetRomImage(
00982   /*IN*/ PVOID  HwDeviceExtension,
00983   /*IN*/ PVOID  Unused1,
00984   /*IN*/ ULONG  Unused2,
00985   /*IN*/ ULONG  Length);
00986 
00987 VPAPI
00988 VP_STATUS
00989 DDKAPI
00990 VideoPortGetVersion(
00991   /*IN*/ PVOID  HwDeviceExtension,
00992   /*IN OUT*/ PVPOSVERSIONINFO  pVpOsVersionInfo);
00993 
00994 VPAPI
00995 VP_STATUS
00996 DDKAPI
00997 VideoPortGetVgaStatus(
00998   /*IN*/ PVOID  HwDeviceExtension,
00999   /*OUT*/ PULONG  VgaStatus);
01000 
01001 VPAPI
01002 ULONG
01003 DDKAPI
01004 VideoPortInitialize(
01005   /*IN*/ PVOID  Argument1,
01006   /*IN*/ PVOID  Argument2,
01007   /*IN*/ PVIDEO_HW_INITIALIZATION_DATA  HwInitializationData,
01008   /*IN*/ PVOID  HwContext);
01009 
01010 VPAPI
01011 VP_STATUS
01012 DDKAPI
01013 VideoPortInt10(
01014   /*IN*/ PVOID  HwDeviceExtension,
01015   /*IN*/ PVIDEO_X86_BIOS_ARGUMENTS  BiosArguments);
01016 
01017 VPAPI
01018 LONG
01019 DDKFASTAPI
01020 VideoPortInterlockedDecrement(
01021   /*IN*/ PLONG  Addend);
01022 
01023 VPAPI
01024 LONG
01025 DDKFASTAPI
01026 VideoPortInterlockedExchange(
01027   /*IN OUT*/ PLONG  Target,
01028   /*IN*/ LONG  Value);
01029 
01030 VPAPI
01031 LONG
01032 DDKFASTAPI
01033 VideoPortInterlockedIncrement(
01034   /*IN*/ PLONG  Addend);
01035 
01036 typedef enum _VP_LOCK_OPERATION {
01037   VpReadAccess = 0,
01038   VpWriteAccess,
01039   VpModifyAccess
01040 } VP_LOCK_OPERATION;
01041 
01042 VPAPI
01043 PVOID
01044 DDKAPI
01045 VideoPortLockBuffer(
01046   /*IN*/ PVOID  HwDeviceExtension,
01047   /*IN*/ PVOID  BaseAddress,
01048   /*IN*/ ULONG  Length,
01049   /*IN*/ VP_LOCK_OPERATION  Operation);
01050 
01051 VPAPI
01052 BOOLEAN
01053 DDKAPI
01054 VideoPortLockPages(
01055   /*IN*/ PVOID  HwDeviceExtension,
01056   /*IN OUT*/ PVIDEO_REQUEST_PACKET  pVrp,
01057   /*IN OUT*/ PEVENT  pUEvent,
01058   /*IN*/ PEVENT  pDisplayEvent,
01059   /*IN*/ DMA_FLAGS  DmaFlags);
01060 
01061 VPAPI
01062 VOID
01063 DDKAPI
01064 VideoPortLogError(
01065   /*IN*/ PVOID  HwDeviceExtension,
01066   /*IN*/ PVIDEO_REQUEST_PACKET  Vrp  /*OPTIONAL*/,
01067   /*IN*/ VP_STATUS  ErrorCode,
01068   /*IN*/ ULONG  UniqueId);
01069 
01070 VPAPI
01071 VP_STATUS
01072 DDKAPI
01073 VideoPortMapBankedMemory(
01074   /*IN*/ PVOID  HwDeviceExtension,
01075   /*IN*/ PHYSICAL_ADDRESS  PhysicalAddress,
01076   /*IN OUT*/ PULONG  Length,
01077   PULONG  InIoSpace,
01078   PVOID  *VirtualAddress,
01079   ULONG  BankLength,
01080   UCHAR  ReadWriteBank,
01081   PBANKED_SECTION_ROUTINE  BankRoutine,
01082   PVOID  Context);
01083 
01084 VPAPI
01085 PDMA
01086 DDKAPI
01087 VideoPortMapDmaMemory(
01088   /*IN*/ PVOID  HwDeviceExtension,
01089   /*IN*/ PVIDEO_REQUEST_PACKET  pVrp,
01090   /*IN*/ PHYSICAL_ADDRESS  BoardAddress,
01091   /*IN*/ PULONG  Length,
01092   /*IN*/ PULONG  InIoSpace,
01093   /*IN*/ PVOID  MappedUserEvent,
01094   /*IN*/ PVOID  DisplayDriverEvent,
01095   /*IN OUT*/ PVOID  *VirtualAddress);
01096 
01097 VPAPI
01098 VP_STATUS
01099 DDKAPI
01100 VideoPortMapMemory(
01101   /*IN*/ PVOID  HwDeviceExtension,
01102   /*IN*/ PHYSICAL_ADDRESS  PhysicalAddress,
01103   /*IN OUT*/ PULONG  Length,
01104   /*IN*/ PULONG  InIoSpace,
01105   /*IN OUT*/ PVOID  *VirtualAddress);
01106 
01107 VPAPI
01108 VOID
01109 DDKAPI
01110 VideoPortMoveMemory(
01111   /*IN*/ PVOID  Destination,
01112   /*IN*/ PVOID  Source,
01113   /*IN*/ ULONG  Length);
01114 
01115 VPAPI
01116 VOID
01117 DDKAPI
01118 VideoPortPutDmaAdapter(
01119   /*IN*/ PVOID  HwDeviceExtension,
01120   /*IN*/ PVP_DMA_ADAPTER  VpDmaAdapter);
01121 
01122 VPAPI
01123 LONGLONG
01124 DDKAPI
01125 VideoPortQueryPerformanceCounter(
01126   /*IN*/ PVOID  HwDeviceExtension,
01127   /*OUT*/ PLONGLONG  PerformanceFrequency  /*OPTIONAL*/);
01128 
01129   /* VideoPortQueryServices.ServicesType constants */
01130 typedef enum _VIDEO_PORT_SERVICES {
01131   VideoPortServicesAGP = 1,
01132   VideoPortServicesI2C,
01133   VideoPortServicesHeadless,
01134   VideoPortServicesInt10
01135 } VIDEO_PORT_SERVICES;
01136 
01137 VPAPI
01138 VP_STATUS
01139 DDKAPI
01140 VideoPortQueryServices(
01141   /*IN*/ PVOID HwDeviceExtension,
01142   /*IN*/ VIDEO_PORT_SERVICES ServicesType,
01143   /*IN OUT*/ PINTERFACE Interface);
01144 
01145 VPAPI
01146 VOID
01147 DDKAPI
01148 VideoPortQuerySystemTime(
01149   /*OUT*/ PLARGE_INTEGER  CurrentTime);
01150 
01151 VPAPI
01152 BOOLEAN
01153 DDKAPI
01154 VideoPortQueueDpc(
01155   /*IN*/ PVOID  HwDeviceExtension,
01156   /*IN*/ PMINIPORT_DPC_ROUTINE  CallbackRoutine,
01157   /*IN*/ PVOID  Context);
01158 
01159 VPAPI
01160 VOID
01161 DDKAPI
01162 VideoPortReadPortBufferUchar(
01163   /*IN*/ PUCHAR  Port,
01164   /*OUT*/ PUCHAR  Buffer,
01165   /*IN*/ ULONG  Count);
01166 
01167 VPAPI
01168 VOID
01169 DDKAPI
01170 VideoPortReadPortBufferUlong(
01171   /*IN*/ PULONG  Port,
01172   /*OUT*/ PULONG  Buffer,
01173   /*IN*/ ULONG  Count);
01174 
01175 VPAPI
01176 VOID
01177 DDKAPI
01178 VideoPortReadPortBufferUshort(
01179   /*IN*/ PUSHORT  Port,
01180   /*OUT*/ PUSHORT  Buffer,
01181   /*IN*/ ULONG  Count);
01182 
01183 VPAPI
01184 UCHAR
01185 DDKAPI
01186 VideoPortReadPortUchar(
01187   /*IN*/ PUCHAR  Port);
01188 
01189 VPAPI
01190 ULONG
01191 DDKAPI
01192 VideoPortReadPortUlong(
01193   /*IN*/ PULONG  Port);
01194 
01195 VPAPI
01196 USHORT
01197 DDKAPI
01198 VideoPortReadPortUshort(
01199   /*IN*/ PUSHORT  Port);
01200 
01201 VPAPI
01202 VOID
01203 DDKAPI
01204 VideoPortReadRegisterBufferUchar(
01205   /*IN*/ PUCHAR  Register,
01206   /*OUT*/ PUCHAR  Buffer,
01207   /*IN*/ ULONG  Count);
01208 
01209 VPAPI
01210 VOID
01211 DDKAPI
01212 VideoPortReadRegisterBufferUlong(
01213   /*IN*/ PULONG  Register,
01214   /*OUT*/ PULONG  Buffer,
01215   /*IN*/ ULONG  Count);
01216 
01217 VPAPI
01218 VOID
01219 DDKAPI
01220 VideoPortReadRegisterBufferUshort(
01221   /*IN*/ PUSHORT  Register,
01222   /*OUT*/ PUSHORT  Buffer,
01223   /*IN*/ ULONG  Count);
01224 
01225 VPAPI
01226 UCHAR
01227 DDKAPI
01228 VideoPortReadRegisterUchar(
01229   /*IN*/ PUCHAR  Register);
01230 
01231 VPAPI
01232 ULONG
01233 DDKAPI
01234 VideoPortReadRegisterUlong(
01235   /*IN*/ PULONG  Register);
01236 
01237 VPAPI
01238 USHORT
01239 DDKAPI
01240 VideoPortReadRegisterUshort(
01241   /*IN*/ PUSHORT  Register);
01242 
01243 VPAPI
01244 LONG
01245 DDKAPI
01246 VideoPortReadStateEvent(
01247   /*IN*/ PVOID  HwDeviceExtension,
01248   /*IN*/ PEVENT  pEvent);
01249 
01250 VPAPI
01251 VOID
01252 DDKAPI
01253 VideoPortReleaseBuffer(
01254   /*IN*/ PVOID  HwDeviceExtension,
01255   /*IN*/ PVOID  Buffer);
01256 
01257 VPAPI
01258 VOID
01259 DDKAPI
01260 VideoPortReleaseCommonBuffer(
01261   /*IN*/ PVOID  HwDeviceExtension,
01262   /*IN*/ PVP_DMA_ADAPTER  VpDmaAdapter,
01263   /*IN*/ ULONG  Length,
01264   /*IN*/ PHYSICAL_ADDRESS  LogicalAddress,
01265   /*IN*/ PVOID  VirtualAddress,
01266   /*IN*/ BOOLEAN  CacheEnabled);
01267 
01268 VPAPI
01269 VOID
01270 DDKAPI
01271 VideoPortReleaseDeviceLock(
01272   /*IN*/ PVOID  HwDeviceExtension);
01273 
01274 VPAPI
01275 VOID
01276 DDKAPI
01277 VideoPortReleaseSpinLock(
01278   /*IN*/ PVOID  HwDeviceExtension,
01279   /*IN*/ PSPIN_LOCK  SpinLock,
01280   /*IN*/ UCHAR  NewIrql);
01281 
01282 VPAPI
01283 VOID
01284 DDKAPI
01285 VideoPortReleaseSpinLockFromDpcLevel(
01286   /*IN*/ PVOID  HwDeviceExtension,
01287   /*IN*/ PSPIN_LOCK  SpinLock);
01288 
01289 VPAPI
01290 BOOLEAN
01291 DDKAPI
01292 VideoPortScanRom(
01293   PVOID  HwDeviceExtension,
01294   PUCHAR  RomBase,
01295   ULONG  RomLength,
01296   PUCHAR  String);
01297 
01298 VPAPI
01299 ULONG
01300 DDKAPI
01301 VideoPortSetBusData(
01302   /*IN*/ PVOID  HwDeviceExtension,
01303   /*IN*/ BUS_DATA_TYPE  BusDataType,
01304   /*IN*/ ULONG  SlotNumber,
01305   /*IN*/ PVOID  Buffer,
01306   /*IN*/ ULONG  Offset,
01307   /*IN*/ ULONG  Length);
01308 
01309 VPAPI
01310 VOID
01311 DDKAPI
01312 VideoPortSetBytesUsed(
01313   /*IN*/ PVOID  HwDeviceExtension,
01314   /*IN OUT*/ PDMA  pDma,
01315   /*IN*/ ULONG  BytesUsed);
01316 
01317 VPAPI
01318 VOID
01319 DDKAPI
01320 VideoPortSetDmaContext(
01321   /*IN*/ PVOID  HwDeviceExtension,
01322   /*OUT*/ PDMA  pDma,
01323   /*IN*/ PVOID  InstanceContext);
01324 
01325 VPAPI
01326 LONG
01327 DDKAPI
01328 VideoPortSetEvent(
01329   /*IN*/ PVOID  HwDeviceExtension,
01330   /*IN*/ PEVENT  pEvent);
01331 
01332 VPAPI
01333 VP_STATUS
01334 DDKAPI
01335 VideoPortSetRegistryParameters(
01336   /*IN*/ PVOID  HwDeviceExtension,
01337   /*IN*/ PWSTR  ValueName,
01338   /*IN*/ PVOID  ValueData,
01339   /*IN*/ ULONG  ValueLength);
01340 
01341 VPAPI
01342 VP_STATUS
01343 DDKAPI
01344 VideoPortSetTrappedEmulatorPorts(
01345   /*IN*/ PVOID  HwDeviceExtension,
01346   /*IN*/ ULONG  NumAccessRanges,
01347   /*IN*/ PVIDEO_ACCESS_RANGE  AccessRange);
01348 
01349 VPAPI
01350 BOOLEAN
01351 DDKAPI
01352 VideoPortSignalDmaComplete(
01353   /*IN*/ PVOID  HwDeviceExtension,
01354   /*IN*/ PVOID  pDmaHandle);
01355 
01356 VPAPI
01357 VOID
01358 DDKAPI
01359 VideoPortStallExecution(
01360   /*IN*/ ULONG  Microseconds);
01361 
01362 VPAPI
01363 VP_STATUS
01364 DDKAPI
01365 VideoPortStartDma(
01366   /*IN*/ PVOID  HwDeviceExtension,
01367   /*IN*/ PVP_DMA_ADAPTER  VpDmaAdapter,
01368   /*IN*/ PVOID  Mdl,
01369   /*IN*/ ULONG  Offset,
01370   /*IN OUT*/ PULONG  pLength,
01371   /*IN*/ PEXECUTE_DMA  ExecuteDmaRoutine,
01372   /*IN*/ PVOID  Context,
01373   /*IN*/ BOOLEAN  WriteToDevice);
01374 
01375 VPAPI
01376 VOID
01377 DDKAPI
01378 VideoPortStartTimer(
01379   /*IN*/ PVOID  HwDeviceExtension);
01380 
01381 VPAPI
01382 VOID
01383 DDKAPI
01384 VideoPortStopTimer(
01385   /*IN*/ PVOID  HwDeviceExtension);
01386 
01387   /* VideoPortSynchronizeExecution.Priority constants */
01388 typedef enum VIDEO_SYNCHRONIZE_PRIORITY {
01389   VpLowPriority = 0,
01390   VpMediumPriority,
01391   VpHighPriority
01392 } VIDEO_SYNCHRONIZE_PRIORITY, *PVIDEO_SYNCHRONIZE_PRIORITY;
01393 
01394 VPAPI
01395 BOOLEAN
01396 DDKAPI
01397 VideoPortSynchronizeExecution(
01398   /*IN*/ PVOID  HwDeviceExtension,
01399   /*IN*/ VIDEO_SYNCHRONIZE_PRIORITY  Priority,
01400   /*IN*/ PMINIPORT_SYNCHRONIZE_ROUTINE  SynchronizeRoutine,
01401   /*IN*/ PVOID  Context);
01402 
01403 VPAPI
01404 VOID
01405 DDKAPI
01406 VideoPortUnLockBuffer(
01407   /*IN*/ PVOID  HwDeviceExtension,
01408   /*IN*/ PVOID  Mdl);
01409 
01410 VPAPI
01411 BOOLEAN
01412 DDKAPI
01413 VideoPortUnlockPages(
01414   /*IN*/ PVOID  hwDeviceExtension,
01415   /*IN OUT*/ PDMA  pDma);
01416 
01417 VPAPI
01418 BOOLEAN
01419 DDKAPI
01420 VideoPortUnmapDmaMemory(
01421   /*IN*/ PVOID  HwDeviceExtension,
01422   /*IN*/ PVOID  VirtualAddress,
01423   /*IN*/ HANDLE  ProcessHandle,
01424   /*IN*/ PDMA  BoardMemoryHandle);
01425 
01426 VPAPI
01427 VP_STATUS
01428 DDKAPI
01429 VideoPortUnmapMemory(
01430   /*IN*/ PVOID  HwDeviceExtension,
01431   /*IN OUT*/ PVOID  VirtualAddress,
01432   /*IN*/ HANDLE  ProcessHandle);
01433 
01434 VPAPI
01435 VP_STATUS
01436 DDKAPI
01437 VideoPortVerifyAccessRanges(
01438   /*IN*/ PVOID  HwDeviceExtension,
01439   /*IN*/ ULONG  NumAccessRanges,
01440   /*IN*/ PVIDEO_ACCESS_RANGE  AccessRanges);
01441 
01442 VPAPI
01443 VP_STATUS
01444 DDKAPI
01445 VideoPortWaitForSingleObject(
01446   /*IN*/ PVOID  HwDeviceExtension,
01447   /*IN*/ PVOID  Object,
01448   /*IN*/ PLARGE_INTEGER  Timeout /*OPTIONAL*/);
01449 
01450 VPAPI
01451 VOID
01452 DDKAPI
01453 VideoPortWritePortBufferUchar(
01454   /*IN*/ PUCHAR  Port,
01455   /*IN*/ PUCHAR  Buffer,
01456   /*IN*/ ULONG  Count);
01457 
01458 VPAPI
01459 VOID
01460 DDKAPI
01461 VideoPortWritePortBufferUlong(
01462   /*IN*/ PULONG  Port,
01463   /*IN*/ PULONG  Buffer,
01464   /*IN*/ ULONG  Count);
01465 
01466 VPAPI
01467 VOID
01468 DDKAPI
01469 VideoPortWritePortBufferUshort(
01470   /*IN*/ PUSHORT  Port,
01471   /*IN*/ PUSHORT  Buffer,
01472   /*IN*/ ULONG  Count);
01473 
01474 VPAPI
01475 VOID
01476 DDKAPI
01477 VideoPortWritePortUchar(
01478   /*IN*/ PUCHAR  Port,
01479   /*IN*/ UCHAR  Value);
01480 
01481 VPAPI
01482 VOID
01483 DDKAPI
01484 VideoPortWritePortUlong(
01485   /*IN*/ PULONG  Port,
01486   /*IN*/ ULONG  Value);
01487 
01488 VPAPI
01489 VOID
01490 DDKAPI
01491 VideoPortWritePortUshort(
01492   /*IN*/ PUSHORT  Port,
01493   /*IN*/ USHORT  Value);
01494 
01495 VPAPI
01496 VOID
01497 DDKAPI
01498 VideoPortWriteRegisterBufferUchar(
01499   /*IN*/ PUCHAR  Register,
01500   /*IN*/ PUCHAR  Buffer,
01501   /*IN*/ ULONG  Count);
01502 
01503 VPAPI
01504 VOID
01505 DDKAPI
01506 VideoPortWriteRegisterBufferUlong(
01507   /*IN*/ PULONG  Register,
01508   /*IN*/ PULONG  Buffer,
01509   /*IN*/ ULONG  Count);
01510 
01511 VPAPI
01512 VOID
01513 DDKAPI
01514 VideoPortWriteRegisterBufferUshort(
01515   /*IN*/ PUSHORT  Register,
01516   /*IN*/ PUSHORT  Buffer,
01517   /*IN*/ ULONG  Count);
01518 
01519 VPAPI
01520 VOID
01521 DDKAPI
01522 VideoPortWriteRegisterUchar(
01523   /*IN*/ PUCHAR  Register,
01524   /*IN*/ UCHAR  Value);
01525 
01526 VPAPI
01527 VOID
01528 DDKAPI
01529 VideoPortWriteRegisterUlong(
01530   /*IN*/ PULONG  Register,
01531   /*IN*/ ULONG  Value);
01532 
01533 VPAPI
01534 VOID
01535 DDKAPI
01536 VideoPortWriteRegisterUshort(
01537   /*IN*/ PUSHORT  Register,
01538   /*IN*/ USHORT  Value);
01539 
01540 VPAPI
01541 VOID
01542 DDKAPI
01543 VideoPortZeroDeviceMemory(
01544   /*IN*/ PVOID  Destination,
01545   /*IN*/ ULONG  Length);
01546 
01547 VPAPI
01548 VOID
01549 DDKAPI
01550 VideoPortZeroMemory(
01551   /*IN*/ PVOID  Destination,
01552   /*2IN*/ ULONG  Length);
01553 
01554 #ifdef DBG
01555 #define VideoDebugPrint(x) VideoPortDebugPrint x
01556 #else
01557 #define VideoDebugPrint(x)
01558 #endif
01559 
01560 #ifdef __cplusplus
01561 }
01562 #endif
01563 
01564 #endif /* defined __WINDDI_H */
01565 
01566 #endif /* __VIDEO_H */