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