Reviewed-by: Ray Ni <ray...@intel.com> > -----Original Message----- > From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Zhiguang Liu > Sent: Thursday, March 11, 2021 9:22 AM > To: devel@edk2.groups.io > Cc: Dong, Eric <eric.d...@intel.com>; Liming Gao <gaolim...@byosoft.com.cn>; > Desimone, Nathaniel L > <nathaniel.l.desim...@intel.com>; Agyeman, Prince <prince.agye...@intel.com>; > Ni, Ray <ray...@intel.com>; Gao, Zhichao > <zhichao....@intel.com> > Subject: [edk2-devel] [Patch edk2-platforms V3] Intel/BoardModulePkg: sort > load option in the first boot > > Currently, load option is only sorted when setup is the first priority in boot > option. However, Below change in UefiBootManagerLib puts setup in the end, > which > causes the sort function won't be called. > MdeModulePkg/UefiBootManagerLib: Put BootMenu at the end of BootOrder > SHA-1: 7f34681c488aee2563eaa2afcc6a2c8aa7c5b912 > > This patch will set a NV variable in the first boot, and sort the boot option > in first boot. > > Cc: Eric Dong <eric.d...@intel.com> > Cc: Liming Gao <gaolim...@byosoft.com.cn> > Cc: Nate DeSimone <nathaniel.l.desim...@intel.com> > Cc: Prince Agyeman <prince.agye...@intel.com> > Cc: Ray Ni <ray...@intel.com> > Cc: Zhichao Gao <zhichao....@intel.com> > > Signed-off-by: Zhiguang Liu <zhiguang....@intel.com> > --- > Platform/Intel/BoardModulePkg/Library/BoardBdsHookLib/BoardBdsHookLib.c | 72 > +++++++++++++++++++++++++++++++++++++----------------------------------- > 1 file changed, 37 insertions(+), 35 deletions(-) > > diff --git > a/Platform/Intel/BoardModulePkg/Library/BoardBdsHookLib/BoardBdsHookLib.c > b/Platform/Intel/BoardModulePkg/Library/BoardBdsHookLib/BoardBdsHookLib.c > index d7612fb80a..a37139a007 100644 > --- a/Platform/Intel/BoardModulePkg/Library/BoardBdsHookLib/BoardBdsHookLib.c > +++ b/Platform/Intel/BoardModulePkg/Library/BoardBdsHookLib/BoardBdsHookLib.c > @@ -20,6 +20,8 @@ > > > #include "BoardBdsHook.h" > > > > +#define IS_FIRST_BOOT_VAR_NAME L"IsFirstBoot" > > + > > GLOBAL_REMOVE_IF_UNREFERENCED EFI_BOOT_MODE gBootMode; > > BOOLEAN gPPRequireUIConfirm; > > extern UINTN mBootMenuOptionNumber; > > @@ -992,37 +994,6 @@ ConnectSequence ( > EfiBootManagerConnectAll (); > > } > > > > - > > -/** > > - The function is to consider the boot order which is not in our expectation. > > - In the case that we need to re-sort the boot option. > > - > > - @retval TRUE Need to sort Boot Option. > > - @retval FALSE Don't need to sort Boot Option. > > -**/ > > -BOOLEAN > > -IsNeedSortBootOption ( > > - VOID > > - ) > > -{ > > - EFI_BOOT_MANAGER_LOAD_OPTION *BootOptions; > > - UINTN BootOptionCount; > > - > > - BootOptions = EfiBootManagerGetLoadOptions (&BootOptionCount, > LoadOptionTypeBoot); > > - > > - // > > - // If setup is the first priority in boot option, we need to sort boot > option. > > - // > > - if ((BootOptionCount > 1) && > > - (((StrnCmp (BootOptions->Description, L"Enter Setup", StrLen (L"Enter > Setup"))) == 0) || > > - ((StrnCmp (BootOptions->Description, L"BootManagerMenuApp", StrLen > (L"BootManagerMenuApp"))) == 0))) { > > - return TRUE; > > - } > > - > > - return FALSE; > > -} > > - > > - > > /** > > Connects Root Bridge > > **/ > > @@ -1332,6 +1303,9 @@ BdsAfterConsoleReadyBeforeBootOptionCallback ( > ) > > { > > EFI_BOOT_MODE LocalBootMode; > > + EFI_STATUS Status; > > + BOOLEAN IsFirstBoot; > > + UINTN DataSize; > > > > DEBUG ((DEBUG_INFO, "Event gBdsAfterConsoleReadyBeforeBootOptionEvent > callback starts\n")); > > // > > @@ -1376,14 +1350,42 @@ BdsAfterConsoleReadyBeforeBootOptionCallback ( > // > > // PXE boot option may appear after boot option enumeration > > // > > + > > + EfiBootManagerRefreshAllBootOption (); > > + DataSize = sizeof (BOOLEAN); > > + Status = gRT->GetVariable ( > > + IS_FIRST_BOOT_VAR_NAME, > > + &gEfiCallerIdGuid, > > + NULL, > > + &DataSize, > > + &IsFirstBoot > > + ); > > + if (EFI_ERROR (Status)) { > > + // > > + // If can't find the variable, see it as the first boot > > + // > > + IsFirstBoot = TRUE; > > + } > > + > > + if (IsFirstBoot) { > > + // > > + // In the first boot, sort the boot option > > + // > > + EfiBootManagerSortLoadOptionVariable (LoadOptionTypeBoot, > CompareBootOption); > > + IsFirstBoot = FALSE; > > + Status = gRT->SetVariable ( > > + IS_FIRST_BOOT_VAR_NAME, > > + &gEfiCallerIdGuid, > > + EFI_VARIABLE_NON_VOLATILE | > EFI_VARIABLE_BOOTSERVICE_ACCESS, > > + sizeof (BOOLEAN), > > + &IsFirstBoot > > + ); > > + } > > + > > break; > > } > > > > Print (L"Press F7 for BootMenu!\n"); > > > > - EfiBootManagerRefreshAllBootOption (); > > > > - if (IsNeedSortBootOption()) { > > - EfiBootManagerSortLoadOptionVariable (LoadOptionTypeBoot, > CompareBootOption); > > - } > > } > > -- > 2.30.0.windows.2 > > > > -=-=-=-=-=-= > Groups.io Links: You receive all messages sent to this group. > View/Reply Online (#72653): https://edk2.groups.io/g/devel/message/72653 > Mute This Topic: https://groups.io/mt/81243873/1712937 > Group Owner: devel+ow...@edk2.groups.io > Unsubscribe: https://edk2.groups.io/g/devel/unsub [ray...@intel.com] > -=-=-=-=-=-= >
-=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#72654): https://edk2.groups.io/g/devel/message/72654 Mute This Topic: https://groups.io/mt/81243873/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-