From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by mx.groups.io with SMTP id smtpd.web08.146.1615425761594885859 for ; Wed, 10 Mar 2021 17:22:42 -0800 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: intel.com, ip: 192.55.52.43, mailfrom: zhiguang.liu@intel.com) IronPort-SDR: pf6z59A6QJIa5WFGA8XGzrL51exHeSOAIVClg8jI4O6P2i4nMZA0geRYbXNTYKlULZGMC/88Kz qWTDQX0HFqUA== X-IronPort-AV: E=McAfee;i="6000,8403,9919"; a="273633512" X-IronPort-AV: E=Sophos;i="5.81,238,1610438400"; d="scan'208";a="273633512" Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by fmsmga105.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 10 Mar 2021 17:22:41 -0800 IronPort-SDR: EMy3wiiEhsA/rsSkgWuocx3Xk4uUqfRZh4kpw2dO8cMjSpBCEk978WyONOMJtuaM7Mvp5DldnK d1xiz9yzJXMw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.81,238,1610438400"; d="scan'208";a="603331789" Received: from fieedk002.ccr.corp.intel.com ([10.239.158.144]) by fmsmga005.fm.intel.com with ESMTP; 10 Mar 2021 17:22:38 -0800 From: "Zhiguang Liu" To: devel@edk2.groups.io Cc: Eric Dong , Liming Gao , Nate DeSimone , Prince Agyeman , Ray Ni , Zhichao Gao Subject: [Patch edk2-platforms V3] Intel/BoardModulePkg: sort load option in the first boot Date: Thu, 11 Mar 2021 09:21:49 +0800 Message-Id: <20210311012149.1042-1-zhiguang.liu@intel.com> X-Mailer: git-send-email 2.30.0.windows.2 MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Currently, load option is only sorted when setup is the first priority in b= oot 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 opti= on in first boot. Cc: Eric Dong Cc: Liming Gao Cc: Nate DeSimone Cc: Prince Agyeman Cc: Ray Ni Cc: Zhichao Gao Signed-off-by: Zhiguang Liu --- Platform/Intel/BoardModulePkg/Library/BoardBdsHookLib/BoardBdsHookLib.c | = 72 +++++++++++++++++++++++++++++++++++++----------------------------------- 1 file changed, 37 insertions(+), 35 deletions(-) diff --git a/Platform/Intel/BoardModulePkg/Library/BoardBdsHookLib/BoardBds= HookLib.c b/Platform/Intel/BoardModulePkg/Library/BoardBdsHookLib/BoardBdsH= ookLib.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 @@ =0D #include "BoardBdsHook.h"=0D =0D +#define IS_FIRST_BOOT_VAR_NAME L"IsFirstBoot"=0D +=0D GLOBAL_REMOVE_IF_UNREFERENCED EFI_BOOT_MODE gBootMode;=0D BOOLEAN gPPRequireUIConfirm;=0D extern UINTN mBootMenuOptionNumber;=0D @@ -992,37 +994,6 @@ ConnectSequence ( EfiBootManagerConnectAll ();=0D }=0D =0D -=0D -/**=0D - The function is to consider the boot order which is not in our expectati= on.=0D - In the case that we need to re-sort the boot option.=0D -=0D - @retval TRUE Need to sort Boot Option.=0D - @retval FALSE Don't need to sort Boot Option.=0D -**/=0D -BOOLEAN=0D -IsNeedSortBootOption (=0D - VOID=0D - )=0D -{=0D - EFI_BOOT_MANAGER_LOAD_OPTION *BootOptions;=0D - UINTN BootOptionCount;=0D -=0D - BootOptions =3D EfiBootManagerGetLoadOptions (&BootOptionCount, LoadOpti= onTypeBoot);=0D -=0D - //=0D - // If setup is the first priority in boot option, we need to sort boot o= ption.=0D - //=0D - if ((BootOptionCount > 1) &&=0D - (((StrnCmp (BootOptions->Description, L"Enter Setup", StrLen (L"Enter = Setup"))) =3D=3D 0) ||=0D - ((StrnCmp (BootOptions->Description, L"BootManagerMenuApp", StrLen (L"= BootManagerMenuApp"))) =3D=3D 0))) {=0D - return TRUE;=0D - }=0D -=0D - return FALSE;=0D -}=0D -=0D -=0D /**=0D Connects Root Bridge=0D **/=0D @@ -1332,6 +1303,9 @@ BdsAfterConsoleReadyBeforeBootOptionCallback ( )=0D {=0D EFI_BOOT_MODE LocalBootMode;=0D + EFI_STATUS Status;=0D + BOOLEAN IsFirstBoot;=0D + UINTN DataSize;=0D =0D DEBUG ((DEBUG_INFO, "Event gBdsAfterConsoleReadyBeforeBootOptionEvent ca= llback starts\n"));=0D //=0D @@ -1376,14 +1350,42 @@ BdsAfterConsoleReadyBeforeBootOptionCallback ( //=0D // PXE boot option may appear after boot option enumeration=0D //=0D +=0D + EfiBootManagerRefreshAllBootOption ();=0D + DataSize =3D sizeof (BOOLEAN);=0D + Status =3D gRT->GetVariable (=0D + IS_FIRST_BOOT_VAR_NAME,=0D + &gEfiCallerIdGuid,=0D + NULL,=0D + &DataSize,=0D + &IsFirstBoot=0D + );=0D + if (EFI_ERROR (Status)) {=0D + //=0D + // If can't find the variable, see it as the first boot=0D + //=0D + IsFirstBoot =3D TRUE;=0D + }=0D +=0D + if (IsFirstBoot) {=0D + //=0D + // In the first boot, sort the boot option=0D + //=0D + EfiBootManagerSortLoadOptionVariable (LoadOptionTypeBoot, CompareB= ootOption);=0D + IsFirstBoot =3D FALSE;=0D + Status =3D gRT->SetVariable (=0D + IS_FIRST_BOOT_VAR_NAME,=0D + &gEfiCallerIdGuid,=0D + EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVI= CE_ACCESS,=0D + sizeof (BOOLEAN),=0D + &IsFirstBoot=0D + );=0D + }=0D +=0D break;=0D }=0D =0D Print (L"Press F7 for BootMenu!\n");=0D =0D - EfiBootManagerRefreshAllBootOption ();=0D =0D - if (IsNeedSortBootOption()) {=0D - EfiBootManagerSortLoadOptionVariable (LoadOptionTypeBoot, CompareBootO= ption);=0D - }=0D }=0D --=20 2.30.0.windows.2