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