Move more stuff to wdm.h
[reactos.git] / include / ddk / ntddvdeo.h
1 /*
2 * ntddvdeo.h
3 *
4 * Definitions for video devices
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 __NTDDVDEO_H
24 #define __NTDDVDEO_H
25
26 #ifdef __cplusplus
27 extern "C" {
28 #endif
29
30 #define VIDEO_DEVICE_NAME "DISPLAY%d"
31 #define WVIDEO_DEVICE_NAME L"DISPLAY%d"
32
33 #define DD_FULLSCREEN_VIDEO_DEVICE_NAME L"\\Device\\FSVideo"
34
35 DEFINE_GUID(GUID_DEVINTERFACE_DISPLAY_ADAPTER, \
36 0x5b45201d, 0xf2f2, 0x4f3b, 0x85, 0xbb, 0x30, 0xff, 0x1f, 0x95, 0x35, 0x99);
37
38
39 #define IOCTL_VIDEO_DISABLE_CURSOR \
40 CTL_CODE (FILE_DEVICE_VIDEO, 0x109, METHOD_BUFFERED, FILE_ANY_ACCESS)
41
42 #define IOCTL_VIDEO_DISABLE_POINTER \
43 CTL_CODE(FILE_DEVICE_VIDEO, 0x10f, METHOD_BUFFERED, FILE_ANY_ACCESS)
44
45 #define IOCTL_VIDEO_ENABLE_CURSOR \
46 CTL_CODE(FILE_DEVICE_VIDEO, 0x108, METHOD_BUFFERED, FILE_ANY_ACCESS)
47
48 #define IOCTL_VIDEO_ENABLE_POINTER \
49 CTL_CODE(FILE_DEVICE_VIDEO, 0x10e, METHOD_BUFFERED, FILE_ANY_ACCESS)
50
51 #define IOCTL_VIDEO_FREE_PUBLIC_ACCESS_RANGES \
52 CTL_CODE(FILE_DEVICE_VIDEO, 0x119, METHOD_BUFFERED, FILE_ANY_ACCESS)
53
54 #define IOCTL_VIDEO_GET_BANK_SELECT_CODE \
55 CTL_CODE(FILE_DEVICE_VIDEO, 0x115, METHOD_BUFFERED, FILE_ANY_ACCESS)
56
57 #define IOCTL_VIDEO_GET_CHILD_STATE \
58 CTL_CODE(FILE_DEVICE_VIDEO, 0x120, METHOD_BUFFERED, FILE_ANY_ACCESS)
59
60 #define IOCTL_VIDEO_GET_POWER_MANAGEMENT \
61 CTL_CODE(FILE_DEVICE_VIDEO, 0x11c, METHOD_BUFFERED, FILE_ANY_ACCESS)
62
63 #define IOCTL_VIDEO_HANDLE_VIDEOPARAMETERS \
64 CTL_CODE(FILE_DEVICE_VIDEO, 0x08, METHOD_BUFFERED, FILE_ANY_ACCESS)
65
66 #define IOCTL_VIDEO_LOAD_AND_SET_FONT \
67 CTL_CODE(FILE_DEVICE_VIDEO, 0x105, METHOD_BUFFERED, FILE_ANY_ACCESS)
68
69 #define IOCTL_VIDEO_MAP_VIDEO_MEMORY \
70 CTL_CODE(FILE_DEVICE_VIDEO, 0x116, METHOD_BUFFERED, FILE_ANY_ACCESS)
71
72 #define IOCTL_VIDEO_QUERY_AVAIL_MODES \
73 CTL_CODE(FILE_DEVICE_VIDEO, 0x100, METHOD_BUFFERED, FILE_ANY_ACCESS)
74
75 #define IOCTL_VIDEO_QUERY_COLOR_CAPABILITIES \
76 CTL_CODE(FILE_DEVICE_VIDEO, 0x11a, METHOD_BUFFERED, FILE_ANY_ACCESS)
77
78 #define IOCTL_VIDEO_QUERY_CURRENT_MODE \
79 CTL_CODE(FILE_DEVICE_VIDEO, 0x102, METHOD_BUFFERED, FILE_ANY_ACCESS)
80
81 #define IOCTL_VIDEO_QUERY_CURSOR_ATTR \
82 CTL_CODE(FILE_DEVICE_VIDEO, 0x10b, METHOD_BUFFERED, FILE_ANY_ACCESS)
83
84 #define IOCTL_VIDEO_QUERY_CURSOR_POSITION \
85 CTL_CODE(FILE_DEVICE_VIDEO, 0x10d, METHOD_BUFFERED, FILE_ANY_ACCESS)
86
87 #define IOCTL_VIDEO_QUERY_NUM_AVAIL_MODES \
88 CTL_CODE(FILE_DEVICE_VIDEO, 0x101, METHOD_BUFFERED, FILE_ANY_ACCESS)
89
90 #define IOCTL_VIDEO_QUERY_POINTER_ATTR \
91 CTL_CODE(FILE_DEVICE_VIDEO, 0x111, METHOD_BUFFERED, FILE_ANY_ACCESS)
92
93 #define IOCTL_VIDEO_QUERY_POINTER_CAPABILITIES \
94 CTL_CODE(FILE_DEVICE_VIDEO, 0x114, METHOD_BUFFERED, FILE_ANY_ACCESS)
95
96 #define IOCTL_VIDEO_QUERY_POINTER_POSITION \
97 CTL_CODE(FILE_DEVICE_VIDEO, 0x113, METHOD_BUFFERED, FILE_ANY_ACCESS)
98
99 #define IOCTL_VIDEO_QUERY_PUBLIC_ACCESS_RANGES \
100 CTL_CODE(FILE_DEVICE_VIDEO, 0x118, METHOD_BUFFERED, FILE_ANY_ACCESS)
101
102 #define IOCTL_VIDEO_RESET_DEVICE \
103 CTL_CODE(FILE_DEVICE_VIDEO, 0x104, METHOD_BUFFERED, FILE_ANY_ACCESS)
104
105 #define IOCTL_VIDEO_RESTORE_HARDWARE_STATE \
106 CTL_CODE(FILE_DEVICE_VIDEO, 0x81, METHOD_BUFFERED, FILE_ANY_ACCESS)
107
108 #define IOCTL_VIDEO_SAVE_HARDWARE_STATE \
109 CTL_CODE(FILE_DEVICE_VIDEO, 0x80, METHOD_BUFFERED, FILE_ANY_ACCESS)
110
111 #define IOCTL_VIDEO_SET_CHILD_STATE_CONFIGURATION \
112 CTL_CODE(FILE_DEVICE_VIDEO, 0x122, METHOD_BUFFERED, FILE_ANY_ACCESS)
113
114 #define IOCTL_VIDEO_SET_COLOR_REGISTERS \
115 CTL_CODE(FILE_DEVICE_VIDEO, 0x107, METHOD_BUFFERED, FILE_ANY_ACCESS)
116
117 #define IOCTL_VIDEO_SET_CURRENT_MODE \
118 CTL_CODE(FILE_DEVICE_VIDEO, 0x103, METHOD_BUFFERED, FILE_ANY_ACCESS)
119
120 #define IOCTL_VIDEO_SET_CURSOR_ATTR \
121 CTL_CODE(FILE_DEVICE_VIDEO, 0x10a, METHOD_BUFFERED, FILE_ANY_ACCESS)
122
123 #define IOCTL_VIDEO_SET_CURSOR_POSITION \
124 CTL_CODE(FILE_DEVICE_VIDEO, 0x10c, METHOD_BUFFERED, FILE_ANY_ACCESS)
125
126 #define IOCTL_VIDEO_SET_PALETTE_REGISTERS \
127 CTL_CODE(FILE_DEVICE_VIDEO, 0x106, METHOD_BUFFERED, FILE_ANY_ACCESS)
128
129 #define IOCTL_VIDEO_SET_POINTER_ATTR \
130 CTL_CODE(FILE_DEVICE_VIDEO, 0x110, METHOD_BUFFERED, FILE_ANY_ACCESS)
131
132 #define IOCTL_VIDEO_SET_POINTER_POSITION \
133 CTL_CODE(FILE_DEVICE_VIDEO, 0x112, METHOD_BUFFERED, FILE_ANY_ACCESS)
134
135 #define IOCTL_VIDEO_SET_POWER_MANAGEMENT \
136 CTL_CODE(FILE_DEVICE_VIDEO, 0x11b, METHOD_BUFFERED, FILE_ANY_ACCESS)
137
138 #define IOCTL_VIDEO_SHARE_VIDEO_MEMORY \
139 CTL_CODE(FILE_DEVICE_VIDEO, 0x11d, METHOD_BUFFERED, FILE_ANY_ACCESS)
140
141 #define IOCTL_VIDEO_SWITCH_DUALVIEW \
142 CTL_CODE(FILE_DEVICE_VIDEO, 0x123, METHOD_BUFFERED, FILE_ANY_ACCESS)
143
144 #define IOCTL_VIDEO_UNMAP_VIDEO_MEMORY \
145 CTL_CODE(FILE_DEVICE_VIDEO, 0x117, METHOD_BUFFERED, FILE_ANY_ACCESS)
146
147 #define IOCTL_VIDEO_UNSHARE_VIDEO_MEMORY \
148 CTL_CODE(FILE_DEVICE_VIDEO, 0x11e, METHOD_BUFFERED, FILE_ANY_ACCESS)
149
150 #define IOCTL_VIDEO_VALIDATE_CHILD_STATE_CONFIGURATION \
151 CTL_CODE(FILE_DEVICE_VIDEO, 0x121, METHOD_BUFFERED, FILE_ANY_ACCESS)
152
153
154
155 typedef struct _VIDEO_MEMORY {
156 PVOID RequestedVirtualAddress;
157 } VIDEO_MEMORY, *PVIDEO_MEMORY;
158
159 typedef struct _VIDEO_MEMORY_INFORMATION {
160 PVOID VideoRamBase;
161 ULONG VideoRamLength;
162 PVOID FrameBufferBase;
163 ULONG FrameBufferLength;
164 } VIDEO_MEMORY_INFORMATION, *PVIDEO_MEMORY_INFORMATION;
165
166 /* VIDEO_MODE.RequestedMode */
167 #define VIDEO_MODE_MAP_MEM_LINEAR 0x40000000
168 #define VIDEO_MODE_NO_ZERO_MEMORY 0x80000000
169
170 typedef struct _VIDEO_MODE {
171 ULONG RequestedMode;
172 } VIDEO_MODE, *PVIDEO_MODE;
173
174 /* VIDEO_MODE_INFORMATION.AttributeFlags */
175 #define VIDEO_MODE_COLOR 0x0001
176 #define VIDEO_MODE_GRAPHICS 0x0002
177 #define VIDEO_MODE_PALETTE_DRIVEN 0x0004
178 #define VIDEO_MODE_MANAGED_PALETTE 0x0008
179 #define VIDEO_MODE_INTERLACED 0x0010
180 #define VIDEO_MODE_NO_OFF_SCREEN 0x0020
181 #define VIDEO_MODE_NO_64_BIT_ACCESS 0x0040
182 #define VIDEO_MODE_BANKED 0x0080
183 #define VIDEO_MODE_LINEAR 0x0100
184
185 typedef struct _VIDEO_MODE_INFORMATION {
186 ULONG Length;
187 ULONG ModeIndex;
188 ULONG VisScreenWidth;
189 ULONG VisScreenHeight;
190 ULONG ScreenStride;
191 ULONG NumberOfPlanes;
192 ULONG BitsPerPlane;
193 ULONG Frequency;
194 ULONG XMillimeter;
195 ULONG YMillimeter;
196 ULONG NumberRedBits;
197 ULONG NumberGreenBits;
198 ULONG NumberBlueBits;
199 ULONG RedMask;
200 ULONG GreenMask;
201 ULONG BlueMask;
202 ULONG AttributeFlags;
203 ULONG VideoMemoryBitmapWidth;
204 ULONG VideoMemoryBitmapHeight;
205 ULONG DriverSpecificAttributeFlags;
206 } VIDEO_MODE_INFORMATION, *PVIDEO_MODE_INFORMATION;
207
208 typedef struct _VIDEO_NUM_MODES {
209 ULONG NumModes;
210 ULONG ModeInformationLength;
211 } VIDEO_NUM_MODES, *PVIDEO_NUM_MODES;
212
213 typedef enum _VIDEO_POWER_STATE {
214 VideoPowerUnspecified = 0,
215 VideoPowerOn = 1,
216 VideoPowerStandBy,
217 VideoPowerSuspend,
218 VideoPowerOff,
219 VideoPowerHibernate,
220 VideoPowerShutdown,
221 VideoPowerMaximum
222 } VIDEO_POWER_STATE, *PVIDEO_POWER_STATE;
223
224 typedef struct _VIDEO_POWER_MANAGEMENT {
225 ULONG Length;
226 ULONG DPMSVersion;
227 ULONG PowerState;
228 } VIDEO_POWER_MANAGEMENT, *PVIDEO_POWER_MANAGEMENT;
229
230 typedef struct _VIDEO_PUBLIC_ACCESS_RANGES {
231 ULONG InIoSpace;
232 ULONG MappedInIoSpace;
233 PVOID VirtualAddress;
234 } VIDEO_PUBLIC_ACCESS_RANGES, *PVIDEO_PUBLIC_ACCESS_RANGES;
235
236 typedef struct _VIDEO_SHARE_MEMORY {
237 HANDLE ProcessHandle;
238 ULONG ViewOffset;
239 ULONG ViewSize;
240 PVOID RequestedVirtualAddress;
241 } VIDEO_SHARE_MEMORY, *PVIDEO_SHARE_MEMORY;
242
243 typedef struct _VIDEO_SHARE_MEMORY_INFORMATION {
244 ULONG SharedViewOffset;
245 ULONG SharedViewSize;
246 PVOID VirtualAddress;
247 } VIDEO_SHARE_MEMORY_INFORMATION, *PVIDEO_SHARE_MEMORY_INFORMATION;
248
249 /* VIDEO_BANK_SELECT.BankingFlags constants */
250 #define PLANAR_HC 0x00000001
251
252 /* VIDEO_BANK_SELECT.BankingType and PlanarHCBankingType constants */
253 typedef enum _VIDEO_BANK_TYPE {
254 VideoNotBanked = 0,
255 VideoBanked1RW,
256 VideoBanked1R1W,
257 VideoBanked2RW,
258 NumVideoBankTypes
259 } VIDEO_BANK_TYPE, *PVIDEO_BANK_TYPE;
260
261 typedef struct _VIDEO_BANK_SELECT {
262 ULONG Length;
263 ULONG Size;
264 ULONG BankingFlags;
265 ULONG BankingType;
266 ULONG PlanarHCBankingType;
267 ULONG BitmapWidthInBytes;
268 ULONG BitmapSize;
269 ULONG Granularity;
270 ULONG PlanarHCGranularity;
271 ULONG CodeOffset;
272 ULONG PlanarHCBankCodeOffset;
273 ULONG PlanarHCEnableCodeOffset;
274 ULONG PlanarHCDisableCodeOffset;
275 } VIDEO_BANK_SELECT, *PVIDEO_BANK_SELECT;
276
277 typedef struct _VIDEO_LOAD_FONT_INFORMATION {
278 USHORT WidthInPixels;
279 USHORT HeightInPixels;
280 ULONG FontSize;
281 UCHAR Font[1];
282 } VIDEO_LOAD_FONT_INFORMATION, *PVIDEO_LOAD_FONT_INFORMATION;
283
284 /* VIDEO_COLOR_CAPABILITIES.AttributeFlags constants */
285 #define VIDEO_DEVICE_COLOR 0x00000001
286 #define VIDEO_OPTIONAL_GAMMET_TABLE 0x00000002
287
288 typedef struct _VIDEO_COLOR_CAPABILITIES {
289 ULONG Length;
290 ULONG AttributeFlags;
291 LONG RedPhosphoreDecay;
292 LONG GreenPhosphoreDecay;
293 LONG BluePhosphoreDecay;
294 LONG WhiteChromaticity_x;
295 LONG WhiteChromaticity_y;
296 LONG WhiteChromaticity_Y;
297 LONG RedChromaticity_x;
298 LONG RedChromaticity_y;
299 LONG GreenChromaticity_x;
300 LONG GreenChromaticity_y;
301 LONG BlueChromaticity_x;
302 LONG BlueChromaticity_y;
303 LONG WhiteGamma;
304 LONG RedGamma;
305 LONG GreenGamma;
306 LONG BlueGamma;
307 } VIDEO_COLOR_CAPABILITIES, *PVIDEO_COLOR_CAPABILITIES;
308
309 typedef struct _VIDEO_CURSOR_ATTRIBUTES {
310 USHORT Width;
311 USHORT Height;
312 SHORT Column;
313 SHORT Row;
314 UCHAR Rate;
315 UCHAR Enable;
316 } VIDEO_CURSOR_ATTRIBUTES, *PVIDEO_CURSOR_ATTRIBUTES;
317
318 typedef struct _VIDEO_CURSOR_POSITION {
319 SHORT Column;
320 SHORT Row;
321 } VIDEO_CURSOR_POSITION, *PVIDEO_CURSOR_POSITION;
322
323 typedef struct _VIDEO_POINTER_ATTRIBUTES {
324 ULONG Flags;
325 ULONG Width;
326 ULONG Height;
327 ULONG WidthInBytes;
328 ULONG Enable;
329 SHORT Column;
330 SHORT Row;
331 UCHAR Pixels[1];
332 } VIDEO_POINTER_ATTRIBUTES, *PVIDEO_POINTER_ATTRIBUTES;
333
334 /* VIDEO_POINTER_CAPABILITIES.Flags */
335 #define VIDEO_MODE_ASYNC_POINTER 0x01
336 #define VIDEO_MODE_MONO_POINTER 0x02
337 #define VIDEO_MODE_COLOR_POINTER 0x04
338 #define VIDEO_MODE_ANIMATE_START 0x08
339 #define VIDEO_MODE_ANIMATE_UPDATE 0x10
340
341 typedef struct _VIDEO_POINTER_CAPABILITIES {
342 ULONG Flags;
343 ULONG MaxWidth;
344 ULONG MaxHeight;
345 ULONG HWPtrBitmapStart;
346 ULONG HWPtrBitmapEnd;
347 } VIDEO_POINTER_CAPABILITIES, *PVIDEO_POINTER_CAPABILITIES;
348
349 typedef struct _VIDEO_POINTER_POSITION {
350 SHORT Column;
351 SHORT Row;
352 } VIDEO_POINTER_POSITION, *PVIDEO_POINTER_POSITION;
353
354
355 /* VIDEO_HARDWARE_STATE_HEADER.VGAStateFlags constants */
356 #define VIDEO_STATE_NON_STANDARD_VGA 0x00000001
357 #define VIDEO_STATE_UNEMULATED_VGA_STATE 0x00000002
358 #define VIDEO_STATE_PACKED_CHAIN4_MODE 0x00000004
359
360 typedef struct _VIDEO_HARDWARE_STATE_HEADER {
361 ULONG Length;
362 UCHAR PortValue[0x30];
363 ULONG AttribIndexDataState;
364 ULONG BasicSequencerOffset;
365 ULONG BasicCrtContOffset;
366 ULONG BasicGraphContOffset;
367 ULONG BasicAttribContOffset;
368 ULONG BasicDacOffset;
369 ULONG BasicLatchesOffset;
370 ULONG ExtendedSequencerOffset;
371 ULONG ExtendedCrtContOffset;
372 ULONG ExtendedGraphContOffset;
373 ULONG ExtendedAttribContOffset;
374 ULONG ExtendedDacOffset;
375 ULONG ExtendedValidatorStateOffset;
376 ULONG ExtendedMiscDataOffset;
377 ULONG PlaneLength;
378 ULONG Plane1Offset;
379 ULONG Plane2Offset;
380 ULONG Plane3Offset;
381 ULONG Plane4Offset;
382 ULONG VGAStateFlags;
383 ULONG DIBOffset;
384 ULONG DIBBitsPerPixel;
385 ULONG DIBXResolution;
386 ULONG DIBYResolution;
387 ULONG DIBXlatOffset;
388 ULONG DIBXlatLength;
389 ULONG VesaInfoOffset;
390 PVOID FrameBufferData;
391 } VIDEO_HARDWARE_STATE_HEADER, *PVIDEO_HARDWARE_STATE_HEADER;
392
393 typedef struct _VIDEO_CLUTDATA {
394 UCHAR Red;
395 UCHAR Green;
396 UCHAR Blue;
397 UCHAR Unused;
398 } VIDEO_CLUTDATA, *PVIDEO_CLUTDATA;
399
400 typedef struct {
401 USHORT NumEntries;
402 USHORT FirstEntry;
403 union {
404 VIDEO_CLUTDATA RgbArray;
405 ULONG RgbLong;
406 } LookupTable[1];
407 } VIDEO_CLUT, *PVIDEO_CLUT;
408
409 typedef struct _VIDEO_PALETTE_DATA {
410 USHORT NumEntries;
411 USHORT FirstEntry;
412 USHORT Colors[1];
413 } VIDEO_PALETTE_DATA, *PVIDEO_PALETTE_DATA;
414
415 typedef struct _VIDEO_HARDWARE_STATE {
416 PVIDEO_HARDWARE_STATE_HEADER StateHeader;
417 ULONG StateLength;
418 } VIDEO_HARDWARE_STATE, *PVIDEO_HARDWARE_STATE;
419
420 #define VIDEO_CHILD_ACTIVE 0x00000001
421 #define VIDEO_CHILD_DETACHED 0x00000002
422 #define VIDEO_CHILD_NOPRUNE_FREQ 0x80000000
423 #define VIDEO_CHILD_NOPRUNE_RESOLUTION 0x40000000
424
425 #define VIDEO_DUALVIEW_REMOVABLE 0x00000001
426 #define VIDEO_DUALVIEW_PRIMARY 0x80000000
427 #define VIDEO_DUALVIEW_SECONDARY 0x40000000
428
429 #ifndef _WINDDI_
430 typedef struct _ENG_EVENT *PEVENT;
431 #endif
432
433 typedef struct _ENG_EVENT
434 {
435 PVOID pKEvent;
436 ULONG fFlags;
437 } ENG_EVENT, *PENG_EVENT;
438
439
440 #ifdef __cplusplus
441 }
442 #endif
443
444 #endif /* __NTDDVDEO_H */