:pserver:cvsanon@mok.lvcm.com:/CVS/ReactOS reactos
[reactos.git] / include / ddk / ntddvid.h
1 /*
2  * NTDDVID.H - Video Port and MiniPort driver interface
3  */
4
5 #include <ddk/miniport.h>
6
7 /*
8  * the rough idea:
9  *  init:
10  *    miniport driver defines entrypoint thusly:
11  *      ULONG  DriverEntry(PVOID Context1, PVOID Context2);
12  *    miniport allocates and initializes a VIDEO_HW_INIT_DATA struct
13  *    miniport calls VideoPortInitialize
14  *    video port driver handles init of DriverObject (Context1)
15  *    video port driver calls back into HwVidFindAdapter entry point
16  *    video port driver finishes up and returns the status code that
17  *      the miniport driver should return.
18  *  io requests:
19  *    video port driver reformats IRP into VRP
20  *    video port driver calls back into HwVidStartIO entry point
21  *    minimum IoControlCodes that must be handles by the miniport:
22  *      IOCTL_VIDEO_QUERY_NUM_AVAIL_MODES
23  *      IOCTL_VIDEO_QUERY_AVAIL_MODES
24  *      IOCTL_VIDEO_SET_CURRENT_MODE
25  *      IOCTL_VIDEO_MAP_MEMORY
26  *      IOCTL_VIDEO_RESET_DEVICE
27  *  interrupts are handled the same as KM drivers.
28  */
29
30 typedef LONG VP_STATUS, *PVP_STATUS;
31
32 // Bit definitions for Attribute Flags
33 #define VIDEO_MODE_COLOR          0x0001
34 #define VIDEO_MODE_GRAPHICS       0x0002
35 #define VIDEO_MODE_PALETTE_DRIVEN 0x0004
36
37 #define VIDEO_MEMORY_SPACE_MEMORY    0x00
38 #define VIDEO_MEMORY_SPACE_IO        0x01
39 #define VIDEO_MEMORY_SPACE_USER_MODE 0x02
40 #define VIDEO_MEMORY_SPACE_DENSE     0x04
41 #define VIDEO_MEMORY_SPACE_P6CACHE   0x08
42
43 typedef struct _VIDEO_POINTER_CAPABILITIES
44 {
45   ULONG  Flags;
46   ULONG  MaxWidth;
47   ULONG  MaxHeight;
48   ULONG  HWPtrBitmapStart;
49   ULONG  HWPtrBitmapEnd;
50 } VIDEO_POINTER_CAPABILITIES, *PVIDEO_POINTER_CAPABILITIES;
51
52 typedef struct _VIDEO_POINTER_ATTRIBUTES
53 {
54   ULONG  Flags;
55   ULONG  Width;
56   ULONG  Height;
57   ULONG  WidthInBytes;
58   ULONG  Enable;
59   SHORT  Column;
60   SHORT  Row;
61   UCHAR  Pixels[1];
62 } VIDEO_POINTER_ATTRIBUTES, *PVIDEO_POINTER_ATTRIBUTES;
63
64 typedef enum _VIDEO_BANK_TYPE
65 {
66   VideoNotBanked = 0,
67   VideoBanked1RW,
68   VideoBanked1R1W,
69   VideoBanked2RW,
70   NumVideoBankTypes
71 } VIDEO_BANK_TYPE, *PVIDEO_BANK_TYPE;
72
73 typedef struct _VIDEO_BANK_SELECT
74 {
75   ULONG  Length;
76   ULONG  Size;
77   ULONG  BankingFlags;
78   ULONG  BankingType;
79   ULONG  PlanarHCBankingType;
80   ULONG  BitmapWidthInBytes;
81   ULONG  BitmapSize;
82   ULONG  Granularity;
83   ULONG  PlanarHCGranularity;
84   ULONG  CodeOffset;
85   ULONG  PlanarHCBankCodeOffset;
86   ULONG  PlanarHCEnableCodeOffset;
87   ULONG  PlanarHCDisableCodeOffset;
88 } VIDEO_BANK_SELECT, *PVIDEO_BANK_SELECT;
89
90 typedef struct _VIDEO_CLUTDATA
91 {
92   UCHAR  Red;
93   UCHAR  Green;
94   UCHAR  Blue;
95   UCHAR  Unused;
96 } VIDEO_CLUTDATA, *PVIDEO_CLUTDATA;
97
98 typedef struct _VIDEO_NUM_MODES
99 {
100   ULONG  NumModes;
101   ULONG  ModeInformationLength;
102 } VIDEO_NUM_MODES, *PVIDEO_NUM_MODES;
103
104 typedef struct _VIDEO_MODE_INFORMATION
105 {
106   ULONG  Length;
107   ULONG  ModeIndex;
108   ULONG  VisScreenWidth;
109   ULONG  VisScreenHeight;
110   ULONG  ScreenStride;
111   ULONG  NumberOfPlanes;
112   ULONG  BitsPerPlane;
113   ULONG  Frequency;
114   ULONG  XMillimeter;
115   ULONG  YMillimeter;
116   ULONG  NumberRedBits;
117   ULONG  NumberGreenBits;
118   ULONG  NumberBlueBits;
119   ULONG  RedMask;
120   ULONG  GreenMask;
121   ULONG  BlueMask;
122   ULONG  AttributeFlags;
123   ULONG  VideoMemoryBitmapWidth;
124   ULONG  VideoMemoryBitmapHeight;
125   ULONG  DriverSpecificAttributeFlags;
126 } VIDEO_MODE_INFORMATION, *PVIDEO_MODE_INFORMATION;
127
128 typedef enum _VIDEO_DEVICE_DATA_TYPE
129 {
130   VpMachineData,
131   VpCmosData,
132   VpBusData,
133   VpControllerData,
134   VpMonitorData
135 } VIDEO_DEVICE_DATA_TYPE, *PVIDEO_DEVICE_DATA_TYPE;
136
137 typedef enum _VIDEO_SYNCHRONIZE_PRIORITY
138 {
139   VpLowPriority,
140   VpMediumPriority,
141   VpHighPriority
142 } VIDEO_SYNCHRONIZE_PRIORITY, *PVIDEO_SYNCHRONIZE_PRIORITY;
143
144 typedef struct _STATUS_BLOCK
145 {
146   VP_STATUS  Status;
147   ULONG  Information;
148 } STATUS_BLOCK, *PSTATUS_BLOCK;
149
150 typedef struct _VIDEO_REQUEST_PACKET
151 {
152   ULONG  IoControlCode;
153   PSTATUS_BLOCK  StatusBlock;
154   PVOID  InputBuffer;
155   ULONG  InputBufferLength;
156   PVOID  OutputBuffer;
157   ULONG  OutputBufferLength;
158 } VIDEO_REQUEST_PACKET, *PVIDEO_REQUEST_PACKET;
159
160 #define IOCTL_VIDEO_QUERY_NUM_AVAIL_MODES       CTL_CODE(FILE_DEVICE_VIDEO,  0, METHOD_BUFFERED, FILE_ANY_ACCESS)
161 #define IOCTL_VIDEO_QUERY_AVAIL_MODES           CTL_CODE(FILE_DEVICE_VIDEO,  1, METHOD_BUFFERED, FILE_ANY_ACCESS)
162 #define IOCTL_VIDEO_QUERY_CURRENT_MODE          CTL_CODE(FILE_DEVICE_VIDEO,  2, METHOD_BUFFERED, FILE_ANY_ACCESS)
163 #define IOCTL_VIDEO_SET_CURRENT_MODE            CTL_CODE(FILE_DEVICE_VIDEO,  3, METHOD_BUFFERED, FILE_ANY_ACCESS)
164 #define IOCTL_VIDEO_RESET_DEVICE                CTL_CODE(FILE_DEVICE_VIDEO,  4, METHOD_BUFFERED, FILE_ANY_ACCESS)
165 #define IOCTL_VIDEO_MAP_VIDEO_MEMORY            CTL_CODE(FILE_DEVICE_VIDEO,  5, METHOD_BUFFERED, FILE_ANY_ACCESS)
166 #define IOCTL_VIDEO_UNMAP_VIDEO_MEMORY          CTL_CODE(FILE_DEVICE_VIDEO,  6, METHOD_BUFFERED, FILE_ANY_ACCESS)
167 #define IOCTL_VIDEO_SHARE_VIDEO_MEMORY          CTL_CODE(FILE_DEVICE_VIDEO,  7, METHOD_BUFFERED, FILE_ANY_ACCESS)
168 #define IOCTL_VIDEO_UNSHARE_VIDEO_MEMORY        CTL_CODE(FILE_DEVICE_VIDEO,  8, METHOD_BUFFERED, FILE_ANY_ACCESS)
169 #define IOCTL_VIDEO_GET_PUBLIC_ACCESS_RANGES    CTL_CODE(FILE_DEVICE_VIDEO,  9, METHOD_BUFFERED, FILE_ANY_ACCESS)
170 #define IOCTL_VIDEO_FREE_PUBLIC_ACCESS_RANGES   CTL_CODE(FILE_DEVICE_VIDEO,  10, METHOD_BUFFERED, FILE_ANY_ACCESS)
171 #define IOCTL_VIDEO_GET_POWER_MANAGEMENT        CTL_CODE(FILE_DEVICE_VIDEO,  11, METHOD_BUFFERED, FILE_ANY_ACCESS)
172 #define IOCTL_VIDEO_SET_POWER_MANAGEMENT        CTL_CODE(FILE_DEVICE_VIDEO,  12, METHOD_BUFFERED, FILE_ANY_ACCESS)
173 #define IOCTL_VIDEO_COLOR_CAPABILITIES          CTL_CODE(FILE_DEVICE_VIDEO,  13, METHOD_BUFFERED, FILE_ANY_ACCESS)
174 #define IOCTL_VIDEO_SET_COLOR_REGISTERS         CTL_CODE(FILE_DEVICE_VIDEO,  14, METHOD_BUFFERED, FILE_ANY_ACCESS)
175 #define IOCTL_VIDEO_DISABLE_POINTER             CTL_CODE(FILE_DEVICE_VIDEO,  15, METHOD_BUFFERED, FILE_ANY_ACCESS)
176 #define IOCTL_VIDEO_ENABLE_POINTER              CTL_CODE(FILE_DEVICE_VIDEO,  16, METHOD_BUFFERED, FILE_ANY_ACCESS)
177 #define IOCTL_VIDEO_QUERY_POINTER_CAPABILITIES  CTL_CODE(FILE_DEVICE_VIDEO,  17, METHOD_BUFFERED, FILE_ANY_ACCESS)
178 #define IOCTL_VIDEO_QUERY_POINTER_ATTR          CTL_CODE(FILE_DEVICE_VIDEO,  18, METHOD_BUFFERED, FILE_ANY_ACCESS)
179 #define IOCTL_VIDEO_SET_POINTER_ATTR            CTL_CODE(FILE_DEVICE_VIDEO,  19, METHOD_BUFFERED, FILE_ANY_ACCESS)
180 #define IOCTL_VIDEO_QUERY_POINTER_POSITION      CTL_CODE(FILE_DEVICE_VIDEO,  20, METHOD_BUFFERED, FILE_ANY_ACCESS)
181 #define IOCTL_VIDEO_SET_POINTER_POSITION        CTL_CODE(FILE_DEVICE_VIDEO,  21, METHOD_BUFFERED, FILE_ANY_ACCESS)
182 #define IOCTL_VIDEO_SAVE_HARDWARE_STATE         CTL_CODE(FILE_DEVICE_VIDEO,  22, METHOD_BUFFERED, FILE_ANY_ACCESS)
183 #define IOCTL_VIDEO_RESTORE_HARDWARE_STATE      CTL_CODE(FILE_DEVICE_VIDEO,  23, METHOD_BUFFERED, FILE_ANY_ACCESS)
184 #define IOCTL_VIDEO_DISABLE_CURSOR              CTL_CODE(FILE_DEVICE_VIDEO,  24, METHOD_BUFFERED, FILE_ANY_ACCESS)
185 #define IOCTL_VIDEO_ENABLE_CURSOR               CTL_CODE(FILE_DEVICE_VIDEO,  25, METHOD_BUFFERED, FILE_ANY_ACCESS)
186 #define IOCTL_VIDEO_QUERY_CURSOR_ATTR           CTL_CODE(FILE_DEVICE_VIDEO,  26, METHOD_BUFFERED, FILE_ANY_ACCESS)
187 #define IOCTL_VIDEO_SET_CURSOR_ATTR             CTL_CODE(FILE_DEVICE_VIDEO,  27, METHOD_BUFFERED, FILE_ANY_ACCESS)
188 #define IOCTL_VIDEO_QUERY_CURSOR_POSITION       CTL_CODE(FILE_DEVICE_VIDEO,  28, METHOD_BUFFERED, FILE_ANY_ACCESS)
189 #define IOCTL_VIDEO_SET_CURSOR_POSITION         CTL_CODE(FILE_DEVICE_VIDEO,  29, METHOD_BUFFERED, FILE_ANY_ACCESS)
190 #define IOCTL_VIDEO_GET_BANK_SELECT_CODE        CTL_CODE(FILE_DEVICE_VIDEO,  30, METHOD_BUFFERED, FILE_ANY_ACCESS)
191 #define IOCTL_VIDEO_SET_PALETTE_REGISTERS       CTL_CODE(FILE_DEVICE_VIDEO,  31, METHOD_BUFFERED, FILE_ANY_ACCESS)
192 #define IOCTL_VIDEO_LOAD_AND_SET_FONT           CTL_CODE(FILE_DEVICE_VIDEO,  32, METHOD_BUFFERED, FILE_ANY_ACCESS)
193
194 typedef struct _VIDEO_PORT_CONFIG_INFO
195 {
196   ULONG  Length;
197   ULONG  SystemIoBusNumber;
198   INTERFACE_TYPE  AdapterInterfaceType;
199   ULONG  BusInterruptLevel;
200   ULONG  BusInterruptVector;
201   KINTERRUPT_MODE  InterruptMode;
202   ULONG  NumEmulatorAccessEntries;
203   PEMULATOR_ACCESS_ENTRY  EmulatorAccessEntries;
204   ULONG  EmulatorAccessEntriesContext;
205   PHYSICAL_ADDRESS  VdmPhysicalVideoMemoryAddress;
206   ULONG  VdmPhysicalVideoMemoryLength;
207   ULONG  HardwareStateSize;
208   ULONG  DmaChannel;
209   ULONG  DmaPort;
210   UCHAR  DmaShareable;
211   UCHAR  InterruptShareable;
212 } VIDEO_PORT_CONFIG_INFO, *PVIDEO_PORT_CONFIG_INFO;
213
214 typedef VP_STATUS STDCALL
215 (*PVIDEO_HW_FIND_ADAPTER)(PVOID  HwDeviceExtension,
216                           PVOID  HwContext,
217                           PWSTR  ArgumentString,
218                           PVIDEO_PORT_CONFIG_INFO  ConfigInfo,
219                           PUCHAR  Again);
220
221 typedef BOOLEAN STDCALL
222 (*PVIDEO_HW_INITIALIZE)(PVOID  HwDeviceExtension);
223
224 typedef BOOLEAN STDCALL
225 (*PVIDEO_HW_INTERRUPT)(PVOID  HwDeviceExtension);
226
227 typedef BOOLEAN STDCALL
228 (*PVIDEO_HW_START_IO)(PVOID  HwDeviceExtension,
229                       PVIDEO_REQUEST_PACKET  RequestPacket);
230
231 typedef BOOLEAN STDCALL
232 (*PVIDEO_HW_RESET_HW)(PVOID  HwDeviceExtension,
233                       ULONG  Columns,
234                       ULONG  Rows);
235
236 typedef VOID STDCALL
237 (*PVIDEO_HW_TIMER)(PVOID  HwDeviceExtension);
238
239 typedef struct _VIDEO_HW_INITIALIZATION_DATA
240 {
241   ULONG  HwInitDataSize;
242   INTERFACE_TYPE  AdapterInterfaceType;
243   PVIDEO_HW_FIND_ADAPTER  HwFindAdapter;
244   PVIDEO_HW_INITIALIZE  HwInitialize;
245   PVIDEO_HW_INTERRUPT  HwInterrupt;
246   PVIDEO_HW_START_IO  HwStartIO;
247   ULONG  HwDeviceExtensionSize;
248   ULONG  StartingDeviceNumber;
249   PVIDEO_HW_RESET_HW  HwResetHw;
250   PVIDEO_HW_TIMER  HwTimer;
251 } VIDEO_HW_INITIALIZATION_DATA, *PVIDEO_HW_INITIALIZATION_DATA;
252
253 typedef VP_STATUS STDCALL
254 (*PMINIPORT_GET_REGISTRY_ROUTINE)(PVOID  HwDeviceExtension,
255                                   PVOID  Context,
256                                   PWSTR  ValueName,
257                                   PVOID  ValueData,
258                                   ULONG  ValueLength);
259
260 typedef VP_STATUS STDCALL
261 (*PMINIPORT_QUERY_DEVICE_ROUTINE)(PVOID  HwDeviceExtension,
262                                   PVOID  Context,
263                                   VIDEO_DEVICE_DATA_TYPE  DeviceDataType,
264                                   PVOID  Identifier,
265                                   ULONG  IdentiferLength,
266                                   PVOID  ConfigurationData,
267                                   ULONG  ConfigurationDataLength,
268                                   PVOID  ComponentInformation,
269                                   ULONG  ComponentInformationLength);
270
271 typedef BOOLEAN STDCALL
272 (*PMINIPORT_SYNCHRONIZE_ROUTINE)(PVOID Context);
273
274 typedef struct _VIDEO_ACCESS_RANGE
275 {
276   PHYSICAL_ADDRESS  RangeStart;
277   ULONG  RangeLength;
278   UCHAR  RangeInIoSpace;
279   UCHAR  RangeVisible;
280   UCHAR  RangeShareable;
281 } VIDEO_ACCESS_RANGE, *PVIDEO_ACCESS_RANGE;
282
283 typedef struct _VIDEO_X86_BIOS_ARGUMENTS
284 {
285   ULONG  Eax;
286   ULONG  Ebx;
287   ULONG  Ecx;
288   ULONG  Edx;
289   ULONG  Esi;
290   ULONG  Edi;
291   ULONG  Ebp;
292 } VIDEO_X86_BIOS_ARGUMENTS, *PVIDEO_X86_BIOS_ARGUMENTS;
293
294 typedef VOID STDCALL
295 (*PBANKED_SECTION_ROUTINE)(IN ULONG  ReadBank,
296                            IN ULONG  WriteBank,
297                            IN PVOID  Context);
298
299 typedef struct
300 {
301   USHORT  NumEntries;
302   USHORT  FirstEntry;
303   union
304     {
305       VIDEO_CLUTDATA  RgbArray;
306       ULONG  RgbLong;
307     } LookupTable[1];
308 } VIDEO_CLUT, *PVIDEO_CLUT;
309
310 typedef struct _VIDEO_MEMORY
311 {
312   PVOID RequestedVirtualAddress;
313 } VIDEO_MEMORY, *PVIDEO_MEMORY;
314
315 typedef struct _VIDEO_MEMORY_INFORMATION
316 {
317   PVOID  VideoRamBase;
318   ULONG  VideoRamLength;
319   PVOID  FrameBufferBase;
320   ULONG  FrameBufferLength;
321 } VIDEO_MEMORY_INFORMATION, *PVIDEO_MEMORY_INFORMATION;
322
323 typedef struct _VIDEO_MODE
324 {
325   ULONG  RequestedMode;
326 } VIDEO_MODE, *PVIDEO_MODE;
327
328 typedef struct _VIDEO_SHARE_MEMORY
329 {
330   HANDLE  ProcessHandle;
331   ULONG  ViewOffset;
332   ULONG  ViewSize;
333   PVOID  RequestedVirtualAddress;
334 } VIDEO_SHARE_MEMORY, *PVIDEO_SHARE_MEMORY;
335
336 ULONG STDCALL VideoPortCompareMemory(IN PVOID  Source1, IN PVOID  Source2, IN ULONG  Length);
337 VOID VideoPortDebugPrint(IN ULONG DebugPrintLevel, IN PCHAR DebugMessage, ...);
338 VP_STATUS STDCALL VideoPortDisableInterrupt(IN PVOID  HwDeviceExtension);
339 VP_STATUS STDCALL VideoPortEnableInterrupt(IN PVOID  HwDeviceExtension);
340 VOID STDCALL VideoPortFreeDeviceBase(IN PVOID  HwDeviceExtension, IN PVOID  MappedAddress);
341 ULONG STDCALL VideoPortGetBusData(IN PVOID  HwDeviceExtension,
342                           IN BUS_DATA_TYPE  BusDataType,
343                           IN ULONG  SlotNumber,
344                           OUT PVOID  Buffer,
345                           IN ULONG  Offset,
346                           IN ULONG  Length);
347 UCHAR STDCALL VideoPortGetCurrentIrql(VOID);
348 PVOID STDCALL VideoPortGetDeviceBase(IN PVOID  HwDeviceExtension,
349                              IN PHYSICAL_ADDRESS  IoAddress,
350                              IN ULONG  NumberOfUchars,
351                              IN UCHAR  InIoSpace);
352 VP_STATUS STDCALL VideoPortGetDeviceData(IN PVOID  HwDeviceExtension,
353                                  IN VIDEO_DEVICE_DATA_TYPE  DeviceDataType,
354                                  IN PMINIPORT_QUERY_DEVICE_ROUTINE  CallbackRoutine,
355                                  IN PVOID Context);
356 VP_STATUS STDCALL VideoPortGetAccessRanges(IN PVOID  HwDeviceExtension,
357                                    IN ULONG  NumRequestedResources,
358                                    IN PIO_RESOURCE_DESCRIPTOR  RequestedResources OPTIONAL,
359                                    IN ULONG  NumAccessRanges,
360                                    IN PVIDEO_ACCESS_RANGE  AccessRanges,
361                                    IN PVOID  VendorId,
362                                    IN PVOID  DeviceId,
363                                    IN PULONG  Slot);
364 VP_STATUS STDCALL VideoPortGetRegistryParameters(IN PVOID  HwDeviceExtension,
365                                          IN PWSTR  ParameterName,
366                                          IN UCHAR  IsParameterFileName,
367                                          IN PMINIPORT_GET_REGISTRY_ROUTINE  GetRegistryRoutine,
368                                          IN PVOID  Context);
369 ULONG STDCALL VideoPortInitialize(IN PVOID  Context1,
370                           IN PVOID  Context2,
371                           IN PVIDEO_HW_INITIALIZATION_DATA  HwInitializationData,
372                           IN PVOID  HwContext);
373 VP_STATUS STDCALL VideoPortInt10(IN PVOID  HwDeviceExtension,
374                          IN PVIDEO_X86_BIOS_ARGUMENTS  BiosArguments);
375 VOID STDCALL VideoPortLogError(IN PVOID  HwDeviceExtension,
376                        IN PVIDEO_REQUEST_PACKET  Vrp OPTIONAL,
377                        IN VP_STATUS  ErrorCode,
378                        IN ULONG  UniqueId);
379 VP_STATUS STDCALL VideoPortMapBankedMemory(IN PVOID  HwDeviceExtension,
380                                    IN PHYSICAL_ADDRESS  PhysicalAddress,
381                                    IN PULONG  Length,
382                                    IN PULONG  InIoSpace,
383                                    OUT PVOID  *VirtualAddress,
384                                    IN ULONG  BankLength,
385                                    IN UCHAR  ReadWriteBank,
386                                    IN PBANKED_SECTION_ROUTINE  BankRoutine,
387                                    IN PVOID  Context);
388 VP_STATUS STDCALL VideoPortMapMemory(IN PVOID  HwDeviceExtension,
389                              IN PHYSICAL_ADDRESS  PhysicalAddress,
390                              IN PULONG  Length,
391                              IN PULONG  InIoSpace,
392                              OUT PVOID  *VirtualAddress);
393 VOID STDCALL VideoPortMoveMemory(OUT PVOID  Destination,
394                          IN PVOID  Source,
395                          IN ULONG  Length);
396 UCHAR STDCALL VideoPortReadPortUchar(IN PUCHAR  Port);
397 USHORT STDCALL VideoPortReadPortUshort(IN PUSHORT Port);
398 ULONG STDCALL VideoPortReadPortUlong(IN PULONG Port);
399 VOID STDCALL VideoPortReadPortBufferUchar(IN PUCHAR  Port, OUT PUCHAR  Buffer, IN ULONG  Count);
400 VOID STDCALL VideoPortReadPortBufferUshort(IN PUSHORT Port, OUT PUSHORT Buffer, IN ULONG Count);
401 VOID STDCALL VideoPortReadPortBufferUlong(IN PULONG Port, OUT PULONG Buffer, IN ULONG Count);
402 UCHAR STDCALL VideoPortReadRegisterUchar(IN PUCHAR Register);
403 USHORT STDCALL VideoPortReadRegisterUshort(IN PUSHORT Register);
404 ULONG STDCALL VideoPortReadRegisterUlong(IN PULONG Register);
405 VOID STDCALL VideoPortReadRegisterBufferUchar(IN PUCHAR  Register, OUT PUCHAR  Buffer, IN ULONG  Count);
406 VOID STDCALL VideoPortReadRegisterBufferUshort(IN PUSHORT  Register, OUT PUSHORT  Buffer, IN ULONG  Count);
407 VOID STDCALL VideoPortReadRegisterBufferUlong(IN PULONG  Register, OUT PULONG  Buffer, IN ULONG  Count);
408 BOOLEAN STDCALL VideoPortScanRom(IN PVOID  HwDeviceExtension, 
409                          IN PUCHAR  RomBase,
410                          IN ULONG  RomLength,
411                          IN PUCHAR  String);
412 ULONG STDCALL VideoPortSetBusData(IN PVOID  HwDeviceExtension,
413                           IN BUS_DATA_TYPE  BusDataType,
414                           IN ULONG  SlotNumber,
415                           IN PVOID  Buffer,
416                           IN ULONG  Offset,
417                           IN ULONG  Length);
418 VP_STATUS STDCALL VideoPortSetRegistryParameters(IN PVOID  HwDeviceExtension,
419                                          IN PWSTR  ValueName,
420                                          IN PVOID  ValueData,
421                                          IN ULONG  ValueLength);
422 VP_STATUS STDCALL VideoPortSetTrappedEmulatorPorts(IN PVOID  HwDeviceExtension,
423                                            IN ULONG  NumAccessRanges,
424                                            IN PVIDEO_ACCESS_RANGE  AccessRange);
425 VOID STDCALL VideoPortStallExecution(IN ULONG  Microseconds);
426 VOID STDCALL VideoPortStartTimer(IN PVOID  HwDeviceExtension);
427 VOID STDCALL VideoPortStopTimer(IN PVOID  HwDeviceExtension);
428 BOOLEAN STDCALL VideoPortSynchronizeExecution(IN PVOID  HwDeviceExtension,
429                                       IN VIDEO_SYNCHRONIZE_PRIORITY  Priority,
430                                       IN PMINIPORT_SYNCHRONIZE_ROUTINE  SynchronizeRoutine,
431                                       OUT PVOID  Context);
432 VP_STATUS STDCALL VideoPortUnmapMemory(IN PVOID  HwDeviceExtension,
433                                IN PVOID  VirtualAddress,
434                                IN HANDLE  ProcessHandle);
435 VP_STATUS STDCALL VideoPortVerifyAccessRanges(IN PVOID  HwDeviceExtension,
436                                       IN ULONG  NumAccessRanges,
437                                       IN PVIDEO_ACCESS_RANGE  AccessRanges);
438 VOID STDCALL VideoPortWritePortUchar(IN PUCHAR  Port, IN UCHAR  Value);
439 VOID STDCALL VideoPortWritePortUshort(IN PUSHORT  Port, IN USHORT  Value);
440 VOID STDCALL VideoPortWritePortUlong(IN PULONG Port, IN ULONG Value);
441 VOID STDCALL VideoPortWritePortBufferUchar(IN PUCHAR  Port, IN PUCHAR  Buffer, IN ULONG  Count);
442 VOID STDCALL VideoPortWritePortBufferUshort(IN PUSHORT  Port, IN PUSHORT  Buffer, IN ULONG  Count);
443 VOID STDCALL VideoPortWritePortBufferUlong(IN PULONG  Port, IN PULONG  Buffer, IN ULONG  Count);
444 VOID STDCALL VideoPortWriteRegisterUchar(IN PUCHAR  Register, IN UCHAR  Value);
445 VOID STDCALL VideoPortWriteRegisterUshort(IN PUSHORT  Register, IN USHORT  Value);
446 VOID STDCALL VideoPortWriteRegisterUlong(IN PULONG  Register, IN ULONG  Value);
447 VOID STDCALL VideoPortWriteRegisterBufferUchar(IN PUCHAR  Register, IN PUCHAR  Buffer, IN ULONG  Count);
448 VOID STDCALL VideoPortWriteRegisterBufferUshort(IN PUSHORT  Register, IN PUSHORT  Buffer, IN ULONG  Count);
449 VOID STDCALL VideoPortWriteRegisterBufferUlong(IN PULONG  Register, IN PULONG  Buffer, IN ULONG  Count);
450 VOID STDCALL VideoPortZeroMemory(OUT PVOID  Destination, IN ULONG  Length);
451 VOID STDCALL VideoPortZeroDeviceMemory(OUT PVOID  Destination, IN ULONG  Length);
452
453