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