[PATCH 1/2] MdeModulePkg/UefiBootManagerLib: Add Pcd to prioritize internal devices


Sean Rhodes
 

From: Matt DeVillier <matt.devillier@...>

Add Pcd to allow configuring internal devices to be prioritized over
internally-attached USB devices, such as card readers, over SATA, NVMe
and eMMC drives.

Cc: Jian J Wang <jian.j.wang@...>
Cc: Liming Gao <gaoliming@...>
Signed-off-by: Matt DeVillier <matt.devillier@...>
Signed-off-by: Sean Rhodes <sean@...>
---
MdeModulePkg/Library/UefiBootManagerLib/BmBoot.c | 10 ++++++++--
.../Library/UefiBootManagerLib/UefiBootManagerLib.inf | 1 +
MdeModulePkg/MdeModulePkg.dec | 4 ++++
MdeModulePkg/MdeModulePkg.uni | 4 ++++
4 files changed, 17 insertions(+), 2 deletions(-)

diff --git a/MdeModulePkg/Library/UefiBootManagerLib/BmBoot.c b/MdeModulePk=
g/Library/UefiBootManagerLib/BmBoot.c
index 962892d38f..28c3cff471 100644
--- a/MdeModulePkg/Library/UefiBootManagerLib/BmBoot.c
+++ b/MdeModulePkg/Library/UefiBootManagerLib/BmBoot.c
@@ -2214,8 +2214,14 @@ BmEnumerateBootOptions (
//=0D
// Skip the fixed block io then the removable block io=0D
//=0D
- if (BlkIo->Media->RemovableMedia =3D=3D ((Removable =3D=3D 0) ? FALS=
E : TRUE)) {=0D
- continue;=0D
+ if (FixedPcdGetBool (PcdPrioritizeInternal)) {=0D
+ if (BlkIo->Media->RemovableMedia =3D=3D (Removable =3D=3D 0)) {=0D
+ continue;=0D
+ }=0D
+ } else {=0D
+ if (BlkIo->Media->RemovableMedia =3D=3D ((Removable =3D=3D 0) ? FA=
LSE : TRUE)) {=0D
+ continue;=0D
+ }=0D
}=0D
=0D
Description =3D BmGetBootDescription (Handles[Index]);=0D
diff --git a/MdeModulePkg/Library/UefiBootManagerLib/UefiBootManagerLib.inf=
b/MdeModulePkg/Library/UefiBootManagerLib/UefiBootManagerLib.inf
index fe05d5f1cc..207420e334 100644
--- a/MdeModulePkg/Library/UefiBootManagerLib/UefiBootManagerLib.inf
+++ b/MdeModulePkg/Library/UefiBootManagerLib/UefiBootManagerLib.inf
@@ -119,3 +119,4 @@
gEfiMdeModulePkgTokenSpaceGuid.PcdBootManagerMenuFile =
## CONSUMES=0D
gEfiMdeModulePkgTokenSpaceGuid.PcdDriverHealthConfigureForm =
## SOMETIMES_CONSUMES=0D
gEfiMdeModulePkgTokenSpaceGuid.PcdMaxRepairCount =
## CONSUMES=0D
+ gEfiMdeModulePkgTokenSpaceGuid.PcdPrioritizeInternal=0D
diff --git a/MdeModulePkg/MdeModulePkg.dec b/MdeModulePkg/MdeModulePkg.dec
index 40601c9583..8b8b1f7033 100644
--- a/MdeModulePkg/MdeModulePkg.dec
+++ b/MdeModulePkg/MdeModulePkg.dec
@@ -1563,6 +1563,10 @@
# @Prompt SD/MMC Host Controller Operations Timeout (us).=0D
gEfiMdeModulePkgTokenSpaceGuid.PcdSdMmcGenericTimeoutValue|1000000|UINT3=
2|0x00000031=0D
=0D
+ ## Inditicates if internal devices will be prioritized over external dev=
ices.=0D
+ # @prompt Prioritize internal devices.=0D
+ gEfiMdeModulePkgTokenSpaceGuid.PcdPrioritizeInternal|FALSE|BOOLEAN|0x000=
00032=0D
+=0D
[PcdsPatchableInModule, PcdsDynamic, PcdsDynamicEx]=0D
## This PCD defines the Console output row. The default value is 25 acco=
rding to UEFI spec.=0D
# This PCD could be set to 0 then console output would be at max column=
and max row.=0D
diff --git a/MdeModulePkg/MdeModulePkg.uni b/MdeModulePkg/MdeModulePkg.uni
index b070f15ff2..7b8606f091 100644
--- a/MdeModulePkg/MdeModulePkg.uni
+++ b/MdeModulePkg/MdeModulePkg.uni
@@ -1177,6 +1177,10 @@
=0D
#string STR_gEfiMdeModulePkgTokenSpaceGuid_PcdSdMmcGenericTimeoutValue_HEL=
P #language en-US "Indicates the default timeout value for SD/MMC Host Co=
ntroller operations in microseconds."=0D
=0D
+#string STR_gEfiMdeModulePkgTokenSpaceGuid_PcdPrioritizeInternal_PROMPT #l=
anguage en-US "Enable booting from internal devices before external devices=
."=0D
+=0D
+#string STR_gEfiMdeModulePkgTokenSpaceGuid_PcdPrioritizeInternal_HELP #l=
anguage en-US "Indicates the if internal devices will be prioritized in boo=
t order."=0D
+=0D
#string STR_gEfiMdeModulePkgTokenSpaceGuid_PcdCodRelocationDevPath_PROMPT =
#language en-US "Capsule On Disk relocation device path."=0D
=0D
#string STR_gEfiMdeModulePkgTokenSpaceGuid_PcdCodRelocationDevPath_HELP #=
language en-US "Full device path of platform specific device to store Cap=
sule On Disk temp relocation file.<BR>"=0D
--=20
2.32.0


Sheng Lean Tan
 

Hi Jian J/Liming,
Any update on this?


Ni, Ray
 

Sean,
Can you use EfiBootManagerSortLoadOptionVariable() to sort the boot options from PlatformBootManagerLib?

-----Original Message-----
From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Sean Rhodes
Sent: Monday, March 21, 2022 6:04 PM
To: devel@edk2.groups.io
Cc: Matt DeVillier <matt.devillier@...>; Wang, Jian J <jian.j.wang@...>; Gao, Liming
<gaoliming@...>; Rhodes, Sean <sean@...>
Subject: [edk2-devel] [PATCH 1/2] MdeModulePkg/UefiBootManagerLib: Add Pcd to prioritize internal devices

From: Matt DeVillier <matt.devillier@...>

Add Pcd to allow configuring internal devices to be prioritized over
internally-attached USB devices, such as card readers, over SATA, NVMe
and eMMC drives.

Cc: Jian J Wang <jian.j.wang@...>
Cc: Liming Gao <gaoliming@...>
Signed-off-by: Matt DeVillier <matt.devillier@...>
Signed-off-by: Sean Rhodes <sean@...>
---
MdeModulePkg/Library/UefiBootManagerLib/BmBoot.c | 10 ++++++++--
.../Library/UefiBootManagerLib/UefiBootManagerLib.inf | 1 +
MdeModulePkg/MdeModulePkg.dec | 4 ++++
MdeModulePkg/MdeModulePkg.uni | 4 ++++
4 files changed, 17 insertions(+), 2 deletions(-)

diff --git a/MdeModulePkg/Library/UefiBootManagerLib/BmBoot.c b/MdeModulePkg/Library/UefiBootManagerLib/BmBoot.c
index 962892d38f..28c3cff471 100644
--- a/MdeModulePkg/Library/UefiBootManagerLib/BmBoot.c
+++ b/MdeModulePkg/Library/UefiBootManagerLib/BmBoot.c
@@ -2214,8 +2214,14 @@ BmEnumerateBootOptions (
//

// Skip the fixed block io then the removable block io

//

- if (BlkIo->Media->RemovableMedia == ((Removable == 0) ? FALSE : TRUE)) {

- continue;

+ if (FixedPcdGetBool (PcdPrioritizeInternal)) {

+ if (BlkIo->Media->RemovableMedia == (Removable == 0)) {

+ continue;

+ }

+ } else {

+ if (BlkIo->Media->RemovableMedia == ((Removable == 0) ? FALSE : TRUE)) {

+ continue;

+ }

}



Description = BmGetBootDescription (Handles[Index]);

diff --git a/MdeModulePkg/Library/UefiBootManagerLib/UefiBootManagerLib.inf
b/MdeModulePkg/Library/UefiBootManagerLib/UefiBootManagerLib.inf
index fe05d5f1cc..207420e334 100644
--- a/MdeModulePkg/Library/UefiBootManagerLib/UefiBootManagerLib.inf
+++ b/MdeModulePkg/Library/UefiBootManagerLib/UefiBootManagerLib.inf
@@ -119,3 +119,4 @@
gEfiMdeModulePkgTokenSpaceGuid.PcdBootManagerMenuFile ## CONSUMES

gEfiMdeModulePkgTokenSpaceGuid.PcdDriverHealthConfigureForm ## SOMETIMES_CONSUMES

gEfiMdeModulePkgTokenSpaceGuid.PcdMaxRepairCount ## CONSUMES

+ gEfiMdeModulePkgTokenSpaceGuid.PcdPrioritizeInternal

diff --git a/MdeModulePkg/MdeModulePkg.dec b/MdeModulePkg/MdeModulePkg.dec
index 40601c9583..8b8b1f7033 100644
--- a/MdeModulePkg/MdeModulePkg.dec
+++ b/MdeModulePkg/MdeModulePkg.dec
@@ -1563,6 +1563,10 @@
# @Prompt SD/MMC Host Controller Operations Timeout (us).

gEfiMdeModulePkgTokenSpaceGuid.PcdSdMmcGenericTimeoutValue|1000000|UINT32|0x00000031



+ ## Inditicates if internal devices will be prioritized over external devices.

+ # @prompt Prioritize internal devices.

+ gEfiMdeModulePkgTokenSpaceGuid.PcdPrioritizeInternal|FALSE|BOOLEAN|0x00000032

+

[PcdsPatchableInModule, PcdsDynamic, PcdsDynamicEx]

## This PCD defines the Console output row. The default value is 25 according to UEFI spec.

# This PCD could be set to 0 then console output would be at max column and max row.

diff --git a/MdeModulePkg/MdeModulePkg.uni b/MdeModulePkg/MdeModulePkg.uni
index b070f15ff2..7b8606f091 100644
--- a/MdeModulePkg/MdeModulePkg.uni
+++ b/MdeModulePkg/MdeModulePkg.uni
@@ -1177,6 +1177,10 @@


#string STR_gEfiMdeModulePkgTokenSpaceGuid_PcdSdMmcGenericTimeoutValue_HELP #language en-US "Indicates the
default timeout value for SD/MMC Host Controller operations in microseconds."



+#string STR_gEfiMdeModulePkgTokenSpaceGuid_PcdPrioritizeInternal_PROMPT #language en-US "Enable booting from
internal devices before external devices."

+

+#string STR_gEfiMdeModulePkgTokenSpaceGuid_PcdPrioritizeInternal_HELP #language en-US "Indicates the if internal
devices will be prioritized in boot order."

+

#string STR_gEfiMdeModulePkgTokenSpaceGuid_PcdCodRelocationDevPath_PROMPT #language en-US "Capsule On Disk
relocation device path."



#string STR_gEfiMdeModulePkgTokenSpaceGuid_PcdCodRelocationDevPath_HELP #language en-US "Full device path of
platform specific device to store Capsule On Disk temp relocation file.<BR>"

--
2.32.0



-=-=-=-=-=-=
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#87789): https://edk2.groups.io/g/devel/message/87789
Mute This Topic: https://groups.io/mt/89924426/1712937
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [ray.ni@...]
-=-=-=-=-=-=