]> git.proxmox.com Git - mirror_edk2.git/blob - MdeModulePkg/Universal/Console/TerminalDxe/Terminal.h
Cleaned up EFI Console Variable usage
[mirror_edk2.git] / MdeModulePkg / Universal / Console / TerminalDxe / Terminal.h
1 /*++
2
3 Copyright (c) 2006, Intel Corporation
4 All rights reserved. This program and the accompanying materials
5 are licensed and made available under the terms and conditions of the BSD License
6 which accompanies this distribution. The full text of the license may be found at
7 http://opensource.org/licenses/bsd-license.php
8
9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
11
12 Module Name:
13
14 terminal.h
15
16 Abstract:
17
18
19 Revision History
20
21 --*/
22
23 #ifndef _TERMINAL_H
24 #define _TERMINAL_H
25
26
27 #include <PiDxe.h>
28 #include <Protocol/SimpleTextOut.h>
29 #include <Protocol/SerialIo.h>
30 #include <Guid/GlobalVariable.h>
31 #include <Protocol/DevicePath.h>
32 #include <Protocol/SimpleTextIn.h>
33 #include <Guid/HotPlugDevice.h>
34 #include <Guid/PcAnsi.h>
35 #include <Library/DebugLib.h>
36 #include <Library/UefiDriverEntryPoint.h>
37 #include <Library/UefiLib.h>
38 #include <Library/ReportStatusCodeLib.h>
39 #include <Library/BaseMemoryLib.h>
40 #include <Library/MemoryAllocationLib.h>
41 #include <Library/UefiBootServicesTableLib.h>
42 #include <Library/UefiRuntimeServicesTableLib.h>
43 #include <Library/DevicePathLib.h>
44 #include <Library/PcdLib.h>
45
46
47
48 #define RAW_FIFO_MAX_NUMBER 256
49 #define FIFO_MAX_NUMBER 128
50
51 typedef struct {
52 UINT8 Head;
53 UINT8 Tail;
54 UINT8 Data[RAW_FIFO_MAX_NUMBER + 1];
55 } RAW_DATA_FIFO;
56
57 typedef struct {
58 UINT8 Head;
59 UINT8 Tail;
60 UINT16 Data[FIFO_MAX_NUMBER + 1];
61 } UNICODE_FIFO;
62
63 typedef struct {
64 UINT8 Head;
65 UINT8 Tail;
66 EFI_INPUT_KEY Data[FIFO_MAX_NUMBER + 1];
67 } EFI_KEY_FIFO;
68
69 #define TERMINAL_DEV_SIGNATURE EFI_SIGNATURE_32 ('t', 'm', 'n', 'l')
70
71 typedef struct {
72 UINTN Signature;
73 EFI_HANDLE Handle;
74 UINT8 TerminalType;
75 EFI_SERIAL_IO_PROTOCOL *SerialIo;
76 EFI_DEVICE_PATH_PROTOCOL *DevicePath;
77 EFI_SIMPLE_TEXT_INPUT_PROTOCOL SimpleInput;
78 EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL SimpleTextOutput;
79 EFI_SIMPLE_TEXT_OUTPUT_MODE SimpleTextOutputMode;
80 UINTN SerialInTimeOut;
81 RAW_DATA_FIFO RawFiFo;
82 UNICODE_FIFO UnicodeFiFo;
83 EFI_KEY_FIFO EfiKeyFiFo;
84 EFI_UNICODE_STRING_TABLE *ControllerNameTable;
85 EFI_EVENT TwoSecondTimeOut;
86 UINT32 InputState;
87 UINT32 ResetState;
88
89 //
90 // Esc could not be output to the screen by user,
91 // but the terminal driver need to output it to
92 // the terminal emulation software to send control sequence.
93 // This boolean is used by the terminal driver only
94 // to indicate whether the Esc could be sent or not.
95 //
96 BOOLEAN OutputEscChar;
97 } TERMINAL_DEV;
98
99 #define INPUT_STATE_DEFAULT 0x00
100 #define INPUT_STATE_ESC 0x01
101 #define INPUT_STATE_CSI 0x02
102 #define INPUT_STATE_LEFTOPENBRACKET 0x04
103 #define INPUT_STATE_O 0x08
104 #define INPUT_STATE_2 0x10
105
106 #define RESET_STATE_DEFAULT 0x00
107 #define RESET_STATE_ESC_R 0x01
108 #define RESET_STATE_ESC_R_ESC_r 0x02
109
110 #define TERMINAL_CON_IN_DEV_FROM_THIS(a) CR (a, TERMINAL_DEV, SimpleInput, TERMINAL_DEV_SIGNATURE)
111 #define TERMINAL_CON_OUT_DEV_FROM_THIS(a) CR (a, TERMINAL_DEV, SimpleTextOutput, TERMINAL_DEV_SIGNATURE)
112
113 typedef union {
114 UINT8 Utf8_1;
115 UINT8 Utf8_2[2];
116 UINT8 Utf8_3[3];
117 } UTF8_CHAR;
118
119 #define PcAnsiType 0
120 #define VT100Type 1
121 #define VT100PlusType 2
122 #define VTUTF8Type 3
123
124 #define LEFTOPENBRACKET 0x5b // '['
125 #define ACAP 0x41
126 #define BCAP 0x42
127 #define CCAP 0x43
128 #define DCAP 0x44
129
130 #define MODE0_COLUMN_COUNT 80
131 #define MODE0_ROW_COUNT 25
132
133 #define BACKSPACE 8
134 #define ESC 27
135 #define CSI 0x9B
136 #define DEL 127
137 #define BRIGHT_CONTROL_OFFSET 2
138 #define FOREGROUND_CONTROL_OFFSET 6
139 #define BACKGROUND_CONTROL_OFFSET 11
140 #define ROW_OFFSET 2
141 #define COLUMN_OFFSET 5
142
143 typedef struct {
144 UINT16 Unicode;
145 CHAR8 PcAnsi;
146 CHAR8 Ascii;
147 } UNICODE_TO_CHAR;
148
149 //
150 // Global Variables
151 //
152 extern EFI_DRIVER_BINDING_PROTOCOL gTerminalDriverBinding;
153 extern EFI_COMPONENT_NAME_PROTOCOL gTerminalComponentName;
154
155 //
156 // Prototypes
157 //
158 EFI_STATUS
159 EFIAPI
160 InitializeTerminal (
161 IN EFI_HANDLE ImageHandle,
162 IN EFI_SYSTEM_TABLE *SystemTable
163 )
164 ;
165
166 EFI_STATUS
167 EFIAPI
168 TerminalConInReset (
169 IN EFI_SIMPLE_TEXT_INPUT_PROTOCOL *This,
170 IN BOOLEAN ExtendedVerification
171 )
172 ;
173
174 EFI_STATUS
175 EFIAPI
176 TerminalConInReadKeyStroke (
177 IN EFI_SIMPLE_TEXT_INPUT_PROTOCOL *This,
178 OUT EFI_INPUT_KEY *Key
179 )
180 ;
181
182 VOID
183 EFIAPI
184 TerminalConInWaitForKey (
185 IN EFI_EVENT Event,
186 IN VOID *Context
187 )
188 ;
189
190 EFI_STATUS
191 EFIAPI
192 TerminalConOutReset (
193 IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This,
194 IN BOOLEAN ExtendedVerification
195 )
196 ;
197
198 EFI_STATUS
199 EFIAPI
200 TerminalConOutOutputString (
201 IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This,
202 IN CHAR16 *WString
203 )
204 ;
205
206 EFI_STATUS
207 EFIAPI
208 TerminalConOutTestString (
209 IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This,
210 IN CHAR16 *WString
211 )
212 ;
213
214 EFI_STATUS
215 EFIAPI
216 TerminalConOutQueryMode (
217 IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This,
218 IN UINTN ModeNumber,
219 OUT UINTN *Columns,
220 OUT UINTN *Rows
221 )
222 ;
223
224 EFI_STATUS
225 EFIAPI
226 TerminalConOutSetMode (
227 IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This,
228 IN UINTN ModeNumber
229 )
230 ;
231
232 EFI_STATUS
233 EFIAPI
234 TerminalConOutSetAttribute (
235 IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This,
236 IN UINTN Attribute
237 )
238 ;
239
240 EFI_STATUS
241 EFIAPI
242 TerminalConOutClearScreen (
243 IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This
244 )
245 ;
246
247 EFI_STATUS
248 EFIAPI
249 TerminalConOutSetCursorPosition (
250 IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This,
251 IN UINTN Column,
252 IN UINTN Row
253 )
254 ;
255
256 EFI_STATUS
257 EFIAPI
258 TerminalConOutEnableCursor (
259 IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This,
260 IN BOOLEAN Visible
261 )
262 ;
263
264 EFI_STATUS
265 EFIAPI
266 TerminalDriverBindingSupported (
267 IN EFI_DRIVER_BINDING_PROTOCOL *This,
268 IN EFI_HANDLE Controller,
269 IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
270 );
271
272 EFI_STATUS
273 EFIAPI
274 TerminalDriverBindingStart (
275 IN EFI_DRIVER_BINDING_PROTOCOL *This,
276 IN EFI_HANDLE Controller,
277 IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
278 );
279
280 EFI_STATUS
281 EFIAPI
282 TerminalDriverBindingStop (
283 IN EFI_DRIVER_BINDING_PROTOCOL *This,
284 IN EFI_HANDLE Controller,
285 IN UINTN NumberOfChildren,
286 IN EFI_HANDLE *ChildHandleBuffer
287 );
288
289 EFI_STATUS
290 EFIAPI
291 TerminalComponentNameGetDriverName (
292 IN EFI_COMPONENT_NAME_PROTOCOL *This,
293 IN CHAR8 *Language,
294 OUT CHAR16 **DriverName
295 );
296
297 EFI_STATUS
298 EFIAPI
299 TerminalComponentNameGetControllerName (
300 IN EFI_COMPONENT_NAME_PROTOCOL *This,
301 IN EFI_HANDLE ControllerHandle,
302 IN EFI_HANDLE ChildHandle OPTIONAL,
303 IN CHAR8 *Language,
304 OUT CHAR16 **ControllerName
305 );
306
307 //
308 // internal functions
309 //
310 EFI_STATUS
311 TerminalConInCheckForKey (
312 IN EFI_SIMPLE_TEXT_INPUT_PROTOCOL *This
313 )
314 ;
315
316 VOID
317 TerminalUpdateConsoleDevVariable (
318 IN CHAR16 *VariableName,
319 IN EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath
320 )
321 ;
322
323 VOID
324 TerminalRemoveConsoleDevVariable (
325 IN CHAR16 *VariableName,
326 IN EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath
327 )
328 ;
329
330 VOID *
331 TerminalGetVariableAndSize (
332 IN CHAR16 *Name,
333 IN EFI_GUID *VendorGuid,
334 OUT UINTN *VariableSize
335 )
336 ;
337
338 EFI_STATUS
339 SetTerminalDevicePath (
340 IN UINT8 TerminalType,
341 IN EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath,
342 OUT EFI_DEVICE_PATH_PROTOCOL **TerminalDevicePath
343 )
344 ;
345
346 VOID
347 InitializeRawFiFo (
348 IN TERMINAL_DEV *TerminalDevice
349 )
350 ;
351
352 VOID
353 InitializeUnicodeFiFo (
354 IN TERMINAL_DEV *TerminalDevice
355 )
356 ;
357
358 VOID
359 InitializeEfiKeyFiFo (
360 IN TERMINAL_DEV *TerminalDevice
361 )
362 ;
363
364 EFI_STATUS
365 GetOneKeyFromSerial (
366 EFI_SERIAL_IO_PROTOCOL *SerialIo,
367 UINT8 *Input
368 )
369 ;
370
371 BOOLEAN
372 RawFiFoInsertOneKey (
373 TERMINAL_DEV *TerminalDevice,
374 UINT8 Input
375 )
376 ;
377
378 BOOLEAN
379 RawFiFoRemoveOneKey (
380 TERMINAL_DEV *TerminalDevice,
381 UINT8 *Output
382 )
383 ;
384
385 BOOLEAN
386 IsRawFiFoEmpty (
387 TERMINAL_DEV *TerminalDevice
388 )
389 ;
390
391 BOOLEAN
392 IsRawFiFoFull (
393 TERMINAL_DEV *TerminalDevice
394 )
395 ;
396
397 BOOLEAN
398 EfiKeyFiFoInsertOneKey (
399 TERMINAL_DEV *TerminalDevice,
400 EFI_INPUT_KEY Key
401 )
402 ;
403
404 BOOLEAN
405 EfiKeyFiFoRemoveOneKey (
406 TERMINAL_DEV *TerminalDevice,
407 EFI_INPUT_KEY *Output
408 )
409 ;
410
411 BOOLEAN
412 IsEfiKeyFiFoEmpty (
413 TERMINAL_DEV *TerminalDevice
414 )
415 ;
416
417 BOOLEAN
418 IsEfiKeyFiFoFull (
419 TERMINAL_DEV *TerminalDevice
420 )
421 ;
422
423 BOOLEAN
424 UnicodeFiFoInsertOneKey (
425 TERMINAL_DEV *TerminalDevice,
426 UINT16 Input
427 )
428 ;
429
430 BOOLEAN
431 UnicodeFiFoRemoveOneKey (
432 TERMINAL_DEV *TerminalDevice,
433 UINT16 *Output
434 )
435 ;
436
437 BOOLEAN
438 IsUnicodeFiFoEmpty (
439 TERMINAL_DEV *TerminalDevice
440 )
441 ;
442
443 BOOLEAN
444 IsUnicodeFiFoFull (
445 TERMINAL_DEV *TerminalDevice
446 )
447 ;
448
449 UINT8
450 UnicodeFiFoGetKeyCount (
451 TERMINAL_DEV *TerminalDevice
452 )
453 ;
454
455 VOID
456 TranslateRawDataToEfiKey (
457 IN TERMINAL_DEV *TerminalDevice
458 )
459 ;
460
461 //
462 // internal functions for PC ANSI
463 //
464 VOID
465 AnsiRawDataToUnicode (
466 IN TERMINAL_DEV *PcAnsiDevice
467 )
468 ;
469
470 VOID
471 UnicodeToEfiKey (
472 IN TERMINAL_DEV *PcAnsiDevice
473 )
474 ;
475
476 EFI_STATUS
477 AnsiTestString (
478 IN TERMINAL_DEV *TerminalDevice,
479 IN CHAR16 *WString
480 )
481 ;
482
483 //
484 // internal functions for VT100
485 //
486 EFI_STATUS
487 VT100TestString (
488 IN TERMINAL_DEV *VT100Device,
489 IN CHAR16 *WString
490 )
491 ;
492
493 //
494 // internal functions for VT100Plus
495 //
496 EFI_STATUS
497 VT100PlusTestString (
498 IN TERMINAL_DEV *TerminalDevice,
499 IN CHAR16 *WString
500 )
501 ;
502
503 //
504 // internal functions for VTUTF8
505 //
506 VOID
507 VTUTF8RawDataToUnicode (
508 IN TERMINAL_DEV *VtUtf8Device
509 )
510 ;
511
512 EFI_STATUS
513 VTUTF8TestString (
514 IN TERMINAL_DEV *TerminalDevice,
515 IN CHAR16 *WString
516 )
517 ;
518
519 VOID
520 UnicodeToUtf8 (
521 IN CHAR16 Unicode,
522 OUT UTF8_CHAR *Utf8Char,
523 OUT UINT8 *ValidBytes
524 )
525 ;
526
527 VOID
528 GetOneValidUtf8Char (
529 IN TERMINAL_DEV *Utf8Device,
530 OUT UTF8_CHAR *Utf8Char,
531 OUT UINT8 *ValidBytes
532 )
533 ;
534
535 VOID
536 Utf8ToUnicode (
537 IN UTF8_CHAR Utf8Char,
538 IN UINT8 ValidBytes,
539 OUT CHAR16 *UnicodeChar
540 )
541 ;
542
543 //
544 // functions for boxdraw unicode
545 //
546 BOOLEAN
547 TerminalIsValidTextGraphics (
548 IN CHAR16 Graphic,
549 OUT CHAR8 *PcAnsi, OPTIONAL
550 OUT CHAR8 *Ascii OPTIONAL
551 )
552 ;
553
554 BOOLEAN
555 TerminalIsValidAscii (
556 IN CHAR16 Ascii
557 )
558 ;
559
560 BOOLEAN
561 TerminalIsValidEfiCntlChar (
562 IN CHAR16 CharC
563 )
564 ;
565
566 #endif