]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Library/BootMaintenanceManagerUiLib/BootMaintenance.c
BootMaintenanceMangerUiLib: Save mode info for later use.
[mirror_edk2.git] / MdeModulePkg / Library / BootMaintenanceManagerUiLib / BootMaintenance.c
index 34b7809a6134bfd0643a4f30b83a564382a0aac3..0d54cdffc80257382b461247694162b4d9208559 100644 (file)
@@ -30,6 +30,8 @@ UINT32    mBmmSetupTextModeRow            = 0;
 UINT32    mBmmSetupHorizontalResolution   = 0;\r
 UINT32    mBmmSetupVerticalResolution     = 0;\r
 \r
+BOOLEAN   mBmmModeInitialized             = FALSE;\r
+\r
 EFI_DEVICE_PATH_PROTOCOL  EndDevicePath[] = {\r
   {\r
     END_DEVICE_PATH_TYPE,\r
@@ -1277,6 +1279,77 @@ FreeAllMenu (
   mAllMenuInit = FALSE;\r
 }\r
 \r
+/**\r
+  Initial the boot mode related parameters.\r
+\r
+**/\r
+VOID\r
+BmmInitialBootModeInfo (\r
+  VOID\r
+  )\r
+{\r
+  EFI_STATUS                         Status;\r
+  EFI_GRAPHICS_OUTPUT_PROTOCOL       *GraphicsOutput;\r
+  EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL    *SimpleTextOut;\r
+  UINTN                              BootTextColumn;\r
+  UINTN                              BootTextRow;\r
+\r
+  if (mBmmModeInitialized) {\r
+    return;\r
+  }\r
+\r
+  //\r
+  // After the console is ready, get current video resolution\r
+  // and text mode before launching setup at first time.\r
+  //\r
+  Status = gBS->HandleProtocol (\r
+                  gST->ConsoleOutHandle,\r
+                  &gEfiGraphicsOutputProtocolGuid,\r
+                  (VOID**)&GraphicsOutput\r
+                  );\r
+  if (EFI_ERROR (Status)) {\r
+    GraphicsOutput = NULL;\r
+  }\r
+\r
+  Status = gBS->HandleProtocol (\r
+                  gST->ConsoleOutHandle,\r
+                  &gEfiSimpleTextOutProtocolGuid,\r
+                  (VOID**)&SimpleTextOut\r
+                  );\r
+  if (EFI_ERROR (Status)) {\r
+    SimpleTextOut = NULL;\r
+  }\r
+\r
+  if (GraphicsOutput != NULL) {\r
+    //\r
+    // Get current video resolution and text mode.\r
+    //\r
+    mBmmBootHorizontalResolution = GraphicsOutput->Mode->Info->HorizontalResolution;\r
+    mBmmBootVerticalResolution   = GraphicsOutput->Mode->Info->VerticalResolution;\r
+  }\r
+\r
+  if (SimpleTextOut != NULL) {\r
+    Status = SimpleTextOut->QueryMode (\r
+                              SimpleTextOut,\r
+                              SimpleTextOut->Mode->Mode,\r
+                              &BootTextColumn,\r
+                              &BootTextRow\r
+                              );\r
+    mBmmBootTextModeColumn = (UINT32)BootTextColumn;\r
+    mBmmBootTextModeRow    = (UINT32)BootTextRow;\r
+  }\r
+\r
+  //\r
+  // Get user defined text mode for setup.\r
+  //\r
+  mBmmSetupHorizontalResolution = PcdGet32 (PcdSetupVideoHorizontalResolution);\r
+  mBmmSetupVerticalResolution   = PcdGet32 (PcdSetupVideoVerticalResolution);\r
+  mBmmSetupTextModeColumn       = PcdGet32 (PcdSetupConOutColumn);\r
+  mBmmSetupTextModeRow          = PcdGet32 (PcdSetupConOutRow);\r
+\r
+  mBmmModeInitialized           = TRUE;\r
+}\r
+\r
 /**\r
 \r
   Install Boot Maintenance Manager Menu driver.\r
@@ -1365,6 +1438,8 @@ BootMaintenanceManagerUiLibConstructor (
   //\r
   InitializeBmmConfig(mBmmCallbackInfo);\r
 \r
+  BmmInitialBootModeInfo();\r
+\r
   return EFI_SUCCESS;\r
 }\r
 \r