BootMaintenanceManagerUiLib depend on the LeagcyBootMaintUiLib to show the legacy menus. So we need to do the actions related to LegacyUi in BMM after the LeagcyBootMaintUiLib have been initialized. So now : 1). update menus (including legacy menus), 2) re-scan boot options (including legacy boot option) when opening the BMM form. When opening BMM form, the LeagcyBootMaintUiLib must have been initialized.
Cc: Liming Gao <liming....@intel.com> Cc: Eric Dong <eric.d...@intel.com> Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Dandan Bi <dandan...@intel.com> Reviewed-by: Eric Dong <eric.d...@intel.com> --- .../BootMaintenanceManagerUiLib/BootMaintenance.c | 37 ++++++++++++++++++---- .../BootMaintenanceManager.vfr | 12 ++++++- 2 files changed, 41 insertions(+), 8 deletions(-) diff --git a/MdeModulePkg/Library/BootMaintenanceManagerUiLib/BootMaintenance.c b/MdeModulePkg/Library/BootMaintenanceManagerUiLib/BootMaintenance.c index b35e938..e26e9e0 100644 --- a/MdeModulePkg/Library/BootMaintenanceManagerUiLib/BootMaintenance.c +++ b/MdeModulePkg/Library/BootMaintenanceManagerUiLib/BootMaintenance.c @@ -82,10 +82,11 @@ BMM_CALLBACK_DATA gBootMaintenancePrivate = { } }; BMM_CALLBACK_DATA *mBmmCallbackInfo = &gBootMaintenancePrivate; BOOLEAN mAllMenuInit = FALSE; +BOOLEAN mFirstEnterBMMForm = FALSE; /** Init all memu. @param CallbackData The BMM context data. @@ -104,10 +105,20 @@ VOID FreeAllMenu ( VOID ); /** + + Update the menus in the BMM page. + +**/ +VOID +CustomizeMenus ( + VOID + ); + +/** This function will change video resolution and text mode according to defined setup mode or defined boot mode @param IsSetupMode Indicate mode is changed to setup mode or boot mode. @@ -869,18 +880,35 @@ BootMaintCallback ( BM_MENU_ENTRY *NewMenuEntry; BMM_FAKE_NV_DATA *CurrentFakeNVMap; UINTN Index; EFI_DEVICE_PATH_PROTOCOL * File; - if (Action != EFI_BROWSER_ACTION_CHANGING && Action != EFI_BROWSER_ACTION_CHANGED) { + if (Action != EFI_BROWSER_ACTION_CHANGING && Action != EFI_BROWSER_ACTION_CHANGED && Action != EFI_BROWSER_ACTION_FORM_OPEN) { // - // Do nothing for other UEFI Action. Only do call back when data is changed. + // Do nothing for other UEFI Action. Only do call back when data is changed or the form is open. // return EFI_UNSUPPORTED; } Private = BMM_CALLBACK_DATA_FROM_THIS (This); + + if (Action == EFI_BROWSER_ACTION_FORM_OPEN) { + if (!mFirstEnterBMMForm) { + // + // BMMUiLib depends on LegacyUi library to show legacy menus. + // If we want to show Legacy menus correctly in BMM page, + // we must do it after the LegacyUi library has already been initialized. + // Opening the BMM form is the appropriate time that the LegacyUi library has already been initialized. + // So we do the tasks which are related to legacy menus here. + // 1. Update the menus (including legacy munu) show in BootMiantenanceManager page. + // 2. Re-scan the BootOption menus (including the legacy boot option). + // + CustomizeMenus (); + BOpt_GetBootOptions (Private); + mFirstEnterBMMForm = TRUE; + } + } // // Retrive uncommitted data from Form Browser // CurrentFakeNVMap = &Private->BmmFakeNvData; HiiGetBrowserData (&mBootMaintGuid, mBootMaintStorageName, sizeof (BMM_FAKE_NV_DATA), (UINT8 *) CurrentFakeNVMap); @@ -1222,15 +1250,10 @@ InitializeBmmConfig ( GetTerminalAttribute (CallbackData); CallbackData->BmmFakeNvData.ForceReconnect = TRUE; // - // Update the menus. - // - CustomizeMenus (); - - // // Backup Initialize BMM configuartion data to BmmOldFakeNVData // CopyMem (&CallbackData->BmmOldFakeNVData, &CallbackData->BmmFakeNvData, sizeof (BMM_FAKE_NV_DATA)); } diff --git a/MdeModulePkg/Library/BootMaintenanceManagerUiLib/BootMaintenanceManager.vfr b/MdeModulePkg/Library/BootMaintenanceManagerUiLib/BootMaintenanceManager.vfr index d46a3e9..6262c6c 100644 --- a/MdeModulePkg/Library/BootMaintenanceManagerUiLib/BootMaintenanceManager.vfr +++ b/MdeModulePkg/Library/BootMaintenanceManagerUiLib/BootMaintenanceManager.vfr @@ -1,9 +1,9 @@ ///** @file // Boot Maintenance Utility Formset // -// Copyright (c) 2004 - 2015, Intel Corporation. All rights reserved.<BR> +// Copyright (c) 2004 - 2016, 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 // which accompanies this distribution. The full text of the license may be found at // http://opensource.org/licenses/bsd-license.php // @@ -25,10 +25,20 @@ formset name = BmmData, guid = BOOT_MAINT_FORMSET_GUID; form formid = FORM_MAIN_ID, title = STRING_TOKEN(STR_FORM_MAIN_TITLE); + // + // Add this invisable text in order to indicate enter Boot Maintenance Manager form. + // + suppressif TRUE; + text + help = STRING_TOKEN(STR_NONE), + text = STRING_TOKEN(STR_NONE), + flags = INTERACTIVE, + key = 0x0001; + endif; label LABEL_FORM_MAIN_START; // // This is where we will dynamically add a Action type op-code to show // the platform information. -- 1.9.5.msysgit.1 _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel