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