]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/Console/TerminalDxe/Terminal.c
Cleaned up EFI Console Variable usage
[mirror_edk2.git] / MdeModulePkg / Universal / Console / TerminalDxe / Terminal.c
index 4860a4b21041a0cf220b77164a76ae97d4834567..e9096a3db929f18a1962e96874856a791a16747b 100644 (file)
@@ -20,7 +20,6 @@ Revision History:
 --*/\r
 \r
 \r
-\r
 #include "Terminal.h"\r
 \r
 //\r
@@ -36,6 +35,70 @@ EFI_DRIVER_BINDING_PROTOCOL gTerminalDriverBinding = {
 };\r
 \r
 \r
+EFI_GUID  *gTerminalType[] = {\r
+  &gEfiPcAnsiGuid,\r
+  &gEfiVT100Guid,\r
+  &gEfiVT100PlusGuid,\r
+  &gEfiVTUTF8Guid\r
+};\r
+\r
+\r
+TERMINAL_DEV  gTerminalDevTemplate = {\r
+  TERMINAL_DEV_SIGNATURE,\r
+  NULL,\r
+  0,\r
+  NULL,\r
+  NULL,\r
+  {   // SimpleTextInput\r
+    TerminalConInReset,\r
+    TerminalConInReadKeyStroke,\r
+    NULL\r
+  },\r
+  {   // SimpleTextOutput\r
+    TerminalConOutReset,\r
+    TerminalConOutOutputString,\r
+    TerminalConOutTestString,\r
+    TerminalConOutQueryMode,\r
+    TerminalConOutSetMode,\r
+    TerminalConOutSetAttribute,\r
+    TerminalConOutClearScreen,\r
+    TerminalConOutSetCursorPosition,\r
+    TerminalConOutEnableCursor,\r
+    NULL\r
+  },\r
+  {   // SimpleTextOutputMode\r
+    1,                                           // MaxMode\r
+    0,                                           // Mode?\r
+    EFI_TEXT_ATTR (EFI_LIGHTGRAY, EFI_BLACK),    // Attribute\r
+    0,                                           // CursorColumn\r
+    0,                                           // CursorRow\r
+    TRUE                                         // CursorVisible\r
+  },\r
+  0,\r
+  {\r
+    0,\r
+    0,\r
+    { 0 }\r
+  },\r
+  {\r
+    0,\r
+    0,\r
+    { 0 }\r
+  },\r
+  {\r
+    0,\r
+    0,\r
+    { 0 }\r
+  },\r
+  NULL, // ControllerNameTable\r
+  NULL, \r
+  INPUT_STATE_DEFAULT,\r
+  RESET_STATE_DEFAULT,\r
+  FALSE\r
+};\r
+\r
+\r
+\r
 EFI_STATUS\r
 EFIAPI\r
 TerminalDriverBindingSupported (\r
@@ -243,9 +306,9 @@ TerminalDriverBindingStart (
                       EFI_OPEN_PROTOCOL_TEST_PROTOCOL\r
                       );\r
       if (EFI_ERROR (Status)) {\r
-        TerminalUpdateConsoleDevVariable ((CHAR16 *)VarConsoleInpDev, ParentDevicePath);\r
-        TerminalUpdateConsoleDevVariable ((CHAR16 *)VarConsoleOutDev, ParentDevicePath);\r
-        TerminalUpdateConsoleDevVariable ((CHAR16 *)VarErrorOutDev, ParentDevicePath);\r
+        TerminalUpdateConsoleDevVariable (L"ConInDev", ParentDevicePath);\r
+        TerminalUpdateConsoleDevVariable ((L"ConOutDev", ParentDevicePath);\r
+        TerminalUpdateConsoleDevVariable (L"ErrOutDev", ParentDevicePath);\r
       }\r
     }\r
   }\r
