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