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