]> git.proxmox.com Git - mirror_edk2.git/commitdiff
Add "TtyTerm" terminal type to TerminalDxe
authorRoy Franz <roy.franz@linaro.org>
Thu, 9 Jul 2015 06:24:11 +0000 (06:24 +0000)
committerlersek <lersek@Edk2>
Thu, 9 Jul 2015 06:24:11 +0000 (06:24 +0000)
This patch a adds new terminal type, TtyTerm, to TerminalDxe.  This terminal
type provides a place to add support for various *nix terminals that don't
behave like standard VT terminals.  The goal is to 'just work' with as many
terminals as possible, rather than properly emulating any one specific
terminal.

Signed-off-by: Roy Franz <roy.franz@linaro.org>
Contributed-under: TianoCore Contribution Agreement 1.0
Reviewed-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Reviewed-by: Feng Tian <feng.tian@intel.com>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@17895 6f19259b-4bc3-4df7-8a09-765794883524

MdeModulePkg/Include/Guid/TtyTerm.h [new file with mode: 0644]
MdeModulePkg/MdeModulePkg.dec
MdeModulePkg/Universal/Console/TerminalDxe/Terminal.c
MdeModulePkg/Universal/Console/TerminalDxe/Terminal.h
MdeModulePkg/Universal/Console/TerminalDxe/TerminalConIn.c
MdeModulePkg/Universal/Console/TerminalDxe/TerminalConOut.c
MdeModulePkg/Universal/Console/TerminalDxe/TerminalDxe.inf

diff --git a/MdeModulePkg/Include/Guid/TtyTerm.h b/MdeModulePkg/Include/Guid/TtyTerm.h
new file mode 100644 (file)
index 0000000..900e5af
--- /dev/null
@@ -0,0 +1,25 @@
+/** @file\r
+GUID definition for TtyTerm terminal type.  The TtyTerm terminal aims to\r
+provide support for modern *nix terminals.\r
+\r
+\r
+Copyright (c) 2015  Linaro Ltd.\r
+This program and the accompanying materials are licensed and made\r
+available under the terms and conditions of the BSD License that\r
+accompanies this distribution. The full text of the license may be found\r
+at http://opensource.org/licenses/bsd-license.php.\r
+\r
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+\r
+**/\r
+\r
+#ifndef __TTYTERM_H__\r
+#define __TTYTERM_H__\r
+\r
+#define EFI_TTY_TERM_GUID    \\r
+    {0x7d916d80, 0x5bb1, 0x458c, {0xa4, 0x8f, 0xe2, 0x5f, 0xdd, 0x51, 0xef, 0x94 } }\r
+\r
+extern EFI_GUID gEfiTtyTermGuid;\r
+\r
+#endif\r
index c48669d67a01d3159af61e1e2a2b5fdec4d13e60..b5acce1dbe963b137a641eb86d642664a3826c91 100644 (file)
   gLzmaCustomDecompressGuid      = { 0xEE4E5898, 0x3914, 0x4259, { 0x9D, 0x6E, 0xDC, 0x7B, 0xD7, 0x94, 0x03, 0xCF }}\r
   gLzmaF86CustomDecompressGuid     = { 0xD42AE6BD, 0x1352, 0x4bfb, { 0x90, 0x9A, 0xCA, 0x72, 0xA6, 0xEA, 0xE8, 0x89 }}\r
 \r
+  ## Include/Guid/TtyTerm.h\r
+  gEfiTtyTermGuid                = { 0x7d916d80, 0x5bb1, 0x458c, {0xa4, 0x8f, 0xe2, 0x5f, 0xdd, 0x51, 0xef, 0x94 }}\r
+\r
 [Ppis]\r
   ## Include/Ppi/AtaController.h\r
   gPeiAtaControllerPpiGuid       = { 0xa45e60d1, 0xc719, 0x44aa, { 0xb0, 0x7a, 0xaa, 0x77, 0x7f, 0x85, 0x90, 0x6d }}\r
index 966fb79ce4b3f1643a71a57b4938391501f5cecf..babb097e57895428e7dada89a275c1f2ca56d43f 100644 (file)
@@ -33,7 +33,8 @@ EFI_GUID  *gTerminalType[] = {
   &gEfiPcAnsiGuid,\r
   &gEfiVT100Guid,\r
   &gEfiVT100PlusGuid,\r
-  &gEfiVTUTF8Guid\r
+  &gEfiVTUTF8Guid,\r
+  &gEfiTtyTermGuid\r
 };\r
 \r
 \r
