public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
* [Patch edk2-platforms V3] Intel/BoardModulePkg: sort load option in the first boot
@ 2021-03-11  1:21 Zhiguang Liu
  2021-03-11  1:25 ` [edk2-devel] " Ni, Ray
  2021-03-11  2:15 ` Dong, Eric
  0 siblings, 2 replies; 3+ messages in thread
From: Zhiguang Liu @ 2021-03-11  1:21 UTC (permalink / raw)
  To: devel
  Cc: Eric Dong, Liming Gao, Nate DeSimone, Prince Agyeman, Ray Ni,
	Zhichao Gao

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 | 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


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [edk2-devel] [Patch edk2-platforms V3] Intel/BoardModulePkg: sort load option in the first boot
  2021-03-11  1:21 [Patch edk2-platforms V3] Intel/BoardModulePkg: sort load option in the first boot Zhiguang Liu
@ 2021-03-11  1:25 ` Ni, Ray
  2021-03-11  2:15 ` Dong, Eric
  1 sibling, 0 replies; 3+ messages in thread
From: Ni, Ray @ 2021-03-11  1:25 UTC (permalink / raw)
  To: devel@edk2.groups.io, Liu, Zhiguang
  Cc: Dong, Eric, Liming Gao, Desimone, Nathaniel L, Agyeman, Prince,
	Gao, Zhichao

Reviewed-by: Ray Ni <ray.ni@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.dong@intel.com>; Liming Gao <gaoliming@byosoft.com.cn>; Desimone, Nathaniel L
> <nathaniel.l.desimone@intel.com>; Agyeman, Prince <prince.agyeman@intel.com>; Ni, Ray <ray.ni@intel.com>; Gao, Zhichao
> <zhichao.gao@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.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 | 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+owner@edk2.groups.io
> Unsubscribe: https://edk2.groups.io/g/devel/unsub [ray.ni@intel.com]
> -=-=-=-=-=-=
> 


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [Patch edk2-platforms V3] Intel/BoardModulePkg: sort load option in the first boot
  2021-03-11  1:21 [Patch edk2-platforms V3] Intel/BoardModulePkg: sort load option in the first boot Zhiguang Liu
  2021-03-11  1:25 ` [edk2-devel] " Ni, Ray
@ 2021-03-11  2:15 ` Dong, Eric
  1 sibling, 0 replies; 3+ messages in thread
From: Dong, Eric @ 2021-03-11  2:15 UTC (permalink / raw)
  To: Liu, Zhiguang, devel@edk2.groups.io
  Cc: Liming Gao, Desimone, Nathaniel L, Agyeman, Prince, Ni, Ray,
	Gao, Zhichao

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

-----Original Message-----
From: Liu, Zhiguang <zhiguang.liu@intel.com> 
Sent: Thursday, March 11, 2021 9:22 AM
To: devel@edk2.groups.io
Cc: Dong, Eric <eric.dong@intel.com>; Liming Gao <gaoliming@byosoft.com.cn>; Desimone, Nathaniel L <nathaniel.l.desimone@intel.com>; Agyeman, Prince <prince.agyeman@intel.com>; Ni, Ray <ray.ni@intel.com>; Gao, Zhichao <zhichao.gao@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.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 | 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


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2021-03-11  2:15 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-03-11  1:21 [Patch edk2-platforms V3] Intel/BoardModulePkg: sort load option in the first boot Zhiguang Liu
2021-03-11  1:25 ` [edk2-devel] " Ni, Ray
2021-03-11  2:15 ` Dong, Eric

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox