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