]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Library/BootMaintenanceManagerUiLib/BootOption.c
MdeModulePkg/BMMUiLib: Check reset requirement before exiting UiApp
[mirror_edk2.git] / MdeModulePkg / Library / BootMaintenanceManagerUiLib / BootOption.c
index 890728aff5b69cfc2867b12633ceeed25c1178eb..8680a51d78c75cb4798632d828c733dc5f0b5d42 100644 (file)
@@ -23,6 +23,51 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 ///\r
 #define MAX_CHAR            480\r
 \r
+/**\r
+\r
+  Check whether a reset is needed, if reset is needed, Popup a menu to notice user.\r
+\r
+**/\r
+VOID\r
+BmmSetupResetReminder (\r
+  VOID\r
+  )\r
+{\r
+  EFI_INPUT_KEY                 Key;\r
+  CHAR16                        *StringBuffer1;\r
+  CHAR16                        *StringBuffer2;\r
+  EFI_STATUS                    Status;\r
+  EDKII_FORM_BROWSER_EXTENSION2_PROTOCOL *FormBrowserEx2;\r
+\r
+  //\r
+  // Use BrowserEx2 protocol to check whether reset is required.\r
+  //\r
+  Status = gBS->LocateProtocol (&gEdkiiFormBrowserEx2ProtocolGuid, NULL, (VOID **) &FormBrowserEx2);\r
+\r
+  //\r
+  //check any reset required change is applied? if yes, reset system\r
+  //\r
+  if (!EFI_ERROR(Status) && FormBrowserEx2->IsResetRequired()) {\r
+    StringBuffer1 = AllocateZeroPool (MAX_CHAR * sizeof (CHAR16));\r
+    ASSERT (StringBuffer1 != NULL);\r
+    StringBuffer2 = AllocateZeroPool (MAX_CHAR * sizeof (CHAR16));\r
+    ASSERT (StringBuffer2 != NULL);\r
+    StrCpyS (StringBuffer1, MAX_CHAR, L"Configuration changed. Reset to apply it Now.");\r
+    StrCpyS (StringBuffer2, MAX_CHAR, L"Press ENTER to reset");\r
+    //\r
+    // Popup a menu to notice user\r
+    //\r
+    do {\r
+      CreatePopUp (EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE, &Key, StringBuffer1, StringBuffer2, NULL);\r
+    } while (Key.UnicodeChar != CHAR_CARRIAGE_RETURN);\r
+\r
+    FreePool (StringBuffer1);\r
+    FreePool (StringBuffer2);\r
+\r
+    gRT->ResetSystem (EfiResetCold, EFI_SUCCESS, 0, NULL);\r
+  }\r
+}\r
+\r
 /**\r
   Create a menu entry by given menu type.\r
 \r
@@ -883,6 +928,10 @@ BootFromFile (
     // Since current no boot from removable media directly is allowed */\r
     //\r
     gST->ConOut->ClearScreen (gST->ConOut);\r
+    //\r
+    // Check whether need to reset system.\r
+    //\r
+    BmmSetupResetReminder ();\r
 \r
     BmmSetConsoleMode (FALSE);\r
     EfiBootManagerBoot (&BootOption);\r