OSDN Git Service

Avoid an implication that the API is exclusively 32-bit.
[mingw/mingw-org-wsl.git] / wslapi / include / ddk / video.h
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   /*2IN*/ 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 */