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.fr...@linaro.org>
Contributed-under: TianoCore Contribution Agreement 1.0
---
 MdeModulePkg/Include/Guid/TtyTerm.h                         | 25 +++++++++++
 MdeModulePkg/MdeModulePkg.dec                               |  3 ++
 MdeModulePkg/Universal/Console/TerminalDxe/Terminal.c       | 44 
++++++++++++++++----
 MdeModulePkg/Universal/Console/TerminalDxe/Terminal.h       |  2 +
 MdeModulePkg/Universal/Console/TerminalDxe/TerminalConIn.c  |  4 +-
 MdeModulePkg/Universal/Console/TerminalDxe/TerminalConOut.c |  2 +
 MdeModulePkg/Universal/Console/TerminalDxe/TerminalDxe.inf  |  1 +
 7 files changed, 73 insertions(+), 8 deletions(-)

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


------------------------------------------------------------------------------
Don't Limit Your Business. Reach for the Cloud.
GigeNET's Cloud Solutions provide you with the tools and support that
you need to offload your IT needs and focus on growing your business.
Configured For All Businesses. Start Your Cloud Today.
https://www.gigenetcloud.com/
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/edk2-devel

Reply via email to