@@ -152,12 +153,13 @@ TerminalDriverBindingSupported (
 \r
       }\r
       //\r
-      // only supports PC ANSI, VT100, VT100+ and VT-UTF8 terminal types\r
+      // only supports PC ANSI, VT100, VT100+, VT-UTF8, and TtyTerm terminal types\r
       //\r
       if (!CompareGuid (&Node->Guid, &gEfiPcAnsiGuid) &&\r
           !CompareGuid (&Node->Guid, &gEfiVT100Guid) &&\r
           !CompareGuid (&Node->Guid, &gEfiVT100PlusGuid) &&\r
-          !CompareGuid (&Node->Guid, &gEfiVTUTF8Guid)) {\r
+          !CompareGuid (&Node->Guid, &gEfiVTUTF8Guid) &&\r
+          !CompareGuid (&Node->Guid, &gEfiTtyTermGuid)) {\r
 \r
         return EFI_UNSUPPORTED;\r
       }\r
@@ -275,6 +277,10 @@ BuildTerminalDevpath  (
 \r
     TerminalType = VTUTF8TYPE;\r
 \r
+  } else if (CompareGuid (&Node->Guid, &gEfiTtyTermGuid)) {\r
+\r
+    TerminalType = TTYTERMTYPE;\r
+\r
   } else {\r
     return NULL;\r
   }\r
@@ -708,9 +714,9 @@ TerminalDriverBindingStart (
 \r
       TerminalType = PcdGet8 (PcdDefaultTerminalType);\r
       //\r
-      // Must be between PCANSITYPE (0) and VTUTF8TYPE (3)\r
+      // Must be between PCANSITYPE (0) and TTYTERMTYPE (4)\r
       //\r
-      ASSERT (TerminalType <= VTUTF8TYPE);\r
+      ASSERT (TerminalType <= TTYTERMTYPE);\r
 \r
       CopyMem (&DefaultNode->Guid, gTerminalType[TerminalType], sizeof (EFI_GUID));\r
       RemainingDevicePath = (EFI_DEVICE_PATH_PROTOCOL *) DefaultNode;\r
@@ -728,6 +734,8 @@ TerminalDriverBindingStart (
         TerminalType = VT100PLUSTYPE;\r
       } else if (CompareGuid (&Node->Guid, &gEfiVTUTF8Guid)) {\r
         TerminalType = VTUTF8TYPE;\r
+      } else if (CompareGuid (&Node->Guid, &gEfiTtyTermGuid)) {\r
+        TerminalType = TTYTERMTYPE;\r
       } else {\r
         goto Error;\r
       }\r
@@ -926,6 +934,24 @@ TerminalDriverBindingStart (
         );\r
 \r
       break;\r
+\r
+    case TTYTERMTYPE:\r
+      AddUnicodeString2 (\r
+        "eng",\r
+        gTerminalComponentName.SupportedLanguages,\r
+        &TerminalDevice->ControllerNameTable,\r
+        (CHAR16 *)L"Tty Terminal Serial Console",\r
+        TRUE\r
+        );\r
+      AddUnicodeString2 (\r
+        "en",\r
+        gTerminalComponentName2.SupportedLanguages,\r
+        &TerminalDevice->ControllerNameTable,\r
+        (CHAR16 *)L"Tty Terminal Serial Console",\r
+        FALSE\r
+        );\r
+\r
+      break;\r
     }\r
 \r
     //\r
