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