Add qemu 2.4.0
[kvmfornfv.git] / qemu / roms / ipxe / src / include / ipxe / efi / Protocol / SimpleTextOut.h
1 /** @file
2   Simple Text Out protocol from the UEFI 2.0 specification.
3
4   Abstraction of a very simple text based output device like VGA text mode or
5   a serial terminal. The Simple Text Out protocol instance can represent
6   a single hardware device or a virtual device that is an aggregation
7   of multiple physical devices.
8
9 Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR>
10 This program and the accompanying materials are licensed and made available under
11 the terms and conditions of the BSD License that accompanies this distribution.
12 The full text of the license may be found at
13 http://opensource.org/licenses/bsd-license.php.
14
15 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
16 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
17
18 **/
19
20 #ifndef __SIMPLE_TEXT_OUT_H__
21 #define __SIMPLE_TEXT_OUT_H__
22
23 FILE_LICENCE ( BSD3 );
24
25 #define EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL_GUID \
26   { \
27     0x387477c2, 0x69c7, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b } \
28   }
29
30 ///
31 /// Protocol GUID defined in EFI1.1.
32 ///
33 #define SIMPLE_TEXT_OUTPUT_PROTOCOL   EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL_GUID
34
35 typedef struct _EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL;
36
37 ///
38 /// Backward-compatible with EFI1.1.
39 ///
40 typedef EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL   SIMPLE_TEXT_OUTPUT_INTERFACE;
41
42 //
43 // Define's for required EFI Unicode Box Draw characters
44 //
45 #define BOXDRAW_HORIZONTAL                  0x2500
46 #define BOXDRAW_VERTICAL                    0x2502
47 #define BOXDRAW_DOWN_RIGHT                  0x250c
48 #define BOXDRAW_DOWN_LEFT                   0x2510
49 #define BOXDRAW_UP_RIGHT                    0x2514
50 #define BOXDRAW_UP_LEFT                     0x2518
51 #define BOXDRAW_VERTICAL_RIGHT              0x251c
52 #define BOXDRAW_VERTICAL_LEFT               0x2524
53 #define BOXDRAW_DOWN_HORIZONTAL             0x252c
54 #define BOXDRAW_UP_HORIZONTAL               0x2534
55 #define BOXDRAW_VERTICAL_HORIZONTAL         0x253c
56 #define BOXDRAW_DOUBLE_HORIZONTAL           0x2550
57 #define BOXDRAW_DOUBLE_VERTICAL             0x2551
58 #define BOXDRAW_DOWN_RIGHT_DOUBLE           0x2552
59 #define BOXDRAW_DOWN_DOUBLE_RIGHT           0x2553
60 #define BOXDRAW_DOUBLE_DOWN_RIGHT           0x2554
61 #define BOXDRAW_DOWN_LEFT_DOUBLE            0x2555
62 #define BOXDRAW_DOWN_DOUBLE_LEFT            0x2556
63 #define BOXDRAW_DOUBLE_DOWN_LEFT            0x2557
64 #define BOXDRAW_UP_RIGHT_DOUBLE             0x2558
65 #define BOXDRAW_UP_DOUBLE_RIGHT             0x2559
66 #define BOXDRAW_DOUBLE_UP_RIGHT             0x255a
67 #define BOXDRAW_UP_LEFT_DOUBLE              0x255b
68 #define BOXDRAW_UP_DOUBLE_LEFT              0x255c
69 #define BOXDRAW_DOUBLE_UP_LEFT              0x255d
70 #define BOXDRAW_VERTICAL_RIGHT_DOUBLE       0x255e
71 #define BOXDRAW_VERTICAL_DOUBLE_RIGHT       0x255f
72 #define BOXDRAW_DOUBLE_VERTICAL_RIGHT       0x2560
73 #define BOXDRAW_VERTICAL_LEFT_DOUBLE        0x2561
74 #define BOXDRAW_VERTICAL_DOUBLE_LEFT        0x2562
75 #define BOXDRAW_DOUBLE_VERTICAL_LEFT        0x2563
76 #define BOXDRAW_DOWN_HORIZONTAL_DOUBLE      0x2564
77 #define BOXDRAW_DOWN_DOUBLE_HORIZONTAL      0x2565
78 #define BOXDRAW_DOUBLE_DOWN_HORIZONTAL      0x2566
79 #define BOXDRAW_UP_HORIZONTAL_DOUBLE        0x2567
80 #define BOXDRAW_UP_DOUBLE_HORIZONTAL        0x2568
81 #define BOXDRAW_DOUBLE_UP_HORIZONTAL        0x2569
82 #define BOXDRAW_VERTICAL_HORIZONTAL_DOUBLE  0x256a
83 #define BOXDRAW_VERTICAL_DOUBLE_HORIZONTAL  0x256b
84 #define BOXDRAW_DOUBLE_VERTICAL_HORIZONTAL  0x256c
85
86 //
87 // EFI Required Block Elements Code Chart
88 //
89 #define BLOCKELEMENT_FULL_BLOCK   0x2588
90 #define BLOCKELEMENT_LIGHT_SHADE  0x2591
91
92 //
93 // EFI Required Geometric Shapes Code Chart
94 //
95 #define GEOMETRICSHAPE_UP_TRIANGLE    0x25b2
96 #define GEOMETRICSHAPE_RIGHT_TRIANGLE 0x25ba
97 #define GEOMETRICSHAPE_DOWN_TRIANGLE  0x25bc
98 #define GEOMETRICSHAPE_LEFT_TRIANGLE  0x25c4
99
100 //
101 // EFI Required Arrow shapes
102 //
103 #define ARROW_LEFT  0x2190
104 #define ARROW_UP    0x2191
105 #define ARROW_RIGHT 0x2192
106 #define ARROW_DOWN  0x2193
107
108 //
109 // EFI Console Colours
110 //
111 #define EFI_BLACK                 0x00
112 #define EFI_BLUE                  0x01
113 #define EFI_GREEN                 0x02
114 #define EFI_CYAN                  (EFI_BLUE | EFI_GREEN)
115 #define EFI_RED                   0x04
116 #define EFI_MAGENTA               (EFI_BLUE | EFI_RED)
117 #define EFI_BROWN                 (EFI_GREEN | EFI_RED)
118 #define EFI_LIGHTGRAY             (EFI_BLUE | EFI_GREEN | EFI_RED)
119 #define EFI_BRIGHT                0x08
120 #define EFI_DARKGRAY              (EFI_BRIGHT)
121 #define EFI_LIGHTBLUE             (EFI_BLUE | EFI_BRIGHT)
122 #define EFI_LIGHTGREEN            (EFI_GREEN | EFI_BRIGHT)
123 #define EFI_LIGHTCYAN             (EFI_CYAN | EFI_BRIGHT)
124 #define EFI_LIGHTRED              (EFI_RED | EFI_BRIGHT)
125 #define EFI_LIGHTMAGENTA          (EFI_MAGENTA | EFI_BRIGHT)
126 #define EFI_YELLOW                (EFI_BROWN | EFI_BRIGHT)
127 #define EFI_WHITE                 (EFI_BLUE | EFI_GREEN | EFI_RED | EFI_BRIGHT)
128
129 #define EFI_TEXT_ATTR(f, b)       ((f) | ((b) << 4))
130
131 #define EFI_BACKGROUND_BLACK      0x00
132 #define EFI_BACKGROUND_BLUE       0x10
133 #define EFI_BACKGROUND_GREEN      0x20
134 #define EFI_BACKGROUND_CYAN       (EFI_BACKGROUND_BLUE | EFI_BACKGROUND_GREEN)
135 #define EFI_BACKGROUND_RED        0x40
136 #define EFI_BACKGROUND_MAGENTA    (EFI_BACKGROUND_BLUE | EFI_BACKGROUND_RED)
137 #define EFI_BACKGROUND_BROWN      (EFI_BACKGROUND_GREEN | EFI_BACKGROUND_RED)
138 #define EFI_BACKGROUND_LIGHTGRAY  (EFI_BACKGROUND_BLUE | EFI_BACKGROUND_GREEN | EFI_BACKGROUND_RED)
139
140 //
141 // We currently define attributes from 0 - 7F for color manipulations
142 // To internally handle the local display characteristics for a particular character,
143 // Bit 7 signifies the local glyph representation for a character.  If turned on, glyphs will be
144 // pulled from the wide glyph database and will display locally as a wide character (16 X 19 versus 8 X 19)
145 // If bit 7 is off, the narrow glyph database will be used.  This does NOT affect information that is sent to
146 // non-local displays, such as serial or LAN consoles.
147 //
148 #define EFI_WIDE_ATTRIBUTE  0x80
149
150 /**
151   Reset the text output device hardware and optionaly run diagnostics
152
153   @param  This                 The protocol instance pointer.
154   @param  ExtendedVerification Driver may perform more exhaustive verfication
155                                operation of the device during reset.
156
157   @retval EFI_SUCCESS          The text output device was reset.
158   @retval EFI_DEVICE_ERROR     The text output device is not functioning correctly and
159                                could not be reset.
160
161 **/
162 typedef
163 EFI_STATUS
164 (EFIAPI *EFI_TEXT_RESET)(
165   IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL        *This,
166   IN BOOLEAN                                ExtendedVerification
167   );
168
169 /**
170   Write a string to the output device.
171
172   @param  This   The protocol instance pointer.
173   @param  String The NULL-terminated string to be displayed on the output
174                  device(s). All output devices must also support the Unicode
175                  drawing character codes defined in this file.
176
177   @retval EFI_SUCCESS             The string was output to the device.
178   @retval EFI_DEVICE_ERROR        The device reported an error while attempting to output
179                                   the text.
180   @retval EFI_UNSUPPORTED         The output device's mode is not currently in a
181                                   defined text mode.
182   @retval EFI_WARN_UNKNOWN_GLYPH  This warning code indicates that some of the
183                                   characters in the string could not be
184                                   rendered and were skipped.
185
186 **/
187 typedef
188 EFI_STATUS
189 (EFIAPI *EFI_TEXT_STRING)(
190   IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL        *This,
191   IN CHAR16                                 *String
192   );
193
194 /**
195   Verifies that all characters in a string can be output to the
196   target device.
197
198   @param  This   The protocol instance pointer.
199   @param  String The NULL-terminated string to be examined for the output
200                  device(s).
201
202   @retval EFI_SUCCESS      The device(s) are capable of rendering the output string.
203   @retval EFI_UNSUPPORTED  Some of the characters in the string cannot be
204                            rendered by one or more of the output devices mapped
205                            by the EFI handle.
206
207 **/
208 typedef
209 EFI_STATUS
210 (EFIAPI *EFI_TEXT_TEST_STRING)(
211   IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL        *This,
212   IN CHAR16                                 *String
213   );
214
215 /**
216   Returns information for an available text mode that the output device(s)
217   supports.
218
219   @param  This       The protocol instance pointer.
220   @param  ModeNumber The mode number to return information on.
221   @param  Columns    Returns the geometry of the text output device for the
222                      requested ModeNumber.
223   @param  Rows       Returns the geometry of the text output device for the
224                      requested ModeNumber.
225
226   @retval EFI_SUCCESS      The requested mode information was returned.
227   @retval EFI_DEVICE_ERROR The device had an error and could not complete the request.
228   @retval EFI_UNSUPPORTED  The mode number was not valid.
229
230 **/
231 typedef
232 EFI_STATUS
233 (EFIAPI *EFI_TEXT_QUERY_MODE)(
234   IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL        *This,
235   IN UINTN                                  ModeNumber,
236   OUT UINTN                                 *Columns,
237   OUT UINTN                                 *Rows
238   );
239
240 /**
241   Sets the output device(s) to a specified mode.
242
243   @param  This       The protocol instance pointer.
244   @param  ModeNumber The mode number to set.
245
246   @retval EFI_SUCCESS      The requested text mode was set.
247   @retval EFI_DEVICE_ERROR The device had an error and could not complete the request.
248   @retval EFI_UNSUPPORTED  The mode number was not valid.
249
250 **/
251 typedef
252 EFI_STATUS
253 (EFIAPI *EFI_TEXT_SET_MODE)(
254   IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL        *This,
255   IN UINTN                                  ModeNumber
256   );
257
258 /**
259   Sets the background and foreground colors for the OutputString () and
260   ClearScreen () functions.
261
262   @param  This      The protocol instance pointer.
263   @param  Attribute The attribute to set. Bits 0..3 are the foreground color, and
264                     bits 4..6 are the background color. All other bits are undefined
265                     and must be zero. The valid Attributes are defined in this file.
266
267   @retval EFI_SUCCESS       The attribute was set.
268   @retval EFI_DEVICE_ERROR  The device had an error and could not complete the request.
269   @retval EFI_UNSUPPORTED   The attribute requested is not defined.
270
271 **/
272 typedef
273 EFI_STATUS
274 (EFIAPI *EFI_TEXT_SET_ATTRIBUTE)(
275   IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL        *This,
276   IN UINTN                                  Attribute
277   );
278
279 /**
280   Clears the output device(s) display to the currently selected background
281   color.
282
283   @param  This              The protocol instance pointer.
284
285   @retval  EFI_SUCCESS      The operation completed successfully.
286   @retval  EFI_DEVICE_ERROR The device had an error and could not complete the request.
287   @retval  EFI_UNSUPPORTED  The output device is not in a valid text mode.
288
289 **/
290 typedef
291 EFI_STATUS
292 (EFIAPI *EFI_TEXT_CLEAR_SCREEN)(
293   IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL   *This
294   );
295
296 /**
297   Sets the current coordinates of the cursor position
298
299   @param  This        The protocol instance pointer.
300   @param  Column      The position to set the cursor to. Must be greater than or
301                       equal to zero and less than the number of columns and rows
302                       by QueryMode ().
303   @param  Row         The position to set the cursor to. Must be greater than or
304                       equal to zero and less than the number of columns and rows
305                       by QueryMode ().
306
307   @retval EFI_SUCCESS      The operation completed successfully.
308   @retval EFI_DEVICE_ERROR The device had an error and could not complete the request.
309   @retval EFI_UNSUPPORTED  The output device is not in a valid text mode, or the
310                            cursor position is invalid for the current mode.
311
312 **/
313 typedef
314 EFI_STATUS
315 (EFIAPI *EFI_TEXT_SET_CURSOR_POSITION)(
316   IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL        *This,
317   IN UINTN                                  Column,
318   IN UINTN                                  Row
319   );
320
321 /**
322   Makes the cursor visible or invisible
323
324   @param  This    The protocol instance pointer.
325   @param  Visible If TRUE, the cursor is set to be visible. If FALSE, the cursor is
326                   set to be invisible.
327
328   @retval EFI_SUCCESS      The operation completed successfully.
329   @retval EFI_DEVICE_ERROR The device had an error and could not complete the
330                            request, or the device does not support changing
331                            the cursor mode.
332   @retval EFI_UNSUPPORTED  The output device is not in a valid text mode.
333
334 **/
335 typedef
336 EFI_STATUS
337 (EFIAPI *EFI_TEXT_ENABLE_CURSOR)(
338   IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL        *This,
339   IN BOOLEAN                                Visible
340   );
341
342 /**
343   @par Data Structure Description:
344   Mode Structure pointed to by Simple Text Out protocol.
345 **/
346 typedef struct {
347   ///
348   /// The number of modes supported by QueryMode () and SetMode ().
349   ///
350   INT32   MaxMode;
351
352   //
353   // current settings
354   //
355
356   ///
357   /// The text mode of the output device(s).
358   ///
359   INT32   Mode;
360   ///
361   /// The current character output attribute.
362   ///
363   INT32   Attribute;
364   ///
365   /// The cursor's column.
366   ///
367   INT32   CursorColumn;
368   ///
369   /// The cursor's row.
370   ///
371   INT32   CursorRow;
372   ///
373   /// The cursor is currently visbile or not.
374   ///
375   BOOLEAN CursorVisible;
376 } EFI_SIMPLE_TEXT_OUTPUT_MODE;
377
378 ///
379 /// The SIMPLE_TEXT_OUTPUT protocol is used to control text-based output devices.
380 /// It is the minimum required protocol for any handle supplied as the ConsoleOut
381 /// or StandardError device. In addition, the minimum supported text mode of such
382 /// devices is at least 80 x 25 characters.
383 ///
384 struct _EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL {
385   EFI_TEXT_RESET                Reset;
386
387   EFI_TEXT_STRING               OutputString;
388   EFI_TEXT_TEST_STRING          TestString;
389
390   EFI_TEXT_QUERY_MODE           QueryMode;
391   EFI_TEXT_SET_MODE             SetMode;
392   EFI_TEXT_SET_ATTRIBUTE        SetAttribute;
393
394   EFI_TEXT_CLEAR_SCREEN         ClearScreen;
395   EFI_TEXT_SET_CURSOR_POSITION  SetCursorPosition;
396   EFI_TEXT_ENABLE_CURSOR        EnableCursor;
397
398   ///
399   /// Pointer to SIMPLE_TEXT_OUTPUT_MODE data.
400   ///
401   EFI_SIMPLE_TEXT_OUTPUT_MODE   *Mode;
402 };
403
404 extern EFI_GUID gEfiSimpleTextOutProtocolGuid;
405
406 #endif