@@ -1441,7 +1467,7 @@ TerminalUpdateConsoleDevVariable (
   //\r
   // Append terminal device path onto the variable.\r
   //\r
-  for (TerminalType = PCANSITYPE; TerminalType <= VTUTF8TYPE; TerminalType++) {\r
+  for (TerminalType = PCANSITYPE; TerminalType <= TTYTERMTYPE; TerminalType++) {\r
     SetTerminalDevicePath (TerminalType, ParentDevicePath, &TempDevicePath);\r
     NewVariable = AppendDevicePathInstance (Variable, TempDevicePath);\r
     ASSERT (NewVariable != NULL);\r
@@ -1554,7 +1580,7 @@ TerminalRemoveConsoleDevVariable (
     // Loop through all the terminal types that this driver supports\r
     //\r
     Match = FALSE;\r
-    for (TerminalType = PCANSITYPE; TerminalType <= VTUTF8TYPE; TerminalType++) {\r
+    for (TerminalType = PCANSITYPE; TerminalType <= TTYTERMTYPE; TerminalType++) {\r
 \r
       SetTerminalDevicePath (TerminalType, ParentDevicePath, &TempDevicePath);\r
 \r
@@ -1658,6 +1684,10 @@ SetTerminalDevicePath (
     CopyGuid (&Node.Guid, &gEfiVTUTF8Guid);\r
     break;\r
 \r
+  case TTYTERMTYPE:\r
+    CopyGuid (&Node.Guid, &gEfiTtyTermGuid);\r
+    break;\r
+\r
   default:\r
     return EFI_UNSUPPORTED;\r
   }\r
index d393acbc2073e1b7d9408058dd6676e95595b066..03542a40dc0777b3e439edcaff6137a6854bf81c 100644 (file)
@@ -20,6 +20,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 \r
 #include <Guid/GlobalVariable.h>\r
 #include <Guid/PcAnsi.h>\r
+#include <Guid/TtyTerm.h>\r
 #include <Guid/StatusCodeDataTypeVariable.h>\r
 \r
 #include <Protocol/SimpleTextOut.h>\r
@@ -136,6 +137,7 @@ typedef union {
 #define VT100TYPE                 1\r
 #define VT100PLUSTYPE             2\r
 #define VTUTF8TYPE                3\r
+#define TTYTERMTYPE               4\r
 \r
 #define LEFTOPENBRACKET           0x5b  // '['\r
 #define ACAP                      0x41\r
index 4a008c9ada4fdc1bfd7d3c867764260a93497eeb..17a1244349d806069a7625b19dff5811458bb4c9 100644 (file)
@@ -454,6 +454,7 @@ TranslateRawDataToEfiKey (
   case PCANSITYPE:\r
   case VT100TYPE:\r
   case VT100PLUSTYPE:\r
+  case TTYTERMTYPE:\r
     AnsiRawDataToUnicode (TerminalDevice);\r
     UnicodeToEfiKey (TerminalDevice);\r
     break;\r
@@ -1393,7 +1394,8 @@ UnicodeToEfiKey (
       if (TerminalDevice->TerminalType == PCANSITYPE    ||\r
           TerminalDevice->TerminalType == VT100TYPE     ||\r
           TerminalDevice->TerminalType == VT100PLUSTYPE ||\r
-          TerminalDevice->TerminalType == VTUTF8TYPE) {\r
+          TerminalDevice->TerminalType == VTUTF8TYPE    ||\r
+          TerminalDevice->TerminalType == TTYTERMTYPE) {\r
         switch (UnicodeChar) {\r
         case 'A':\r
           Key.ScanCode = SCAN_UP;\r
index affb3ae8e1d5a324d4a12b16bb083c4162a70905..9fa952ad2a32808adc3088adf8e82dc2a441867d 100644 (file)
@@ -223,6 +223,7 @@ TerminalConOutOutputString (
     case PCANSITYPE:\r
     case VT100TYPE:\r
     case VT100PLUSTYPE:\r
+    case TTYTERMTYPE:\r
 \r
       if (!TerminalIsValidTextGraphics (*WString, &GraphicChar, &AsciiChar)) {\r
         //\r
@@ -371,6 +372,7 @@ TerminalConOutTestString (
   case PCANSITYPE:\r
   case VT100TYPE:\r
   case VT100PLUSTYPE:\r
+  case TTYTERMTYPE:\r
     Status = AnsiTestString (TerminalDevice, WString);\r
     break;\r
 \r
index 1d863881ac0105dc4aace4ea24516e8dd07efc85..0780296798230918c616099164d2ffbff65b7d16 100644 (file)
@@ -73,6 +73,7 @@
   gEfiVT100Guid                                 ## SOMETIMES_CONSUMES ## GUID # used with a Vendor-Defined Messaging Device Path\r
   gEfiVT100PlusGuid                             ## SOMETIMES_CONSUMES ## GUID # used with a Vendor-Defined Messaging Device Path\r
   gEfiPcAnsiGuid                                ## SOMETIMES_CONSUMES ## GUID # used with a Vendor-Defined Messaging Device Path\r
+  gEfiTtyTermGuid                               ## SOMETIMES_CONSUMES ## GUID # used with a Vendor-Defined Messaging Device Path\r
   gEdkiiStatusCodeDataTypeVariableGuid          ## SOMETIMES_CONSUMES ## GUID\r
 \r
 [Protocols]\r