@@ -276,62 +339,48 @@ TerminalDriverBindingStart (
   // If RemainingDevicePath is NULL, then create default device path node\r
   //\r
   if (RemainingDevicePath == NULL) {\r
-    DefaultNode = AllocatePool (sizeof (VENDOR_DEVICE_PATH));\r
+    DefaultNode = AllocateZeroPool (sizeof (VENDOR_DEVICE_PATH));\r
     if (DefaultNode == NULL) {\r
       Status = EFI_OUT_OF_RESOURCES;\r
       goto Error;\r
     }\r
 \r
-    CopyMem (&DefaultNode->Guid, &gEfiPcAnsiGuid, sizeof (EFI_GUID));\r
-    RemainingDevicePath = (EFI_DEVICE_PATH_PROTOCOL*) DefaultNode;\r
-  }\r
-  //\r
-  // Use the RemainingDevicePath to determine the terminal type\r
-  //\r
-  Node = (VENDOR_DEVICE_PATH *) RemainingDevicePath;\r
-\r
-  if (CompareGuid (&Node->Guid, &gEfiPcAnsiGuid)) {\r
-\r
-    TerminalType = PcAnsiType;\r
-\r
-  } else if (CompareGuid (&Node->Guid, &gEfiVT100Guid)) {\r
-\r
-    TerminalType = VT100Type;\r
-\r
-  } else if (CompareGuid (&Node->Guid, &gEfiVT100PlusGuid)) {\r
-\r
-    TerminalType = VT100PlusType;\r
-\r
-  } else if (CompareGuid (&Node->Guid, &gEfiVTUTF8Guid)) {\r
-\r
-    TerminalType = VTUTF8Type;\r
+    TerminalType = FixedPcdGet8 (PcdDefaultTerminalType);\r
+    // must be between PcAnsiType (0) and VTUTF8Type (3)\r
+    ASSERT (TerminalType <= VTUTF8Type);\r
 \r
+    CopyMem (&DefaultNode->Guid, gTerminalType[TerminalType], sizeof (EFI_GUID));\r
+    RemainingDevicePath = (EFI_DEVICE_PATH_PROTOCOL*)DefaultNode;\r
   } else {\r
-    goto Error;\r
+    //\r
+    // Use the RemainingDevicePath to determine the terminal type\r
+    //\r
+    Node = (VENDOR_DEVICE_PATH *)RemainingDevicePath;\r
+    if (CompareGuid (&Node->Guid, &gEfiPcAnsiGuid)) {\r
+      TerminalType = PcAnsiType;\r
+    } else if (CompareGuid (&Node->Guid, &gEfiVT100Guid)) {\r
+      TerminalType = VT100Type;\r
+    } else if (CompareGuid (&Node->Guid, &gEfiVT100PlusGuid)) {\r
+      TerminalType = VT100PlusType;\r
+    } else if (CompareGuid (&Node->Guid, &gEfiVTUTF8Guid)) {\r
+      TerminalType = VTUTF8Type;\r
+    } else {\r
+      goto Error;\r
+    }\r
   }\r
+\r
   //\r
   // Initialize the Terminal Dev\r
   //\r
-  TerminalDevice = AllocatePool (sizeof (TERMINAL_DEV));\r
+  TerminalDevice = AllocateCopyPool (sizeof (TERMINAL_DEV), &gTerminalDevTemplate);\r
   if (TerminalDevice == NULL) {\r
     Status = EFI_OUT_OF_RESOURCES;\r
     goto Error;\r
   }\r
 \r
-  ZeroMem (TerminalDevice, sizeof (TERMINAL_DEV));\r
-\r
-  TerminalDevice->Signature     = TERMINAL_DEV_SIGNATURE;\r
-\r
   TerminalDevice->TerminalType  = TerminalType;\r
-\r
   TerminalDevice->SerialIo      = SerialIo;\r
 \r
-  //\r
-  // Simple Input Protocol\r
-  //\r
-  TerminalDevice->SimpleInput.Reset         = TerminalConInReset;\r
-  TerminalDevice->SimpleInput.ReadKeyStroke = TerminalConInReadKeyStroke;\r
-\r
   Status = gBS->CreateEvent (\r
                   EVT_NOTIFY_WAIT,\r
                   TPL_NOTIFY,\r
@@ -342,6 +391,7 @@ TerminalDriverBindingStart (
   if (EFI_ERROR (Status)) {\r
     goto Error;\r
   }\r
+\r
   //\r
   // initialize the FIFO buffer used for accommodating\r
   // the pre-read pending characters\r
@@ -355,7 +405,6 @@ TerminalDriverBindingStart (
   // keystroke response performance issue\r
   //\r
   Mode            = TerminalDevice->SerialIo->Mode;\r
-\r
   SerialInTimeOut = 0;\r
   if (Mode->BaudRate != 0) {\r
     SerialInTimeOut = (1 + Mode->DataBits + Mode->StopBits) * 2 * 1000000 / (UINTN) Mode->BaudRate;\r
@@ -409,24 +458,8 @@ TerminalDriverBindingStart (
   //\r
   // Simple Text Output Protocol\r
   //\r
-  TerminalDevice->SimpleTextOutput.Reset              = TerminalConOutReset;\r
-  TerminalDevice->SimpleTextOutput.OutputString       = TerminalConOutOutputString;\r
-  TerminalDevice->SimpleTextOutput.TestString         = TerminalConOutTestString;\r
-  TerminalDevice->SimpleTextOutput.QueryMode          = TerminalConOutQueryMode;\r
-  TerminalDevice->SimpleTextOutput.SetMode            = TerminalConOutSetMode;\r
-  TerminalDevice->SimpleTextOutput.SetAttribute       = TerminalConOutSetAttribute;\r
-  TerminalDevice->SimpleTextOutput.ClearScreen        = TerminalConOutClearScreen;\r
-  TerminalDevice->SimpleTextOutput.SetCursorPosition  = TerminalConOutSetCursorPosition;\r
-  TerminalDevice->SimpleTextOutput.EnableCursor       = TerminalConOutEnableCursor;\r
   TerminalDevice->SimpleTextOutput.Mode               = &TerminalDevice->SimpleTextOutputMode;\r
 \r
-  TerminalDevice->SimpleTextOutputMode.MaxMode        = 1;\r
-  //\r
-  // For terminal devices, cursor is always visible\r
-  //\r
-  TerminalDevice->SimpleTextOutputMode.CursorVisible  = TRUE;\r
-  TerminalDevice->SimpleTextOutputMode.Attribute      = EFI_TEXT_ATTR (EFI_LIGHTGRAY, EFI_BLACK);\r
-\r
   Status = TerminalDevice->SimpleTextOutput.Reset (\r
                                               &TerminalDevice->SimpleTextOutput,\r
                                               FALSE\r
@@ -450,11 +483,6 @@ TerminalDriverBindingStart (
   if (EFI_ERROR (Status)) {\r
     goto ReportError;\r
   }\r
-  //\r
-  //\r
-  //\r
-  TerminalDevice->InputState  = INPUT_STATE_DEFAULT;\r
-  TerminalDevice->ResetState  = RESET_STATE_DEFAULT;\r
 \r
   Status = gBS->CreateEvent (\r
                   EVT_TIMER,\r
@@ -679,9 +707,9 @@ TerminalDriverBindingStop (
       // Remove Parent Device Path from\r
       // the Console Device Environment Variables\r
       //\r
-      TerminalRemoveConsoleDevVariable ((CHAR16 *)VarConsoleInpDev, ParentDevicePath);\r
-      TerminalRemoveConsoleDevVariable ((CHAR16 *)VarConsoleOutDev, ParentDevicePath);\r
-      TerminalRemoveConsoleDevVariable ((CHAR16 *)VarErrorOutDev, ParentDevicePath);\r
+      TerminalRemoveConsoleDevVariable (L"ConInDev", ParentDevicePath);\r
+      TerminalRemoveConsoleDevVariable (L"ConOutDev", ParentDevicePath);\r
+      TerminalRemoveConsoleDevVariable (L"ErrOutDev", ParentDevicePath);\r
 \r
       //\r
       // Uninstall the Terminal Driver's GUID Tag from the Serial controller\r