3 Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR>
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
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.
16 #ifndef _VESA_BIOS_EXTENSIONS_H_
17 #define _VESA_BIOS_EXTENSIONS_H_
20 // Turn on byte packing of data structures
24 // VESA BIOS Extensions status codes
26 #define VESA_BIOS_EXTENSIONS_STATUS_SUCCESS 0x004f
29 // VESA BIOS Extensions Services
31 #define VESA_BIOS_EXTENSIONS_RETURN_CONTROLLER_INFORMATION 0x4f00
36 Function 00 : Return Controller Information
41 ES:DI = Pointer to buffer to place VESA_BIOS_EXTENSIONS_INFORMATION_BLOCK structure
46 #define VESA_BIOS_EXTENSIONS_RETURN_MODE_INFORMATION 0x4f01
51 Function 01 : Return Mode Information
57 ES:DI = Pointer to buffer to place VESA_BIOS_EXTENSIONS_MODE_INFORMATION_BLOCK structure
62 #define VESA_BIOS_EXTENSIONS_SET_MODE 0x4f02
67 Function 02 : Set Mode
72 BX = Desired mode to set
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
87 #define VESA_BIOS_EXTENSIONS_RETURN_CURRENT_MODE 0x4f03
92 Function 03 : Return Current Mode
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
107 #define VESA_BIOS_EXTENSIONS_SAVE_RESTORE_STATE 0x4f04
112 Function 04 : Save/Restore State
117 DL = 0x00 - Return Save/Restore State buffer size
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
128 BX = Number of 64 byte blocks to hold the state buffer if DL=0
131 #define VESA_BIOS_EXTENSIONS_EDID 0x4f15
136 Function 15 : implement VBE/DDC service
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
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
150 D1 = 0 DDC2 not supported
152 D2 = 0 Screen not blanked during data transfer
153 = 1 Screen blanked during data transfer
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
166 // Timing data from EDID data block
168 #define VESA_BIOS_EXTENSIONS_EDID_BLOCK_SIZE 128
169 #define VESA_BIOS_EXTENSIONS_EDID_ESTABLISHED_TIMING_MAX_NUMBER 17
172 UINT16 HorizontalResolution
;
173 UINT16 VerticalResolution
;
175 } VESA_BIOS_EXTENSIONS_EDID_TIMING
;
179 UINT32 Key
[VESA_BIOS_EXTENSIONS_EDID_ESTABLISHED_TIMING_MAX_NUMBER
];
180 } VESA_BIOS_EXTENSIONS_VALID_EDID_TIMING
;
183 UINT8 Header
[8]; //EDID header "00 FF FF FF FF FF FF 00"
184 UINT16 ManufactureName
; //EISA 3-character ID
185 UINT16 ProductCode
; //Vendor assigned code
186 UINT32 SerialNumber
; //32-bit serial number
187 UINT8 WeekOfManufacture
; //Week number
188 UINT8 YearOfManufacture
; //Year
189 UINT8 EdidVersion
; //EDID Structure Version
190 UINT8 EdidRevision
; //EDID Structure Revision
191 UINT8 VideoInputDefinition
;
192 UINT8 MaxHorizontalImageSize
; //cm
193 UINT8 MaxVerticalImageSize
; //cm
194 UINT8 DisplayTransferCharacteristic
;
195 UINT8 FeatureSupport
;
196 UINT8 RedGreenLowBits
; //Rx1 Rx0 Ry1 Ry0 Gx1 Gx0 Gy1Gy0
197 UINT8 BlueWhiteLowBits
; //Bx1 Bx0 By1 By0 Wx1 Wx0 Wy1 Wy0
198 UINT8 RedX
; //Red-x Bits 9 - 2
199 UINT8 RedY
; //Red-y Bits 9 - 2
200 UINT8 GreenX
; //Green-x Bits 9 - 2
201 UINT8 GreenY
; //Green-y Bits 9 - 2
202 UINT8 BlueX
; //Blue-x Bits 9 - 2
203 UINT8 BlueY
; //Blue-y Bits 9 - 2
204 UINT8 WhiteX
; //White-x Bits 9 - 2
205 UINT8 WhiteY
; //White-x Bits 9 - 2
206 UINT8 EstablishedTimings
[3];
207 UINT8 StandardTimingIdentification
[16];
208 UINT8 DetailedTimingDescriptions
[72];
209 UINT8 ExtensionFlag
; //Number of (optional) 128-byte EDID extension blocks to follow
211 } VESA_BIOS_EXTENSIONS_EDID_DATA_BLOCK
;
214 // Super VGA Information Block
217 UINT32 VESASignature
; // 'VESA' 4 byte signature
218 UINT16 VESAVersion
; // VBE version number
219 UINT32 OEMStringPtr
; // Pointer to OEM string
220 UINT32 Capabilities
; // Capabilities of video card
221 UINT32 VideoModePtr
; // Pointer to an array of 16-bit supported modes values terminated by 0xFFFF
222 UINT16 TotalMemory
; // Number of 64kb memory blocks
223 UINT16 OemSoftwareRev
; // VBE implementation Software revision
224 UINT32 OemVendorNamePtr
; // VbeFarPtr to Vendor Name String
225 UINT32 OemProductNamePtr
; // VbeFarPtr to Product Name String
226 UINT32 OemProductRevPtr
; // VbeFarPtr to Product Revision String
227 UINT8 Reserved
[222]; // Reserved for VBE implementation scratch area
228 UINT8 OemData
[256]; // Data area for OEM strings. Pad to 512 byte block size
229 } VESA_BIOS_EXTENSIONS_INFORMATION_BLOCK
;
232 // Super VGA Information Block VESASignature values
234 #define VESA_BIOS_EXTENSIONS_VESA_SIGNATURE SIGNATURE_32 ('V', 'E', 'S', 'A')
235 #define VESA_BIOS_EXTENSIONS_VBE2_SIGNATURE SIGNATURE_32 ('V', 'B', 'E', '2')
238 // Super VGA Information Block VESAVersion values
240 #define VESA_BIOS_EXTENSIONS_VERSION_1_2 0x0102
241 #define VESA_BIOS_EXTENSIONS_VERSION_2_0 0x0200
242 #define VESA_BIOS_EXTENSIONS_VERSION_3_0 0x0300
245 // Super VGA Information Block Capabilities field bit defintions
247 #define VESA_BIOS_EXTENSIONS_CAPABILITY_8_BIT_DAC 0x01 // 0: DAC width is fixed at 6 bits/color
248 // 1: DAC width switchable to 8 bits/color
250 #define VESA_BIOS_EXTENSIONS_CAPABILITY_NOT_VGA 0x02 // 0: Controller is VGA compatible
251 // 1: Controller is not VGA compatible
253 #define VESA_BIOS_EXTENSIONS_CAPABILITY_NOT_NORMAL_RAMDAC 0x04 // 0: Normal RAMDAC operation
254 // 1: Use blank bit in function 9 to program RAMDAC
256 #define VESA_BIOS_EXTENSIONS_CAPABILITY_STEREOSCOPIC 0x08 // 0: No hardware stereoscopic signal support
257 // 1: Hardware stereoscopic signal support
259 #define VESA_BIOS_EXTENSIONS_CAPABILITY_VESA_EVC 0x10 // 0: Stero signaling supported via external VESA stereo connector
260 // 1: Stero signaling supported via VESA EVC connector
262 // Super VGA mode number bite field definitions
264 #define VESA_BIOS_EXTENSIONS_MODE_NUMBER_VESA 0x0100 // 0: Not a VESA defined VBE mode
265 // 1: A VESA defined VBE mode
267 #define VESA_BIOS_EXTENSIONS_MODE_NUMBER_REFRESH_CONTROL_USER 0x0800 // 0: Use current BIOS default referesh rate
268 // 1: Use the user specified CRTC values for refresh rate
270 #define VESA_BIOS_EXTENSIONS_MODE_NUMBER_LINEAR_FRAME_BUFFER 0x4000 // 0: Use a banked/windowed frame buffer
271 // 1: Use a linear/flat frame buffer
273 #define VESA_BIOS_EXTENSIONS_MODE_NUMBER_PRESERVE_MEMORY 0x8000 // 0: Clear display memory
274 // 1: Preseve display memory
276 // Super VGA Information Block mode list terminator value
278 #define VESA_BIOS_EXTENSIONS_END_OF_MODE_LIST 0xffff
285 (*VESA_BIOS_EXTENSIONS_WINDOW_FUNCTION
) (
290 // Super VGA Mode Information Block
294 // Manadory fields for all VESA Bios Extensions revisions
296 UINT16 ModeAttributes
; // Mode attributes
297 UINT8 WinAAttributes
; // Window A attributes
298 UINT8 WinBAttributes
; // Window B attributes
299 UINT16 WinGranularity
; // Window granularity in k
300 UINT16 WinSize
; // Window size in k
301 UINT16 WinASegment
; // Window A segment
302 UINT16 WinBSegment
; // Window B segment
303 UINT32 WindowFunction
; // Pointer to window function
304 UINT16 BytesPerScanLine
; // Bytes per scanline
306 // Manadory fields for VESA Bios Extensions 1.2 and above
308 UINT16 XResolution
; // Horizontal resolution
309 UINT16 YResolution
; // Vertical resolution
310 UINT8 XCharSize
; // Character cell width
311 UINT8 YCharSize
; // Character cell height
312 UINT8 NumberOfPlanes
; // Number of memory planes
313 UINT8 BitsPerPixel
; // Bits per pixel
314 UINT8 NumberOfBanks
; // Number of CGA style banks
315 UINT8 MemoryModel
; // Memory model type
316 UINT8 BankSize
; // Size of CGA style banks
317 UINT8 NumberOfImagePages
; // Number of images pages
318 UINT8 Reserved1
; // Reserved
319 UINT8 RedMaskSize
; // Size of direct color red mask
320 UINT8 RedFieldPosition
; // Bit posn of lsb of red mask
321 UINT8 GreenMaskSize
; // Size of direct color green mask
322 UINT8 GreenFieldPosition
; // Bit posn of lsb of green mask
323 UINT8 BlueMaskSize
; // Size of direct color blue mask
324 UINT8 BlueFieldPosition
; // Bit posn of lsb of blue mask
325 UINT8 RsvdMaskSize
; // Size of direct color res mask
326 UINT8 RsvdFieldPosition
; // Bit posn of lsb of res mask
327 UINT8 DirectColorModeInfo
; // Direct color mode attributes
329 // Manadory fields for VESA Bios Extensions 2.0 and above
331 UINT32 PhysBasePtr
; // Physical Address for flat memory frame buffer
332 UINT32 Reserved2
; // Reserved
333 UINT16 Reserved3
; // Reserved
335 // Manadory fields for VESA Bios Extensions 3.0 and above
337 UINT16 LinBytesPerScanLine
; // Bytes/scan line for linear modes
338 UINT8 BnkNumberOfImagePages
; // Number of images for banked modes
339 UINT8 LinNumberOfImagePages
; // Number of images for linear modes
340 UINT8 LinRedMaskSize
; // Size of direct color red mask (linear mode)
341 UINT8 LinRedFieldPosition
; // Bit posiiton of lsb of red mask (linear modes)
342 UINT8 LinGreenMaskSize
; // Size of direct color green mask (linear mode)
343 UINT8 LinGreenFieldPosition
; // Bit posiiton of lsb of green mask (linear modes)
344 UINT8 LinBlueMaskSize
; // Size of direct color blue mask (linear mode)
345 UINT8 LinBlueFieldPosition
; // Bit posiiton of lsb of blue mask (linear modes)
346 UINT8 LinRsvdMaskSize
; // Size of direct color reserved mask (linear mode)
347 UINT8 LinRsvdFieldPosition
; // Bit posiiton of lsb of reserved mask (linear modes)
348 UINT32 MaxPixelClock
; // Maximum pixel clock (in Hz) for graphics mode
349 UINT8 Pad
[190]; // Pad to 256 byte block size
350 } VESA_BIOS_EXTENSIONS_MODE_INFORMATION_BLOCK
;
353 // Super VGA Mode Information Block ModeAttributes field bit defintions
355 #define VESA_BIOS_EXTENSIONS_MODE_ATTRIBUTE_HARDWARE 0x0001 // 0: Mode not supported in handware
356 // 1: Mode supported in handware
358 #define VESA_BIOS_EXTENSIONS_MODE_ATTRIBUTE_TTY 0x0004 // 0: TTY Output functions not supported by BIOS
359 // 1: TTY Output functions supported by BIOS
361 #define VESA_BIOS_EXTENSIONS_MODE_ATTRIBUTE_COLOR 0x0008 // 0: Monochrome mode
364 #define VESA_BIOS_EXTENSIONS_MODE_ATTRIBUTE_GRAPHICS 0x0010 // 0: Text mode
367 #define VESA_BIOS_EXTENSIONS_MODE_ATTRIBUTE_NOT_VGA 0x0020 // 0: VGA compatible mode
368 // 1: Not a VGA compatible mode
370 #define VESA_BIOS_EXTENSIONS_MODE_ATTRIBUTE_NOT_WINDOWED 0x0040 // 0: VGA compatible windowed memory mode
371 // 1: Not a VGA compatible windowed memory mode
373 #define VESA_BIOS_EXTENSIONS_MODE_ATTRIBUTE_LINEAR_FRAME_BUFFER 0x0080 // 0: No linear fram buffer mode available
374 // 1: Linear frame buffer mode available
376 #define VESA_BIOS_EXTENSIONS_MODE_ATTRIBUTE_DOUBLE_SCAN 0x0100 // 0: No double scan mode available
377 // 1: Double scan mode available
379 #define VESA_BIOS_EXTENSIONS_MODE_ATTRIBUTE_INTERLACED 0x0200 // 0: No interlaced mode is available
380 // 1: Interlaced mode is available
382 #define VESA_BIOS_EXTENSIONS_MODE_ATTRIBUTE_NO_TRIPPLE_BUFFER 0x0400 // 0: No hardware triple buffer mode support available
383 // 1: Hardware triple buffer mode support available
385 #define VESA_BIOS_EXTENSIONS_MODE_ATTRIBUTE_STEREOSCOPIC 0x0800 // 0: No hardware steroscopic display support
386 // 1: Hardware steroscopic display support
388 #define VESA_BIOS_EXTENSIONS_MODE_ATTRIBUTE_DUAL_DISPLAY 0x1000 // 0: No dual display start address support
389 // 1: Dual display start address support
391 // Super VGA Mode Information Block WinAAttribite/WinBAttributes field bit defintions
393 #define VESA_BIOS_EXTENSIONS_WINX_ATTRIBUTE_RELOCATABLE 0x01 // 0: Single non-relocatable window only
394 // 1: Relocatable window(s) are supported
396 #define VESA_BIOS_EXTENSIONS_WINX_ATTRIBUTE_READABLE 0x02 // 0: Window is not readable
397 // 1: Window is readable
399 #define VESA_BIOS_EXTENSIONS_WINX_ATTRIBUTE_WRITABLE 0x04 // 0: Window is not writable
400 // 1: Window is writable
402 // Super VGA Mode Information Block DirectColorMode field bit defintions
404 #define VESA_BIOS_EXTENSIONS_DIRECT_COLOR_MODE_PROG_COLOR_RAMP 0x01 // 0: Color ram is fixed
405 // 1: Color ramp is programmable
407 #define VESA_BIOS_EXTENSIONS_DIRECT_COLOR_MODE_RSVD_USABLE 0x02 // 0: Bits in Rsvd field are reserved
408 // 1: Bits in Rsdv field are usable
410 // Super VGA Memory Models
413 MemPL
= 3, // Planar memory model
414 MemPK
= 4, // Packed pixel memory model
415 MemRGB
= 6, // Direct color RGB memory model
416 MemYUV
= 7 // Direct color YUV memory model
417 } VESA_BIOS_EXTENSIONS_MEMORY_MODELS
;
420 // Super VGA CRTC Information Block
423 UINT16 HorizontalTotal
; // Horizontal total in pixels
424 UINT16 HorizontalSyncStart
; // Horizontal sync start in pixels
425 UINT16 HorizontalSyncEnd
; // Horizontal sync end in pixels
426 UINT16 VericalTotal
; // Vertical total in pixels
427 UINT16 VericalSyncStart
; // Vertical sync start in pixels
428 UINT16 VericalSyncEnd
; // Vertical sync end in pixels
429 UINT8 Flags
; // Flags (Interlaced/DoubleScan/etc).
430 UINT32 PixelClock
; // Pixel clock in units of Hz
431 UINT16 RefreshRate
; // Refresh rate in units of 0.01 Hz
432 UINT8 Reserved
[40]; // Pad
433 } VESA_BIOS_EXTENSIONS_CRTC_INFORMATION_BLOCK
;
435 #define VESA_BIOS_EXTENSIONS_CRTC_FLAGS_DOUBLE_SCAN 0x01 // 0: Graphics mode is not souble scanned
436 // 1: Graphics mode is double scanned
438 #define VESA_BIOS_EXTENSIONS_CRTC_FLAGSINTERLACED 0x02 // 0: Graphics mode is not interlaced
439 // 1: Graphics mode is interlaced
441 #define VESA_BIOS_EXTENSIONS_CRTC_HORIZONTAL_SYNC_NEGATIVE 0x04 // 0: Horizontal sync polarity is positive(+)
442 // 0: Horizontal sync polarity is negative(-)
444 #define VESA_BIOS_EXTENSIONS_CRTC_VERITICAL_SYNC_NEGATIVE 0x08 // 0: Verical sync polarity is positive(+)
445 // 0: Verical sync polarity is negative(-)
447 // Turn off byte packing of data structures