mirror of https://github.com/acidanthera/audk.git
MdeModulePkg/BMMUiLib: Check reset requirement before exiting UiApp
V2: Refine the comments. In UI page, some configuration change may require system reset. BootMaintenanceManagerUiLib misses this check before exiting UiApp to boot other boot options. Now add the check. Cc: Eric Dong <eric.dong@intel.com> Cc: Liming Gao <liming.gao@intel.com> Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Dandan Bi <dandan.bi@intel.com> Reviewed-by: Liming Gao <liming.gao@intel.com>
This commit is contained in:
parent
c51f5f17e6
commit
9cb74c3693
|
@ -28,6 +28,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
|||
#include <Protocol/SimpleFileSystem.h>
|
||||
#include <Protocol/SerialIo.h>
|
||||
#include <Protocol/DevicePathToText.h>
|
||||
#include <Protocol/FormBrowserEx2.h>
|
||||
|
||||
#include <Library/PrintLib.h>
|
||||
#include <Library/DebugLib.h>
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
## @file
|
||||
# Boot Maintenance Manager Library used by UiApp.
|
||||
#
|
||||
# Copyright (c) 2011 - 2015, Intel Corporation. All rights reserved.<BR>
|
||||
# Copyright (c) 2011 - 2017, Intel Corporation. All rights reserved.<BR>
|
||||
# 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
|
||||
|
@ -91,6 +91,7 @@
|
|||
gEfiHiiConfigAccessProtocolGuid ## CONSUMES
|
||||
gEfiSerialIoProtocolGuid ## CONSUMES
|
||||
gEfiDevicePathToTextProtocolGuid ## CONSUMES
|
||||
gEdkiiFormBrowserEx2ProtocolGuid ## CONSUMES
|
||||
|
||||
[FeaturePcd]
|
||||
|
||||
|
|
|
@ -23,6 +23,51 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
|||
///
|
||||
#define MAX_CHAR 480
|
||||
|
||||
/**
|
||||
|
||||
Check whether a reset is needed, if reset is needed, Popup a menu to notice user.
|
||||
|
||||
**/
|
||||
VOID
|
||||
BmmSetupResetReminder (
|
||||
VOID
|
||||
)
|
||||
{
|
||||
EFI_INPUT_KEY Key;
|
||||
CHAR16 *StringBuffer1;
|
||||
CHAR16 *StringBuffer2;
|
||||
EFI_STATUS Status;
|
||||
EDKII_FORM_BROWSER_EXTENSION2_PROTOCOL *FormBrowserEx2;
|
||||
|
||||
//
|
||||
// Use BrowserEx2 protocol to check whether reset is required.
|
||||
//
|
||||
Status = gBS->LocateProtocol (&gEdkiiFormBrowserEx2ProtocolGuid, NULL, (VOID **) &FormBrowserEx2);
|
||||
|
||||
//
|
||||
//check any reset required change is applied? if yes, reset system
|
||||
//
|
||||
if (!EFI_ERROR(Status) && FormBrowserEx2->IsResetRequired()) {
|
||||
StringBuffer1 = AllocateZeroPool (MAX_CHAR * sizeof (CHAR16));
|
||||
ASSERT (StringBuffer1 != NULL);
|
||||
StringBuffer2 = AllocateZeroPool (MAX_CHAR * sizeof (CHAR16));
|
||||
ASSERT (StringBuffer2 != NULL);
|
||||
StrCpyS (StringBuffer1, MAX_CHAR, L"Configuration changed. Reset to apply it Now.");
|
||||
StrCpyS (StringBuffer2, MAX_CHAR, L"Press ENTER to reset");
|
||||
//
|
||||
// Popup a menu to notice user
|
||||
//
|
||||
do {
|
||||
CreatePopUp (EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE, &Key, StringBuffer1, StringBuffer2, NULL);
|
||||
} while (Key.UnicodeChar != CHAR_CARRIAGE_RETURN);
|
||||
|
||||
FreePool (StringBuffer1);
|
||||
FreePool (StringBuffer2);
|
||||
|
||||
gRT->ResetSystem (EfiResetCold, EFI_SUCCESS, 0, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
Create a menu entry by given menu type.
|
||||
|
||||
|
@ -883,6 +928,10 @@ BootFromFile (
|
|||
// Since current no boot from removable media directly is allowed */
|
||||
//
|
||||
gST->ConOut->ClearScreen (gST->ConOut);
|
||||
//
|
||||
// Check whether need to reset system.
|
||||
//
|
||||
BmmSetupResetReminder ();
|
||||
|
||||
BmmSetConsoleMode (FALSE);
|
||||
EfiBootManagerBoot (&BootOption);
|
||||
|
|
Loading…
Reference in New Issue