From: "Zhiguang Liu" <zhiguang.liu@intel.com>
To: devel@edk2.groups.io
Cc: Eric Dong <eric.dong@intel.com>,
Liming Gao <gaoliming@byosoft.com.cn>,
Nate DeSimone <nathaniel.l.desimone@intel.com>,
Prince Agyeman <prince.agyeman@intel.com>,
Ray Ni <ray.ni@intel.com>, Zhichao Gao <zhichao.gao@intel.com>
Subject: [Patch edk2-platforms V2] Intel/BoardModulePkg: sort load option in the first boot
Date: Wed, 10 Mar 2021 16:20:14 +0800 [thread overview]
Message-ID: <20210310082014.700-1-zhiguang.liu@intel.com> (raw)
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.dong@intel.com>
Cc: Liming Gao <gaoliming@byosoft.com.cn>
Cc: Nate DeSimone <nathaniel.l.desimone@intel.com>
Cc: Prince Agyeman <prince.agyeman@intel.com>
Cc: Ray Ni <ray.ni@intel.com>
Cc: Zhichao Gao <zhichao.gao@intel.com>
Signed-off-by: Zhiguang Liu <zhiguang.liu@intel.com>
---
Platform/Intel/BoardModulePkg/Library/BoardBdsHookLib/BoardBdsHookLib.c | 70 +++++++++++++++++++++++++++++++++++-----------------------------------
1 file changed, 35 insertions(+), 35 deletions(-)
diff --git a/Platform/Intel/BoardModulePkg/Library/BoardBdsHookLib/BoardBdsHookLib.c b/Platform/Intel/BoardModulePkg/Library/BoardBdsHookLib/BoardBdsHookLib.c
index d7612fb80a..5b65e5f3e9 100644
--- a/Platform/Intel/BoardModulePkg/Library/BoardBdsHookLib/BoardBdsHookLib.c
+++ b/Platform/Intel/BoardModulePkg/Library/BoardBdsHookLib/BoardBdsHookLib.c
@@ -992,37 +992,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 +1301,9 @@ BdsAfterConsoleReadyBeforeBootOptionCallback (
)
{
EFI_BOOT_MODE LocalBootMode;
+ EFI_STATUS Status;
+ BOOLEAN IsFirstBoot;
+ UINTN DataSize;
DEBUG ((DEBUG_INFO, "Event gBdsAfterConsoleReadyBeforeBootOptionEvent callback starts\n"));
//
@@ -1376,14 +1348,42 @@ BdsAfterConsoleReadyBeforeBootOptionCallback (
//
// PXE boot option may appear after boot option enumeration
//
+
+ EfiBootManagerRefreshAllBootOption ();
+
+ Status = gRT->GetVariable (
+ L"IsFirstBoot",
+ &gEfiCallerIdGuid,
+ NULL,
+ &DataSize,
+ &IsFirstBoot
+ );
+ if (EFI_ERROR (Status)) {
+ //
+ // If can't find the variable, see it as the first boot
+ //
+ IsFirstBoot = TRUE;
+ }
+
+ if (IsFirstBoot == TRUE) {
+ //
+ // In the first boot, sort the boot option
+ //
+ EfiBootManagerSortLoadOptionVariable (LoadOptionTypeBoot, CompareBootOption);
+ IsFirstBoot = FALSE;
+ Status = gRT->SetVariable (
+ L"IsFirstBoot",
+ &gEfiCallerIdGuid,
+ EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_BOOTSERVICE_ACCESS,
+ 1,
+ &IsFirstBoot
+ );
+ }
+
break;
}
Print (L"Press F7 for BootMenu!\n");
- EfiBootManagerRefreshAllBootOption ();
- if (IsNeedSortBootOption()) {
- EfiBootManagerSortLoadOptionVariable (LoadOptionTypeBoot, CompareBootOption);
- }
}
--
2.30.0.windows.2
next reply other threads:[~2021-03-10 8:20 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-03-10 8:20 Zhiguang Liu [this message]
2021-03-10 9:55 ` [Patch edk2-platforms V2] Intel/BoardModulePkg: sort load option in the first boot Ni, Ray
2021-03-15 1:36 ` 回复: " gaoliming
2021-03-16 1:56 ` [edk2-devel] " Zhiguang Liu
2021-03-17 3:00 ` 回复: " gaoliming
2021-03-17 4:04 ` Ni, Ray
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210310082014.700-1-zhiguang.liu@intel.com \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox