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