]> git.proxmox.com Git - mirror_edk2.git/blob - MdeModulePkg/Universal/Console/TerminalDxe/Terminal.h
Updated to use new PCD settings
[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 #define VarConsoleInpDev L"ConInDev"
150 #define VarConsoleOutDev L"ConOutDev"
151 #define VarErrorOutDev L"ErrOutDev"
152
153 //
154 // Global Variables
155 //
156 extern EFI_DRIVER_BINDING_PROTOCOL gTerminalDriverBinding;
157 extern EFI_COMPONENT_NAME_PROTOCOL gTerminalComponentName;
158
159 //
160 // Prototypes
161 //
162 EFI_STATUS
163 EFIAPI
164 InitializeTerminal (
165 IN EFI_HANDLE ImageHandle,
166 IN EFI_SYSTEM_TABLE *SystemTable
167 )
168 ;
169
170 EFI_STATUS
171 EFIAPI
172 TerminalConInReset (
173 IN EFI_SIMPLE_TEXT_INPUT_PROTOCOL *This,
174 IN BOOLEAN ExtendedVerification
175 )
176 ;
177
178 EFI_STATUS
179 EFIAPI
180 TerminalConInReadKeyStroke (
181 IN EFI_SIMPLE_TEXT_INPUT_PROTOCOL *This,
182 OUT EFI_INPUT_KEY *Key
183 )
184 ;
185
186 VOID
187 EFIAPI
188 TerminalConInWaitForKey (
189 IN EFI_EVENT Event,
190 IN VOID *Context
191 )
192 ;
193
194 EFI_STATUS
195 EFIAPI
196 TerminalConOutReset (
197 IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This,
198 IN BOOLEAN ExtendedVerification
199 )
200 ;
201
202 EFI_STATUS
203 EFIAPI
204 TerminalConOutOutputString (
205 IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This,
206 IN CHAR16 *WString
207 )
208 ;
209
210 EFI_STATUS
211 EFIAPI
212 TerminalConOutTestString (
213 IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This,
214 IN CHAR16 *WString
215 )
216 ;
217
218 EFI_STATUS
219 EFIAPI
220 TerminalConOutQueryMode (
221 IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This,
222 IN UINTN ModeNumber,
223 OUT UINTN *Columns,
224 OUT UINTN *Rows
225 )
226 ;
227
228 EFI_STATUS
229 EFIAPI
230 TerminalConOutSetMode (
231 IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This,
232 IN UINTN ModeNumber
233 )
234 ;
235
236 EFI_STATUS
237 EFIAPI
238 TerminalConOutSetAttribute (
239 IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This,
240 IN UINTN Attribute
241 )
242 ;
243
244 EFI_STATUS
245 EFIAPI
246 TerminalConOutClearScreen (
247 IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This
248 )
249 ;
250
251 EFI_STATUS
252 EFIAPI
253 TerminalConOutSetCursorPosition (
254 IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This,
255 IN UINTN Column,
256 IN UINTN Row
257 )
258 ;
259
260 EFI_STATUS
261 EFIAPI
262 TerminalConOutEnableCursor (
263 IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *This,
264 IN BOOLEAN Visible
265 )
266 ;
267
268 EFI_STATUS
269 EFIAPI
270 TerminalDriverBindingSupported (
271 IN EFI_DRIVER_BINDING_PROTOCOL *This,
272 IN EFI_HANDLE Controller,
273 IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
274 );
275
276 EFI_STATUS
277 EFIAPI
278 TerminalDriverBindingStart (
279 IN EFI_DRIVER_BINDING_PROTOCOL *This,
280 IN EFI_HANDLE Controller,
281 IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
282 );
283
284 EFI_STATUS
285 EFIAPI
286 TerminalDriverBindingStop (
287 IN EFI_DRIVER_BINDING_PROTOCOL *This,
288 IN EFI_HANDLE Controller,
289 IN UINTN NumberOfChildren,
290 IN EFI_HANDLE *ChildHandleBuffer
291 );
292
293 EFI_STATUS
294 EFIAPI
295 TerminalComponentNameGetDriverName (
296 IN EFI_COMPONENT_NAME_PROTOCOL *This,
297 IN CHAR8 *Language,
298 OUT CHAR16 **DriverName
299 );
300
301 EFI_STATUS
302 EFIAPI
303 TerminalComponentNameGetControllerName (
304 IN EFI_COMPONENT_NAME_PROTOCOL *This,
305 IN EFI_HANDLE ControllerHandle,
306 IN EFI_HANDLE ChildHandle OPTIONAL,
307 IN CHAR8 *Language,
308 OUT CHAR16 **ControllerName
309 );
310
311 //
312 // internal functions
313 //
314 EFI_STATUS
315 TerminalConInCheckForKey (
316 IN EFI_SIMPLE_TEXT_INPUT_PROTOCOL *This
317 )
318 ;
319
320 VOID
321 TerminalUpdateConsoleDevVariable (
322 IN CHAR16 *VariableName,
323 IN EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath
324 )
325 ;
326
327 VOID
328 TerminalRemoveConsoleDevVariable (
329 IN CHAR16 *VariableName,
330 IN EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath
331 )
332 ;
333
334 VOID *
335 TerminalGetVariableAndSize (
336 IN CHAR16 *Name,
337 IN EFI_GUID *VendorGuid,
338 OUT UINTN *VariableSize
339 )
340 ;
341
342 EFI_STATUS
343 SetTerminalDevicePath (
344 IN UINT8 TerminalType,
345 IN EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath,
346 OUT EFI_DEVICE_PATH_PROTOCOL **TerminalDevicePath
347 )
348 ;
349
350 VOID
351 InitializeRawFiFo (
352 IN TERMINAL_DEV *TerminalDevice
353 )
354 ;
355
356 VOID
357 InitializeUnicodeFiFo (
358 IN TERMINAL_DEV *TerminalDevice
359 )
360 ;
361
362 VOID
363 InitializeEfiKeyFiFo (
364 IN TERMINAL_DEV *TerminalDevice
365 )
366 ;
367
368 EFI_STATUS
369 GetOneKeyFromSerial (
370 EFI_SERIAL_IO_PROTOCOL *SerialIo,
371 UINT8 *Input
372 )
373 ;
374
375 BOOLEAN
376 RawFiFoInsertOneKey (
377 TERMINAL_DEV *TerminalDevice,
378 UINT8 Input
379 )
380 ;
381
382 BOOLEAN
383 RawFiFoRemoveOneKey (
384 TERMINAL_DEV *TerminalDevice,
385 UINT8 *Output
386 )
387 ;
388
389 BOOLEAN
390 IsRawFiFoEmpty (
391 TERMINAL_DEV *TerminalDevice
392 )
393 ;
394
395 BOOLEAN
396 IsRawFiFoFull (
397 TERMINAL_DEV *TerminalDevice
398 )
399 ;
400
401 BOOLEAN
402 EfiKeyFiFoInsertOneKey (
403 TERMINAL_DEV *TerminalDevice,
404 EFI_INPUT_KEY Key
405 )
406 ;
407
408 BOOLEAN
409 EfiKeyFiFoRemoveOneKey (
410 TERMINAL_DEV *TerminalDevice,
411 EFI_INPUT_KEY *Output
412 )
413 ;
414
415 BOOLEAN
416 IsEfiKeyFiFoEmpty (
417 TERMINAL_DEV *TerminalDevice
418 )
419 ;
420
421 BOOLEAN
422 IsEfiKeyFiFoFull (
423 TERMINAL_DEV *TerminalDevice
424 )
425 ;
426
427 BOOLEAN
428 UnicodeFiFoInsertOneKey (
429 TERMINAL_DEV *TerminalDevice,
430 UINT16 Input
431 )
432 ;
433
434 BOOLEAN
435 UnicodeFiFoRemoveOneKey (
436 TERMINAL_DEV *TerminalDevice,
437 UINT16 *Output
438 )
439 ;
440
441 BOOLEAN
442 IsUnicodeFiFoEmpty (
443 TERMINAL_DEV *TerminalDevice
444 )
445 ;
446
447 BOOLEAN
448 IsUnicodeFiFoFull (
449 TERMINAL_DEV *TerminalDevice
450 )
451 ;
452
453 UINT8
454 UnicodeFiFoGetKeyCount (
455 TERMINAL_DEV *TerminalDevice
456 )
457 ;
458
459 VOID
460 TranslateRawDataToEfiKey (
461 IN TERMINAL_DEV *TerminalDevice
462 )
463 ;
464
465 //
466 // internal functions for PC ANSI
467 //
468 VOID
469 AnsiRawDataToUnicode (
470 IN TERMINAL_DEV *PcAnsiDevice
471 )
472 ;
473
474 VOID
475 UnicodeToEfiKey (
476 IN TERMINAL_DEV *PcAnsiDevice
477 )
478 ;
479
480 EFI_STATUS
481 AnsiTestString (
482 IN TERMINAL_DEV *TerminalDevice,
483 IN CHAR16 *WString
484 )
485 ;
486
487 //
488 // internal functions for VT100
489 //
490 EFI_STATUS
491 VT100TestString (
492 IN TERMINAL_DEV *VT100Device,
493 IN CHAR16 *WString
494 )
495 ;
496
497 //
498 // internal functions for VT100Plus
499 //
500 EFI_STATUS
501 VT100PlusTestString (
502 IN TERMINAL_DEV *TerminalDevice,
503 IN CHAR16 *WString
504 )
505 ;
506
507 //
508 // internal functions for VTUTF8
509 //
510 VOID
511 VTUTF8RawDataToUnicode (
512 IN TERMINAL_DEV *VtUtf8Device
513 )
514 ;
515
516 EFI_STATUS
517 VTUTF8TestString (
518 IN TERMINAL_DEV *TerminalDevice,
519 IN CHAR16 *WString
520 )
521 ;
522
523 VOID
524 UnicodeToUtf8 (
525 IN CHAR16 Unicode,
526 OUT UTF8_CHAR *Utf8Char,
527 OUT UINT8 *ValidBytes
528 )
529 ;
530
531 VOID
532 GetOneValidUtf8Char (
533 IN TERMINAL_DEV *Utf8Device,
534 OUT UTF8_CHAR *Utf8Char,
535 OUT UINT8 *ValidBytes
536 )
537 ;
538
539 VOID
540 Utf8ToUnicode (
541 IN UTF8_CHAR Utf8Char,
542 IN UINT8 ValidBytes,
543 OUT CHAR16 *UnicodeChar
544 )
545 ;
546
547 //
548 // functions for boxdraw unicode
549 //
550 BOOLEAN
551 TerminalIsValidTextGraphics (
552 IN CHAR16 Graphic,
553 OUT CHAR8 *PcAnsi, OPTIONAL
554 OUT CHAR8 *Ascii OPTIONAL
555 )
556 ;
557
558 BOOLEAN
559 TerminalIsValidAscii (
560 IN CHAR16 Ascii
561 )
562 ;
563
564 BOOLEAN
565 TerminalIsValidEfiCntlChar (
566 IN CHAR16 CharC
567 )
568 ;
569
570 #endif