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