]> git.proxmox.com Git - mirror_edk2.git/blob - IntelFrameworkModulePkg/Csm/BiosThunk/VideoDxe/VesaBiosExtensions.h
IntelFrameworkModulePkg: INF/DEC file updates to EDK II packages
[mirror_edk2.git] / IntelFrameworkModulePkg / Csm / BiosThunk / VideoDxe / VesaBiosExtensions.h
1 /** @file
2
3 Copyright (c) 2006 - 2013, Intel Corporation. All rights reserved.<BR>
4
5 This program and the accompanying materials
6 are licensed and made available under the terms and conditions
7 of the BSD License which accompanies this distribution. The
8 full text of the license may be found at
9 http://opensource.org/licenses/bsd-license.php
10
11 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
12 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
13
14 **/
15
16 #ifndef _VESA_BIOS_EXTENSIONS_H_
17 #define _VESA_BIOS_EXTENSIONS_H_
18
19 //
20 // Turn on byte packing of data structures
21 //
22 #pragma pack(1)
23 //
24 // VESA BIOS Extensions status codes
25 //
26 #define VESA_BIOS_EXTENSIONS_STATUS_SUCCESS 0x004f
27
28 //
29 // VESA BIOS Extensions Services
30 //
31 #define VESA_BIOS_EXTENSIONS_RETURN_CONTROLLER_INFORMATION 0x4f00
32
33 /*++
34
35 Routine Description:
36 Function 00 : Return Controller Information
37
38 Arguments:
39 Inputs:
40 AX = 0x4f00
41 ES:DI = Pointer to buffer to place VESA_BIOS_EXTENSIONS_INFORMATION_BLOCK structure
42 Outputs:
43 AX = Return Status
44
45 --*/
46 #define VESA_BIOS_EXTENSIONS_RETURN_MODE_INFORMATION 0x4f01
47
48 /*++
49
50 Routine Description:
51 Function 01 : Return Mode Information
52
53 Arguments:
54 Inputs:
55 AX = 0x4f01
56 CX = Mode Number
57 ES:DI = Pointer to buffer to place VESA_BIOS_EXTENSIONS_MODE_INFORMATION_BLOCK structure
58 Outputs:
59 AX = Return Status
60
61 --*/
62 #define VESA_BIOS_EXTENSIONS_SET_MODE 0x4f02
63
64 /*++
65
66 Routine Description:
67 Function 02 : Set Mode
68
69 Arguments:
70 Inputs:
71 AX = 0x4f02
72 BX = Desired mode to set
73 D0-D8 = Mode Number
74 D9-D10 = Reserved (must be 0)
75 D11 = 0 - Use current default refresh rate
76 = 1 - Use user specfieid CRTC values for refresh rate
77 D12-D13 = Reserved (must be 0)
78 D14 = 0 - Use windowed frame buffer model
79 = 1 - Use linear/flat frame buffer model
80 D15 = 0 - Clear display memory
81 = 1 - Don't clear display memory
82 ES:DI = Pointer to buffer to the VESA_BIOS_EXTENSIONS_CRTC_INFORMATION_BLOCK structure
83 Outputs:
84 AX = Return Status
85
86 --*/
87 #define VESA_BIOS_EXTENSIONS_RETURN_CURRENT_MODE 0x4f03
88
89 /*++
90
91 Routine Description:
92 Function 03 : Return Current Mode
93
94 Arguments:
95 Inputs:
96 AX = 0x4f03
97 Outputs:
98 AX = Return Status
99 BX = Current mode
100 D0-D13 = Mode Number
101 D14 = 0 - Windowed frame buffer model
102 = 1 - Linear/flat frame buffer model
103 D15 = 0 - Memory cleared at last mode set
104 = 1 - Memory not cleared at last mode set
105
106 --*/
107 #define VESA_BIOS_EXTENSIONS_SAVE_RESTORE_STATE 0x4f04
108
109 /*++
110
111 Routine Description:
112 Function 04 : Save/Restore State
113
114 Arguments:
115 Inputs:
116 AX = 0x4f03
117 DL = 0x00 - Return Save/Restore State buffer size
118 = 0x01 - Save State
119 = 0x02 - Restore State
120 CX = Requested Status
121 D0 = Save/Restore controller hardware state
122 D1 = Save/Restore BIOS data state
123 D2 = Save/Restore DAC state
124 D3 = Save/Restore Regsiter state
125 ES:BX = Pointer to buffer if DL=1 or DL=2
126 Outputs:
127 AX = Return Status
128 BX = Number of 64 byte blocks to hold the state buffer if DL=0
129
130 --*/
131 #define VESA_BIOS_EXTENSIONS_EDID 0x4f15
132
133 /*++
134
135 Routine Description:
136 Function 15 : implement VBE/DDC service
137
138 Arguments:
139 Inputs:
140 AX = 0x4f15
141 BL = 0x00 - Report VBE/DDC Capabilities
142 CX = 0x00 - Controller unit number (00 = primary controller)
143 ES:DI = Null pointer, must be 0:0 in version 1.0
144 Outputs:
145 AX = Return Status
146 BH = Approx. time in seconds, rounded up, to transfer one EDID block(128 bytes)
147 BL = DDC level supported
148 D0 = 0 DDC1 not supported
149 = 1 DDC1 supported
150 D1 = 0 DDC2 not supported
151 = 1 DDC2 supported
152 D2 = 0 Screen not blanked during data transfer
153 = 1 Screen blanked during data transfer
154
155 Inputs:
156 AX = 0x4f15
157 BL = 0x01 - Read EDID
158 CX = 0x00 - Controller unit number (00 = primary controller)
159 DX = 0x00 - EDID block number
160 ES:DI = Pointer to buffer in which the EDID block is returned
161 Outputs:
162 AX = Return Status
163 --*/
164
165 //
166 // Timing data from EDID data block
167 //
168 #define VESA_BIOS_EXTENSIONS_EDID_BLOCK_SIZE 128
169 #define VESA_BIOS_EXTENSIONS_EDID_ESTABLISHED_TIMING_MAX_NUMBER 17
170
171 //
172 // Established Timings: 24 possible resolutions
173 // Standard Timings: 8 possible resolutions
174 // Detailed Timings: 4 possible resolutions
175 //
176 #define VESA_BIOS_EXTENSIONS_EDID_TIMING_MAX_NUMBER 36
177
178 //
179 // Timing data size for Established Timings, Standard Timings and Detailed Timings
180 //
181 #define VESA_BIOS_EXTENSIONS_ESTABLISHED_TIMING_SIZE 3
182 #define VESA_BIOS_EXTENSIONS_STANDARD_TIMING_SIZE 16
183 #define VESA_BIOS_EXTENSIONS_DETAILED_TIMING_EACH_DESCRIPTOR_SIZE 18
184 #define VESA_BIOS_EXTENSIONS_DETAILED_TIMING_DESCRIPTOR_MAX_SIZE 72
185
186 typedef struct {
187 UINT16 HorizontalResolution;
188 UINT16 VerticalResolution;
189 UINT16 RefreshRate;
190 } VESA_BIOS_EXTENSIONS_EDID_TIMING;
191
192 typedef struct {
193 UINT32 ValidNumber;
194 UINT32 Key[VESA_BIOS_EXTENSIONS_EDID_TIMING_MAX_NUMBER];
195 } VESA_BIOS_EXTENSIONS_VALID_EDID_TIMING;
196
197 typedef struct {
198 UINT8 Header[8]; //EDID header "00 FF FF FF FF FF FF 00"
199 UINT16 ManufactureName; //EISA 3-character ID
200 UINT16 ProductCode; //Vendor assigned code
201 UINT32 SerialNumber; //32-bit serial number
202 UINT8 WeekOfManufacture; //Week number
203 UINT8 YearOfManufacture; //Year
204 UINT8 EdidVersion; //EDID Structure Version
205 UINT8 EdidRevision; //EDID Structure Revision
206 UINT8 VideoInputDefinition;
207 UINT8 MaxHorizontalImageSize; //cm
208 UINT8 MaxVerticalImageSize; //cm
209 UINT8 DisplayTransferCharacteristic;
210 UINT8 FeatureSupport;
211 UINT8 RedGreenLowBits; //Rx1 Rx0 Ry1 Ry0 Gx1 Gx0 Gy1Gy0
212 UINT8 BlueWhiteLowBits; //Bx1 Bx0 By1 By0 Wx1 Wx0 Wy1 Wy0
213 UINT8 RedX; //Red-x Bits 9 - 2
214 UINT8 RedY; //Red-y Bits 9 - 2
215 UINT8 GreenX; //Green-x Bits 9 - 2
216 UINT8 GreenY; //Green-y Bits 9 - 2
217 UINT8 BlueX; //Blue-x Bits 9 - 2
218 UINT8 BlueY; //Blue-y Bits 9 - 2
219 UINT8 WhiteX; //White-x Bits 9 - 2
220 UINT8 WhiteY; //White-x Bits 9 - 2
221 UINT8 EstablishedTimings[VESA_BIOS_EXTENSIONS_ESTABLISHED_TIMING_SIZE];
222 UINT8 StandardTimingIdentification[VESA_BIOS_EXTENSIONS_STANDARD_TIMING_SIZE];
223 UINT8 DetailedTimingDescriptions[VESA_BIOS_EXTENSIONS_DETAILED_TIMING_DESCRIPTOR_MAX_SIZE];
224 UINT8 ExtensionFlag; //Number of (optional) 128-byte EDID extension blocks to follow
225 UINT8 Checksum;
226 } VESA_BIOS_EXTENSIONS_EDID_DATA_BLOCK;
227
228 //
229 // Super VGA Information Block
230 //
231 typedef struct {
232 UINT32 VESASignature; // 'VESA' 4 byte signature
233 UINT16 VESAVersion; // VBE version number
234 UINT32 OEMStringPtr; // Pointer to OEM string
235 UINT32 Capabilities; // Capabilities of video card
236 UINT32 VideoModePtr; // Pointer to an array of 16-bit supported modes values terminated by 0xFFFF
237 UINT16 TotalMemory; // Number of 64kb memory blocks
238 UINT16 OemSoftwareRev; // VBE implementation Software revision
239 UINT32 OemVendorNamePtr; // VbeFarPtr to Vendor Name String
240 UINT32 OemProductNamePtr; // VbeFarPtr to Product Name String
241 UINT32 OemProductRevPtr; // VbeFarPtr to Product Revision String
242 UINT8 Reserved[222]; // Reserved for VBE implementation scratch area
243 UINT8 OemData[256]; // Data area for OEM strings. Pad to 512 byte block size
244 } VESA_BIOS_EXTENSIONS_INFORMATION_BLOCK;
245
246 //
247 // Super VGA Information Block VESASignature values
248 //
249 #define VESA_BIOS_EXTENSIONS_VESA_SIGNATURE SIGNATURE_32 ('V', 'E', 'S', 'A')
250 #define VESA_BIOS_EXTENSIONS_VBE2_SIGNATURE SIGNATURE_32 ('V', 'B', 'E', '2')
251
252 //
253 // Super VGA Information Block VESAVersion values
254 //
255 #define VESA_BIOS_EXTENSIONS_VERSION_1_2 0x0102
256 #define VESA_BIOS_EXTENSIONS_VERSION_2_0 0x0200
257 #define VESA_BIOS_EXTENSIONS_VERSION_3_0 0x0300
258
259 //
260 // Super VGA Information Block Capabilities field bit defintions
261 //
262 #define VESA_BIOS_EXTENSIONS_CAPABILITY_8_BIT_DAC 0x01 // 0: DAC width is fixed at 6 bits/color
263 // 1: DAC width switchable to 8 bits/color
264 //
265 #define VESA_BIOS_EXTENSIONS_CAPABILITY_NOT_VGA 0x02 // 0: Controller is VGA compatible
266 // 1: Controller is not VGA compatible
267 //
268 #define VESA_BIOS_EXTENSIONS_CAPABILITY_NOT_NORMAL_RAMDAC 0x04 // 0: Normal RAMDAC operation
269 // 1: Use blank bit in function 9 to program RAMDAC
270 //
271 #define VESA_BIOS_EXTENSIONS_CAPABILITY_STEREOSCOPIC 0x08 // 0: No hardware stereoscopic signal support
272 // 1: Hardware stereoscopic signal support
273 //
274 #define VESA_BIOS_EXTENSIONS_CAPABILITY_VESA_EVC 0x10 // 0: Stero signaling supported via external VESA stereo connector
275 // 1: Stero signaling supported via VESA EVC connector
276 //
277 // Super VGA mode number bite field definitions
278 //
279 #define VESA_BIOS_EXTENSIONS_MODE_NUMBER_VESA 0x0100 // 0: Not a VESA defined VBE mode
280 // 1: A VESA defined VBE mode
281 //
282 #define VESA_BIOS_EXTENSIONS_MODE_NUMBER_REFRESH_CONTROL_USER 0x0800 // 0: Use current BIOS default referesh rate
283 // 1: Use the user specified CRTC values for refresh rate
284 //
285 #define VESA_BIOS_EXTENSIONS_MODE_NUMBER_LINEAR_FRAME_BUFFER 0x4000 // 0: Use a banked/windowed frame buffer
286 // 1: Use a linear/flat frame buffer
287 //
288 #define VESA_BIOS_EXTENSIONS_MODE_NUMBER_PRESERVE_MEMORY 0x8000 // 0: Clear display memory
289 // 1: Preseve display memory
290 //
291 // Super VGA Information Block mode list terminator value
292 //
293 #define VESA_BIOS_EXTENSIONS_END_OF_MODE_LIST 0xffff
294
295 //
296 // Window Function
297 //
298 typedef
299 VOID
300 (*VESA_BIOS_EXTENSIONS_WINDOW_FUNCTION) (
301 VOID
302 );
303
304 //
305 // Super VGA Mode Information Block
306 //
307 typedef struct {
308 //
309 // Manadory fields for all VESA Bios Extensions revisions
310 //
311 UINT16 ModeAttributes; // Mode attributes
312 UINT8 WinAAttributes; // Window A attributes
313 UINT8 WinBAttributes; // Window B attributes
314 UINT16 WinGranularity; // Window granularity in k
315 UINT16 WinSize; // Window size in k
316 UINT16 WinASegment; // Window A segment
317 UINT16 WinBSegment; // Window B segment
318 UINT32 WindowFunction; // Pointer to window function
319 UINT16 BytesPerScanLine; // Bytes per scanline
320 //
321 // Manadory fields for VESA Bios Extensions 1.2 and above
322 //
323 UINT16 XResolution; // Horizontal resolution
324 UINT16 YResolution; // Vertical resolution
325 UINT8 XCharSize; // Character cell width
326 UINT8 YCharSize; // Character cell height
327 UINT8 NumberOfPlanes; // Number of memory planes
328 UINT8 BitsPerPixel; // Bits per pixel
329 UINT8 NumberOfBanks; // Number of CGA style banks
330 UINT8 MemoryModel; // Memory model type
331 UINT8 BankSize; // Size of CGA style banks
332 UINT8 NumberOfImagePages; // Number of images pages
333 UINT8 Reserved1; // Reserved
334 UINT8 RedMaskSize; // Size of direct color red mask
335 UINT8 RedFieldPosition; // Bit posn of lsb of red mask
336 UINT8 GreenMaskSize; // Size of direct color green mask
337 UINT8 GreenFieldPosition; // Bit posn of lsb of green mask
338 UINT8 BlueMaskSize; // Size of direct color blue mask
339 UINT8 BlueFieldPosition; // Bit posn of lsb of blue mask
340 UINT8 RsvdMaskSize; // Size of direct color res mask
341 UINT8 RsvdFieldPosition; // Bit posn of lsb of res mask
342 UINT8 DirectColorModeInfo; // Direct color mode attributes
343 //
344 // Manadory fields for VESA Bios Extensions 2.0 and above
345 //
346 UINT32 PhysBasePtr; // Physical Address for flat memory frame buffer
347 UINT32 Reserved2; // Reserved
348 UINT16 Reserved3; // Reserved
349 //
350 // Manadory fields for VESA Bios Extensions 3.0 and above
351 //
352 UINT16 LinBytesPerScanLine; // Bytes/scan line for linear modes
353 UINT8 BnkNumberOfImagePages; // Number of images for banked modes
354 UINT8 LinNumberOfImagePages; // Number of images for linear modes
355 UINT8 LinRedMaskSize; // Size of direct color red mask (linear mode)
356 UINT8 LinRedFieldPosition; // Bit posiiton of lsb of red mask (linear modes)
357 UINT8 LinGreenMaskSize; // Size of direct color green mask (linear mode)
358 UINT8 LinGreenFieldPosition; // Bit posiiton of lsb of green mask (linear modes)
359 UINT8 LinBlueMaskSize; // Size of direct color blue mask (linear mode)
360 UINT8 LinBlueFieldPosition; // Bit posiiton of lsb of blue mask (linear modes)
361 UINT8 LinRsvdMaskSize; // Size of direct color reserved mask (linear mode)
362 UINT8 LinRsvdFieldPosition; // Bit posiiton of lsb of reserved mask (linear modes)
363 UINT32 MaxPixelClock; // Maximum pixel clock (in Hz) for graphics mode
364 UINT8 Pad[190]; // Pad to 256 byte block size
365 } VESA_BIOS_EXTENSIONS_MODE_INFORMATION_BLOCK;
366
367 //
368 // Super VGA Mode Information Block ModeAttributes field bit defintions
369 //
370 #define VESA_BIOS_EXTENSIONS_MODE_ATTRIBUTE_HARDWARE 0x0001 // 0: Mode not supported in handware
371 // 1: Mode supported in handware
372 //
373 #define VESA_BIOS_EXTENSIONS_MODE_ATTRIBUTE_TTY 0x0004 // 0: TTY Output functions not supported by BIOS
374 // 1: TTY Output functions supported by BIOS
375 //
376 #define VESA_BIOS_EXTENSIONS_MODE_ATTRIBUTE_COLOR 0x0008 // 0: Monochrome mode
377 // 1: Color mode
378 //
379 #define VESA_BIOS_EXTENSIONS_MODE_ATTRIBUTE_GRAPHICS 0x0010 // 0: Text mode
380 // 1: Graphics mode
381 //
382 #define VESA_BIOS_EXTENSIONS_MODE_ATTRIBUTE_NOT_VGA 0x0020 // 0: VGA compatible mode
383 // 1: Not a VGA compatible mode
384 //
385 #define VESA_BIOS_EXTENSIONS_MODE_ATTRIBUTE_NOT_WINDOWED 0x0040 // 0: VGA compatible windowed memory mode
386 // 1: Not a VGA compatible windowed memory mode
387 //
388 #define VESA_BIOS_EXTENSIONS_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER 0x0080 // 0: No linear fram buffer mode available
389 // 1: Linear frame buffer mode available
390 //
391 #define VESA_BIOS_EXTENSIONS_MODE_ATTRIBUTE_DOUBLE_SCAN 0x0100 // 0: No double scan mode available
392 // 1: Double scan mode available
393 //
394 #define VESA_BIOS_EXTENSIONS_MODE_ATTRIBUTE_INTERLACED 0x0200 // 0: No interlaced mode is available
395 // 1: Interlaced mode is available
396 //
397 #define VESA_BIOS_EXTENSIONS_MODE_ATTRIBUTE_NO_TRIPPLE_BUFFER 0x0400 // 0: No hardware triple buffer mode support available
398 // 1: Hardware triple buffer mode support available
399 //
400 #define VESA_BIOS_EXTENSIONS_MODE_ATTRIBUTE_STEREOSCOPIC 0x0800 // 0: No hardware steroscopic display support
401 // 1: Hardware steroscopic display support
402 //
403 #define VESA_BIOS_EXTENSIONS_MODE_ATTRIBUTE_DUAL_DISPLAY 0x1000 // 0: No dual display start address support
404 // 1: Dual display start address support
405 //
406 // Super VGA Mode Information Block WinAAttribite/WinBAttributes field bit defintions
407 //
408 #define VESA_BIOS_EXTENSIONS_WINX_ATTRIBUTE_RELOCATABLE 0x01 // 0: Single non-relocatable window only
409 // 1: Relocatable window(s) are supported
410 //
411 #define VESA_BIOS_EXTENSIONS_WINX_ATTRIBUTE_READABLE 0x02 // 0: Window is not readable
412 // 1: Window is readable
413 //
414 #define VESA_BIOS_EXTENSIONS_WINX_ATTRIBUTE_WRITABLE 0x04 // 0: Window is not writable
415 // 1: Window is writable
416 //
417 // Super VGA Mode Information Block DirectColorMode field bit defintions
418 //
419 #define VESA_BIOS_EXTENSIONS_DIRECT_COLOR_MODE_PROG_COLOR_RAMP 0x01 // 0: Color ram is fixed
420 // 1: Color ramp is programmable
421 //
422 #define VESA_BIOS_EXTENSIONS_DIRECT_COLOR_MODE_RSVD_USABLE 0x02 // 0: Bits in Rsvd field are reserved
423 // 1: Bits in Rsdv field are usable
424 //
425 // Super VGA Memory Models
426 //
427 typedef enum {
428 MemPL = 3, // Planar memory model
429 MemPK = 4, // Packed pixel memory model
430 MemRGB= 6, // Direct color RGB memory model
431 MemYUV= 7 // Direct color YUV memory model
432 } VESA_BIOS_EXTENSIONS_MEMORY_MODELS;
433
434 //
435 // Super VGA CRTC Information Block
436 //
437 typedef struct {
438 UINT16 HorizontalTotal; // Horizontal total in pixels
439 UINT16 HorizontalSyncStart; // Horizontal sync start in pixels
440 UINT16 HorizontalSyncEnd; // Horizontal sync end in pixels
441 UINT16 VericalTotal; // Vertical total in pixels
442 UINT16 VericalSyncStart; // Vertical sync start in pixels
443 UINT16 VericalSyncEnd; // Vertical sync end in pixels
444 UINT8 Flags; // Flags (Interlaced/DoubleScan/etc).
445 UINT32 PixelClock; // Pixel clock in units of Hz
446 UINT16 RefreshRate; // Refresh rate in units of 0.01 Hz
447 UINT8 Reserved[40]; // Pad
448 } VESA_BIOS_EXTENSIONS_CRTC_INFORMATION_BLOCK;
449
450 #define VESA_BIOS_EXTENSIONS_CRTC_FLAGS_DOUBLE_SCAN 0x01 // 0: Graphics mode is not souble scanned
451 // 1: Graphics mode is double scanned
452 //
453 #define VESA_BIOS_EXTENSIONS_CRTC_FLAGSINTERLACED 0x02 // 0: Graphics mode is not interlaced
454 // 1: Graphics mode is interlaced
455 //
456 #define VESA_BIOS_EXTENSIONS_CRTC_HORIZONTAL_SYNC_NEGATIVE 0x04 // 0: Horizontal sync polarity is positive(+)
457 // 0: Horizontal sync polarity is negative(-)
458 //
459 #define VESA_BIOS_EXTENSIONS_CRTC_VERITICAL_SYNC_NEGATIVE 0x08 // 0: Verical sync polarity is positive(+)
460 // 0: Verical sync polarity is negative(-)
461 //
462 // Turn off byte packing of data structures
463 //
464 #pragma pack()
465
466 #endif