Reviewed-by: Eric Dong <eric.d...@intel.com>

-----Original Message-----
From: Liu, Zhiguang <zhiguang....@intel.com> 
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: [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/BoardBdsHook
+++ Lib.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 (#72659): https://edk2.groups.io/g/devel/message/72659
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]
-=-=-=-=-=-=-=-=-=-=-=-


Reply via email to