home *** CD-ROM | disk | FTP | other *** search
/ PC World 2008 April / PCWorld_2008-04_cd.bin / temacd / devc++ / devcpp-4.9.9.2_setup.exe / video.h < prev    next >
C/C++ Source or Header  |  2005-01-29  |  32KB  |  1,567 lines

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