From 9e0e49fc76ce84779b34cf11a4bced3911df0391 Mon Sep 17 00:00:00 2001 From: dtang2 Date: Wed, 8 Nov 2006 03:12:19 +0000 Subject: Bug fix for "Tiano BIOS needs to implement an automatic reboot when BIOS settings are changed" git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@1913 6f19259b-4bc3-4df7-8a09-765794883524 --- .../Dxe/PlatformBds/Generic/BootMaint/BootMaint.c | 15 ++++++++++++-- .../Dxe/PlatformBds/Generic/BootMngr/BootManager.c | 24 +++++++++++++++++++++- .../PlatformBds/Generic/DeviceMngr/DeviceManager.c | 14 +++++++++++-- EdkNt32Pkg/Dxe/PlatformBds/Generic/FrontPage.c | 15 +++++++++++++- 4 files changed, 62 insertions(+), 6 deletions(-) (limited to 'EdkNt32Pkg/Dxe') diff --git a/EdkNt32Pkg/Dxe/PlatformBds/Generic/BootMaint/BootMaint.c b/EdkNt32Pkg/Dxe/PlatformBds/Generic/BootMaint/BootMaint.c index c4b3211dfd..6eefa0bd30 100644 --- a/EdkNt32Pkg/Dxe/PlatformBds/Generic/BootMaint/BootMaint.c +++ b/EdkNt32Pkg/Dxe/PlatformBds/Generic/BootMaint/BootMaint.c @@ -1230,6 +1230,7 @@ Returns: UINTN Index; BM_MENU_ENTRY *NewMenuEntry; BM_FILE_CONTEXT *NewFileContext; + BOOLEAN BootMaintMenuResetRequired; Location = NULL; Index = 0; @@ -1247,6 +1248,7 @@ Returns: while (1) { UpdatePageId (CallbackData, FORM_MAIN_ID); + BootMaintMenuResetRequired = FALSE; Status = FormConfig->SendForm ( FormConfig, TRUE, @@ -1256,9 +1258,13 @@ Returns: NULL, (UINT8 *) CallbackData->BmmFakeNvData, NULL, - NULL + &BootMaintMenuResetRequired ); + if (BootMaintMenuResetRequired) { + EnableResetRequired (); + } + ReclaimStringDepository (); // @@ -1267,6 +1273,7 @@ Returns: if (INACTIVE_STATE != CallbackData->FeCurrentState) { UpdateFileExplorer (CallbackData, 0); + BootMaintMenuResetRequired = FALSE; Status = FormConfig->SendForm ( FormConfig, TRUE, @@ -1276,9 +1283,13 @@ Returns: NULL, NULL, NULL, - NULL + &BootMaintMenuResetRequired ); + if (BootMaintMenuResetRequired) { + EnableResetRequired (); + } + CallbackData->FeCurrentState = INACTIVE_STATE; CallbackData->FeDisplayContext = UNKNOWN_CONTEXT; ReclaimStringDepository (); diff --git a/EdkNt32Pkg/Dxe/PlatformBds/Generic/BootMngr/BootManager.c b/EdkNt32Pkg/Dxe/PlatformBds/Generic/BootMngr/BootManager.c index d90cfaa0a8..23b8789617 100644 --- a/EdkNt32Pkg/Dxe/PlatformBds/Generic/BootMngr/BootManager.c +++ b/EdkNt32Pkg/Dxe/PlatformBds/Generic/BootMngr/BootManager.c @@ -139,6 +139,7 @@ Returns: UINT8 *Location; EFI_GUID BmGuid; LIST_ENTRY BdsBootOptionList; + BOOLEAN BootMngrMenuResetRequired; gOption = NULL; InitializeListHead (&BdsBootOptionList); @@ -299,13 +300,34 @@ Returns: ASSERT (gBrowser); - gBrowser->SendForm (gBrowser, TRUE, &gBootManagerHandle, 1, NULL, NULL, NULL, NULL, NULL); + BootMngrMenuResetRequired = FALSE; + gBrowser->SendForm ( + gBrowser, + TRUE, + &gBootManagerHandle, + 1, + NULL, + NULL, + NULL, + NULL, + &BootMngrMenuResetRequired + ); + + if (BootMngrMenuResetRequired) { + EnableResetRequired (); + } Hii->ResetStrings (Hii, gBootManagerHandle); if (gOption == NULL) { return ; } + + // + //Will leave browser, check any reset required change is applied? if yes, reset system + // + SetupResetReminder (); + // // BugBug: This code looks repeated from the BDS. Need to save code space. // diff --git a/EdkNt32Pkg/Dxe/PlatformBds/Generic/DeviceMngr/DeviceManager.c b/EdkNt32Pkg/Dxe/PlatformBds/Generic/DeviceMngr/DeviceManager.c index 0e73a4e3fe..3f648b7de6 100644 --- a/EdkNt32Pkg/Dxe/PlatformBds/Generic/DeviceMngr/DeviceManager.c +++ b/EdkNt32Pkg/Dxe/PlatformBds/Generic/DeviceMngr/DeviceManager.c @@ -197,6 +197,7 @@ Returns: UINTN VideoOptionSize; EFI_HII_HANDLE *HiiHandles; UINT16 HandleBufferLength; + BOOLEAN BootDeviceMngrMenuResetRequired; IfrOptionList = NULL; VideoOption = NULL; @@ -435,6 +436,7 @@ Returns: gBS->FreePool (IfrOptionList); } + BootDeviceMngrMenuResetRequired = FALSE; Status = gBrowser->SendForm ( gBrowser, TRUE, // Use the database @@ -444,9 +446,13 @@ Returns: FPCallbackInfo.CallbackHandle, (UINT8 *) &FPCallbackInfo.Data, NULL, - NULL + &BootDeviceMngrMenuResetRequired ); + if (BootDeviceMngrMenuResetRequired) { + EnableResetRequired (); + } + Hii->ResetStrings (Hii, FPCallbackInfo.DevMgrHiiHandle); // @@ -454,6 +460,7 @@ Returns: // a target to display // if (gCallbackKey != 0 && gCallbackKey < 0x2000) { + BootDeviceMngrMenuResetRequired = FALSE; Status = gBrowser->SendForm ( gBrowser, TRUE, // Use the database @@ -463,9 +470,12 @@ Returns: NULL, // This is the handle that the interface to the callback was installed on NULL, NULL, - NULL + &BootDeviceMngrMenuResetRequired ); + if (BootDeviceMngrMenuResetRequired) { + EnableResetRequired (); + } // // Force return to Device Manager // diff --git a/EdkNt32Pkg/Dxe/PlatformBds/Generic/FrontPage.c b/EdkNt32Pkg/Dxe/PlatformBds/Generic/FrontPage.c index 69b2fb5078..45992db02d 100644 --- a/EdkNt32Pkg/Dxe/PlatformBds/Generic/FrontPage.c +++ b/EdkNt32Pkg/Dxe/PlatformBds/Generic/FrontPage.c @@ -417,6 +417,7 @@ Returns: { EFI_STATUS Status; UINT8 FakeNvRamMap[1]; + BOOLEAN FrontPageMenuResetRequired; // // Begin waiting for USER INPUT @@ -427,6 +428,7 @@ Returns: ); FakeNvRamMap[0] = (UINT8) mLastSelection; + FrontPageMenuResetRequired = FALSE; Status = gBrowser->SendForm ( gBrowser, TRUE, // Use the database @@ -436,8 +438,14 @@ Returns: FrontPageCallbackHandle, // This is the handle that the interface to the callback was installed on FakeNvRamMap, NULL, - NULL + &FrontPageMenuResetRequired ); + // + // Check whether user change any option setting which needs a reset to be effective + // + if (FrontPageMenuResetRequired) { + EnableResetRequired (); + } Hii->ResetStrings (Hii, gFrontPageHandle); @@ -877,6 +885,11 @@ Returns: } while ((Status == EFI_SUCCESS) && (gCallbackKey != 1)); + // + //Will leave browser, check any reset required change is applied? if yes, reset system + // + SetupResetReminder (); + // // Automatically load current entry // Note: The following lines of code only execute when Auto boot -- cgit v1.2.3