]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/Console/TerminalDxe/Terminal.c
MdeModulePkg/TerminalDxe: Fix IA32 VS2015x86 build break
[mirror_edk2.git] / MdeModulePkg / Universal / Console / TerminalDxe / Terminal.c
index 966fb79ce4b3f1643a71a57b4938391501f5cecf..3f445f02721fce00b7ce82e88904bb2f6bda7336 100644 (file)
@@ -33,7 +33,8 @@ EFI_GUID  *gTerminalType[] = {
   &gEfiPcAnsiGuid,\r
   &gEfiVT100Guid,\r
   &gEfiVT100PlusGuid,\r
-  &gEfiVTUTF8Guid\r
+  &gEfiVTUTF8Guid,\r
+  &gEfiTtyTermGuid\r
 };\r
 \r
 \r
@@ -80,6 +81,12 @@ TERMINAL_DEV  mTerminalDevTemplate = {
   NULL, // TwoSecondTimeOut\r
   INPUT_STATE_DEFAULT,\r
   RESET_STATE_DEFAULT,\r
+  {\r
+      0,\r
+      0,\r
+      0\r
+  },\r
+  0,\r
   FALSE,\r
   {   // SimpleTextInputEx\r
     TerminalConInResetEx,\r
@@ -152,12 +159,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
@@ -250,14 +258,13 @@ BuildTerminalDevpath  (
   EFI_STATUS                        Status;\r
 \r
   TerminalDevicePath = NULL;\r
-  TerminalType = PCANSITYPE;\r
 \r
   //\r
   // Use the RemainingDevicePath to determine the terminal type\r
   //\r
   Node = (VENDOR_DEVICE_PATH *) RemainingDevicePath;\r
   if (Node == NULL) {\r
-    TerminalType = PCANSITYPE;\r
+    TerminalType = PcdGet8 (PcdDefaultTerminalType);\r
 \r
   } else if (CompareGuid (&Node->Guid, &gEfiPcAnsiGuid)) {\r
 \r
@@ -275,6 +282,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
@@ -533,7 +544,6 @@ TerminalDriverBindingStart (
   EFI_SERIAL_IO_PROTOCOL              *SerialIo;\r
   EFI_DEVICE_PATH_PROTOCOL            *ParentDevicePath;\r
   VENDOR_DEVICE_PATH                  *Node;\r
-  VENDOR_DEVICE_PATH                  *DefaultNode;\r
   EFI_SERIAL_IO_MODE                  *Mode;\r
   UINTN                               SerialInTimeOut;\r
   TERMINAL_DEV                        *TerminalDevice;\r
@@ -553,10 +563,9 @@ TerminalDriverBindingStart (
   UINTN                               ModeCount;\r
 \r
   TerminalDevice     = NULL;\r
-  DefaultNode        = NULL;\r
-  ConInSelected       = FALSE;\r
-  ConOutSelected      = FALSE;\r
-  NullRemaining      = TRUE;\r
+  ConInSelected      = FALSE;\r
+  ConOutSelected     = FALSE;\r
+  NullRemaining      = FALSE;\r
   SimTxtInInstalled  = FALSE;\r
   SimTxtOutInstalled = FALSE;\r
   FirstEnter         = FALSE;\r
@@ -669,7 +678,7 @@ TerminalDriverBindingStart (
   //\r
   if (FirstEnter) {\r
     //\r
-    // First enther the start funciton\r
+    // First enther the start function\r
     //\r
     FirstEnter = FALSE;\r
     //\r
@@ -697,23 +706,14 @@ TerminalDriverBindingStart (
     }\r
 \r
     //\r
-    // If RemainingDevicePath is NULL, then create default device path node\r
+    // If RemainingDevicePath is NULL, use default terminal type\r
     //\r
     if (RemainingDevicePath == NULL) {\r
-      DefaultNode = AllocateZeroPool (sizeof (VENDOR_DEVICE_PATH));\r
-      if (DefaultNode == NULL) {\r
-        Status = EFI_OUT_OF_RESOURCES;\r
-        goto Error;\r
-      }\r
-\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
-\r
-      CopyMem (&DefaultNode->Guid, gTerminalType[TerminalType], sizeof (EFI_GUID));\r
-      RemainingDevicePath = (EFI_DEVICE_PATH_PROTOCOL *) DefaultNode;\r
+      ASSERT (TerminalType <= TTYTERMTYPE);\r
     } else if (!IsDevicePathEnd (RemainingDevicePath)) {\r
       //\r
       // If RemainingDevicePath isn't the End of Device Path Node,\r
@@ -728,6 +728,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 +928,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
@@ -1151,9 +1171,6 @@ TerminalDriverBindingStart (
       goto Error;\r
     }\r
   }\r
-  if (DefaultNode != NULL) {\r
-    FreePool (DefaultNode);\r
-  }\r
 \r
   return EFI_SUCCESS;\r
 \r
@@ -1222,10 +1239,6 @@ Error:
     }\r
   }\r
 \r
-  if (DefaultNode != NULL) {\r
-    FreePool (DefaultNode);\r
-  }\r
-\r
   This->Stop (This, Controller, 0, NULL);\r
 \r
   return Status;\r
@@ -1441,7 +1454,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 +1567,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 +1671,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