eficon.h revision 294981
1/* $FreeBSD: stable/10/sys/boot/efi/include/eficon.h 294981 2016-01-28 12:11:42Z smh $ */
2#ifndef _EFI_CON_H
3#define _EFI_CON_H
4
5/*++
6
7Copyright (c)  1999 - 2002 Intel Corporation. All rights reserved
8This software and associated documentation (if any) is furnished
9under a license and may only be used or copied in accordance
10with the terms of the license. Except as permitted by such
11license, no part of this software or documentation may be
12reproduced, stored in a retrieval system, or transmitted in any
13form or by any means without the express written consent of
14Intel Corporation.
15
16Module Name:
17
18    eficon.h
19
20Abstract:
21
22    EFI console protocols
23
24
25
26Revision History
27
28--*/
29
30//
31// Text output protocol
32//
33
34#define SIMPLE_TEXT_OUTPUT_PROTOCOL \
35    { 0x387477c2, 0x69c7, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} }
36
37INTERFACE_DECL(_SIMPLE_TEXT_OUTPUT_INTERFACE);
38
39typedef
40EFI_STATUS
41(EFIAPI *EFI_TEXT_RESET) (
42    IN struct _SIMPLE_TEXT_OUTPUT_INTERFACE     *This,
43    IN BOOLEAN                      ExtendedVerification
44    );
45
46typedef
47EFI_STATUS
48(EFIAPI *EFI_TEXT_OUTPUT_STRING) (
49    IN struct _SIMPLE_TEXT_OUTPUT_INTERFACE     *This,
50    IN CHAR16                       *String
51    );
52
53typedef
54EFI_STATUS
55(EFIAPI *EFI_TEXT_TEST_STRING) (
56    IN struct _SIMPLE_TEXT_OUTPUT_INTERFACE     *This,
57    IN CHAR16                       *String
58    );
59
60typedef
61EFI_STATUS
62(EFIAPI *EFI_TEXT_QUERY_MODE) (
63    IN struct _SIMPLE_TEXT_OUTPUT_INTERFACE     *This,
64    IN UINTN                        ModeNumber,
65    OUT UINTN                       *Columns,
66    OUT UINTN                       *Rows
67    );
68
69typedef
70EFI_STATUS
71(EFIAPI *EFI_TEXT_SET_MODE) (
72    IN struct _SIMPLE_TEXT_OUTPUT_INTERFACE     *This,
73    IN UINTN                        ModeNumber
74    );
75
76typedef
77EFI_STATUS
78(EFIAPI *EFI_TEXT_SET_ATTRIBUTE) (
79    IN struct _SIMPLE_TEXT_OUTPUT_INTERFACE     *This,
80    IN UINTN                        Attribute
81    );
82
83#define EFI_BLACK   0x00
84#define EFI_BLUE    0x01
85#define EFI_GREEN   0x02
86#define EFI_CYAN            (EFI_BLUE | EFI_GREEN)
87#define EFI_RED     0x04
88#define EFI_MAGENTA         (EFI_BLUE | EFI_RED)
89#define EFI_BROWN           (EFI_GREEN | EFI_RED)
90#define EFI_LIGHTGRAY       (EFI_BLUE | EFI_GREEN | EFI_RED)
91#define EFI_BRIGHT  0x08
92#define EFI_DARKGRAY        (EFI_BRIGHT)
93#define EFI_LIGHTBLUE       (EFI_BLUE | EFI_BRIGHT)
94#define EFI_LIGHTGREEN      (EFI_GREEN | EFI_BRIGHT)
95#define EFI_LIGHTCYAN       (EFI_CYAN | EFI_BRIGHT)
96#define EFI_LIGHTRED        (EFI_RED | EFI_BRIGHT)
97#define EFI_LIGHTMAGENTA    (EFI_MAGENTA | EFI_BRIGHT)
98#define EFI_YELLOW          (EFI_BROWN | EFI_BRIGHT)
99#define EFI_WHITE           (EFI_BLUE | EFI_GREEN | EFI_RED | EFI_BRIGHT)
100
101#define EFI_TEXT_ATTR(f,b)  ((f) | ((b) << 4))
102
103#define EFI_BACKGROUND_BLACK        0x00
104#define EFI_BACKGROUND_BLUE         0x10
105#define EFI_BACKGROUND_GREEN        0x20
106#define EFI_BACKGROUND_CYAN         (EFI_BACKGROUND_BLUE | EFI_BACKGROUND_GREEN)
107#define EFI_BACKGROUND_RED          0x40
108#define EFI_BACKGROUND_MAGENTA      (EFI_BACKGROUND_BLUE | EFI_BACKGROUND_RED)
109#define EFI_BACKGROUND_BROWN        (EFI_BACKGROUND_GREEN | EFI_BACKGROUND_RED)
110#define EFI_BACKGROUND_LIGHTGRAY    (EFI_BACKGROUND_BLUE | EFI_BACKGROUND_GREEN | EFI_BACKGROUND_RED)
111
112
113typedef
114EFI_STATUS
115(EFIAPI *EFI_TEXT_CLEAR_SCREEN) (
116    IN struct _SIMPLE_TEXT_OUTPUT_INTERFACE     *This
117    );
118
119typedef
120EFI_STATUS
121(EFIAPI *EFI_TEXT_SET_CURSOR_POSITION) (
122    IN struct _SIMPLE_TEXT_OUTPUT_INTERFACE     *This,
123    IN UINTN                        Column,
124    IN UINTN                        Row
125    );
126
127typedef
128EFI_STATUS
129(EFIAPI *EFI_TEXT_ENABLE_CURSOR) (
130    IN struct _SIMPLE_TEXT_OUTPUT_INTERFACE     *This,
131    IN BOOLEAN                      Enable
132    );
133
134typedef struct {
135    INT32                           MaxMode;
136    // current settings
137    INT32                           Mode;
138    INT32                           Attribute;
139    INT32                           CursorColumn;
140    INT32                           CursorRow;
141    BOOLEAN                         CursorVisible;
142} SIMPLE_TEXT_OUTPUT_MODE;
143
144typedef struct _SIMPLE_TEXT_OUTPUT_INTERFACE {
145    EFI_TEXT_RESET                  Reset;
146
147    EFI_TEXT_OUTPUT_STRING          OutputString;
148    EFI_TEXT_TEST_STRING            TestString;
149
150    EFI_TEXT_QUERY_MODE             QueryMode;
151    EFI_TEXT_SET_MODE               SetMode;
152    EFI_TEXT_SET_ATTRIBUTE          SetAttribute;
153
154    EFI_TEXT_CLEAR_SCREEN           ClearScreen;
155    EFI_TEXT_SET_CURSOR_POSITION    SetCursorPosition;
156    EFI_TEXT_ENABLE_CURSOR          EnableCursor;
157
158    // Current mode
159    SIMPLE_TEXT_OUTPUT_MODE         *Mode;
160} SIMPLE_TEXT_OUTPUT_INTERFACE;
161
162//
163// Define's for required EFI Unicode Box Draw character
164//
165
166#define BOXDRAW_HORIZONTAL                  0x2500
167#define BOXDRAW_VERTICAL                    0x2502
168#define BOXDRAW_DOWN_RIGHT                  0x250c
169#define BOXDRAW_DOWN_LEFT                   0x2510
170#define BOXDRAW_UP_RIGHT                    0x2514
171#define BOXDRAW_UP_LEFT                     0x2518
172#define BOXDRAW_VERTICAL_RIGHT              0x251c
173#define BOXDRAW_VERTICAL_LEFT               0x2524
174#define BOXDRAW_DOWN_HORIZONTAL             0x252c
175#define BOXDRAW_UP_HORIZONTAL               0x2534
176#define BOXDRAW_VERTICAL_HORIZONTAL         0x253c
177
178#define BOXDRAW_DOUBLE_HORIZONTAL           0x2550
179#define BOXDRAW_DOUBLE_VERTICAL             0x2551
180#define BOXDRAW_DOWN_RIGHT_DOUBLE           0x2552
181#define BOXDRAW_DOWN_DOUBLE_RIGHT           0x2553
182#define BOXDRAW_DOUBLE_DOWN_RIGHT           0x2554
183
184#define BOXDRAW_DOWN_LEFT_DOUBLE            0x2555
185#define BOXDRAW_DOWN_DOUBLE_LEFT            0x2556
186#define BOXDRAW_DOUBLE_DOWN_LEFT            0x2557
187
188#define BOXDRAW_UP_RIGHT_DOUBLE             0x2558
189#define BOXDRAW_UP_DOUBLE_RIGHT             0x2559
190#define BOXDRAW_DOUBLE_UP_RIGHT             0x255a
191
192#define BOXDRAW_UP_LEFT_DOUBLE              0x255b
193#define BOXDRAW_UP_DOUBLE_LEFT              0x255c
194#define BOXDRAW_DOUBLE_UP_LEFT              0x255d
195
196#define BOXDRAW_VERTICAL_RIGHT_DOUBLE       0x255e
197#define BOXDRAW_VERTICAL_DOUBLE_RIGHT       0x255f
198#define BOXDRAW_DOUBLE_VERTICAL_RIGHT       0x2560
199
200#define BOXDRAW_VERTICAL_LEFT_DOUBLE        0x2561
201#define BOXDRAW_VERTICAL_DOUBLE_LEFT        0x2562
202#define BOXDRAW_DOUBLE_VERTICAL_LEFT        0x2563
203
204#define BOXDRAW_DOWN_HORIZONTAL_DOUBLE      0x2564
205#define BOXDRAW_DOWN_DOUBLE_HORIZONTAL      0x2565
206#define BOXDRAW_DOUBLE_DOWN_HORIZONTAL      0x2566
207
208#define BOXDRAW_UP_HORIZONTAL_DOUBLE        0x2567
209#define BOXDRAW_UP_DOUBLE_HORIZONTAL        0x2568
210#define BOXDRAW_DOUBLE_UP_HORIZONTAL        0x2569
211
212#define BOXDRAW_VERTICAL_HORIZONTAL_DOUBLE  0x256a
213#define BOXDRAW_VERTICAL_DOUBLE_HORIZONTAL  0x256b
214#define BOXDRAW_DOUBLE_VERTICAL_HORIZONTAL  0x256c
215
216//
217// EFI Required Block Elements Code Chart
218//
219
220#define BLOCKELEMENT_FULL_BLOCK             0x2588
221#define BLOCKELEMENT_LIGHT_SHADE            0x2591
222//
223// EFI Required Geometric Shapes Code Chart
224//
225
226#define GEOMETRICSHAPE_UP_TRIANGLE           0x25b2
227#define GEOMETRICSHAPE_RIGHT_TRIANGLE        0x25ba
228#define GEOMETRICSHAPE_DOWN_TRIANGLE         0x25bc
229#define GEOMETRICSHAPE_LEFT_TRIANGLE         0x25c4
230
231//
232// EFI Required Arrow shapes
233//
234
235#define ARROW_UP                            0x2191
236#define ARROW_DOWN                          0x2193
237
238//
239// Text input protocol
240//
241
242#define SIMPLE_TEXT_INPUT_PROTOCOL \
243    { 0x387477c1, 0x69c7, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} }
244
245INTERFACE_DECL(_SIMPLE_INPUT_INTERFACE);
246
247typedef struct {
248    UINT16                              ScanCode;
249    CHAR16                              UnicodeChar;
250} EFI_INPUT_KEY;
251
252//
253// Baseline unicode control chars
254//
255
256#define CHAR_NULL                       0x0000
257#define CHAR_BACKSPACE                  0x0008
258#define CHAR_TAB                        0x0009
259#define CHAR_LINEFEED                   0x000A
260#define CHAR_CARRIAGE_RETURN            0x000D
261
262//
263// Scan codes for base line keys
264//
265
266#define SCAN_NULL                       0x0000
267#define SCAN_UP                         0x0001
268#define SCAN_DOWN                       0x0002
269#define SCAN_RIGHT                      0x0003
270#define SCAN_LEFT                       0x0004
271#define SCAN_HOME                       0x0005
272#define SCAN_END                        0x0006
273#define SCAN_INSERT                     0x0007
274#define SCAN_DELETE                     0x0008
275#define SCAN_PAGE_UP                    0x0009
276#define SCAN_PAGE_DOWN                  0x000A
277#define SCAN_F1                         0x000B
278#define SCAN_F2                         0x000C
279#define SCAN_F3                         0x000D
280#define SCAN_F4                         0x000E
281#define SCAN_F5                         0x000F
282#define SCAN_F6                         0x0010
283#define SCAN_F7                         0x0011
284#define SCAN_F8                         0x0012
285#define SCAN_F9                         0x0013
286#define SCAN_F10                        0x0014
287#define SCAN_ESC                        0x0017
288
289typedef
290EFI_STATUS
291(EFIAPI *EFI_INPUT_RESET) (
292    IN struct _SIMPLE_INPUT_INTERFACE   *This,
293    IN BOOLEAN                          ExtendedVerification
294    );
295
296typedef
297EFI_STATUS
298(EFIAPI *EFI_INPUT_READ_KEY) (
299    IN struct _SIMPLE_INPUT_INTERFACE   *This,
300    OUT EFI_INPUT_KEY                   *Key
301    );
302
303typedef struct _SIMPLE_INPUT_INTERFACE {
304    EFI_INPUT_RESET                     Reset;
305    EFI_INPUT_READ_KEY                  ReadKeyStroke;
306    EFI_EVENT                           WaitForKey;
307} SIMPLE_INPUT_INTERFACE;
308
309#endif
310