[PATCH 08/10] efi: Move the base name and PXE info into lib/efi

Simon Glass sjg at chromium.org
Fri May 23 15:06:43 CEST 2025


Move efi_get_basename() and efi_get_pxe_arch() into lib/efi so they can
be used from the app.

Signed-off-by: Simon Glass <sjg at chromium.org>
---

 MAINTAINERS                 |  1 +
 lib/Makefile                |  1 +
 lib/efi/Makefile            |  6 +++
 lib/efi/basename.c          | 85 +++++++++++++++++++++++++++++++++++++
 lib/efi_loader/efi_helper.c | 74 --------------------------------
 5 files changed, 93 insertions(+), 74 deletions(-)
 create mode 100644 lib/efi/Makefile
 create mode 100644 lib/efi/basename.c

diff --git a/MAINTAINERS b/MAINTAINERS
index 929b0382866..8960c005ed4 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -1073,6 +1073,7 @@ F:	configs/efi-x86_app*
 F:	doc/develop/uefi/u-boot_on_efi.rst
 F:	drivers/block/efi-media-uclass.c
 F:	drivers/block/sb_efi_media.c
+F:	lib/efi/
 F:	lib/efi_client/
 F:	scripts/build-efi
 F:	test/dm/efi_media.c
diff --git a/lib/Makefile b/lib/Makefile
index 429347f97a2..c9c1eccc187 100644
--- a/lib/Makefile
+++ b/lib/Makefile
@@ -5,6 +5,7 @@
 
 ifndef CONFIG_XPL_BUILD
 
+obj-$(CONFIG_EFI) += efi/
 obj-$(CONFIG_EFI_CLIENT) += efi_client/
 obj-$(CONFIG_EFI_LOADER) += efi_driver/
 obj-$(CONFIG_EFI_LOADER) += efi_loader/
diff --git a/lib/efi/Makefile b/lib/efi/Makefile
new file mode 100644
index 00000000000..a7dee7d4a6b
--- /dev/null
+++ b/lib/efi/Makefile
@@ -0,0 +1,6 @@
+# SPDX-License-Identifier: GPL-2.0+
+#
+# Copyright 2025 Simon Glass <sjg at chromium.org>
+#
+
+obj-y += basename.o
diff --git a/lib/efi/basename.c b/lib/efi/basename.c
new file mode 100644
index 00000000000..4d6eb41cd90
--- /dev/null
+++ b/lib/efi/basename.c
@@ -0,0 +1,85 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Copyright (c) 2020, Linaro Limited
+ */
+
+#define LOG_CATEGORY LOGC_EFI
+
+#include <efi.h>
+#include <efi_load_initrd.h>
+#include <env.h>
+#include <errno.h>
+
+#undef BOOTEFI_NAME
+
+#if HOST_ARCH == HOST_ARCH_X86_64
+#define HOST_BOOTEFI_NAME "BOOTX64.EFI"
+#define HOST_PXE_ARCH 0x6
+#elif HOST_ARCH == HOST_ARCH_X86
+#define HOST_BOOTEFI_NAME "BOOTIA32.EFI"
+#define HOST_PXE_ARCH 0x7
+#elif HOST_ARCH == HOST_ARCH_AARCH64
+#define HOST_BOOTEFI_NAME "BOOTAA64.EFI"
+#define HOST_PXE_ARCH 0xb
+#elif HOST_ARCH == HOST_ARCH_ARM
+#define HOST_BOOTEFI_NAME "BOOTARM.EFI"
+#define HOST_PXE_ARCH 0xa
+#elif HOST_ARCH == HOST_ARCH_RISCV32
+#define HOST_BOOTEFI_NAME "BOOTRISCV32.EFI"
+#define HOST_PXE_ARCH 0x19
+#elif HOST_ARCH == HOST_ARCH_RISCV64
+#define HOST_BOOTEFI_NAME "BOOTRISCV64.EFI"
+#define HOST_PXE_ARCH 0x1b
+#else
+#error Unsupported Host architecture
+#endif
+
+#if defined(CONFIG_SANDBOX)
+#define BOOTEFI_NAME "BOOTSBOX.EFI"
+#elif defined(CONFIG_ARM64)
+#define BOOTEFI_NAME "BOOTAA64.EFI"
+#elif defined(CONFIG_ARM)
+#define BOOTEFI_NAME "BOOTARM.EFI"
+#elif defined(CONFIG_X86_64)
+#define BOOTEFI_NAME "BOOTX64.EFI"
+#elif defined(CONFIG_X86)
+#define BOOTEFI_NAME "BOOTIA32.EFI"
+#elif defined(CONFIG_ARCH_RV32I)
+#define BOOTEFI_NAME "BOOTRISCV32.EFI"
+#elif defined(CONFIG_ARCH_RV64I)
+#define BOOTEFI_NAME "BOOTRISCV64.EFI"
+#else
+#error Unsupported UEFI architecture
+#endif
+
+#if defined(CONFIG_CMD_EFIDEBUG) || defined(CONFIG_EFI_LOAD_FILE2_INITRD)
+/* GUID used by Linux to identify the LoadFile2 protocol with the initrd */
+const efi_guid_t efi_lf2_initrd_guid = EFI_INITRD_MEDIA_GUID;
+#endif
+
+const char *efi_get_basename(void)
+{
+	return efi_use_host_arch() ? HOST_BOOTEFI_NAME : BOOTEFI_NAME;
+}
+
+int efi_get_pxe_arch(void)
+{
+	if (efi_use_host_arch())
+		return HOST_PXE_ARCH;
+
+	/* http://www.iana.org/assignments/dhcpv6-parameters/dhcpv6-parameters.xml */
+	if (IS_ENABLED(CONFIG_ARM64))
+		return 0xb;
+	else if (IS_ENABLED(CONFIG_ARM))
+		return 0xa;
+	else if (IS_ENABLED(CONFIG_X86_64))
+		return 0x6;
+	else if (IS_ENABLED(CONFIG_X86))
+		return 0x7;
+	else if (IS_ENABLED(CONFIG_ARCH_RV32I))
+		return 0x19;
+	else if (IS_ENABLED(CONFIG_ARCH_RV64I))
+		return 0x1b;
+
+	return -EINVAL;
+}
diff --git a/lib/efi_loader/efi_helper.c b/lib/efi_loader/efi_helper.c
index 117c6811254..9d73200e604 100644
--- a/lib/efi_loader/efi_helper.c
+++ b/lib/efi_loader/efi_helper.c
@@ -23,80 +23,6 @@
 #include <linux/libfdt.h>
 #include <linux/list.h>
 
-#undef BOOTEFI_NAME
-
-#if HOST_ARCH == HOST_ARCH_X86_64
-#define HOST_BOOTEFI_NAME "BOOTX64.EFI"
-#define HOST_PXE_ARCH 0x6
-#elif HOST_ARCH == HOST_ARCH_X86
-#define HOST_BOOTEFI_NAME "BOOTIA32.EFI"
-#define HOST_PXE_ARCH 0x7
-#elif HOST_ARCH == HOST_ARCH_AARCH64
-#define HOST_BOOTEFI_NAME "BOOTAA64.EFI"
-#define HOST_PXE_ARCH 0xb
-#elif HOST_ARCH == HOST_ARCH_ARM
-#define HOST_BOOTEFI_NAME "BOOTARM.EFI"
-#define HOST_PXE_ARCH 0xa
-#elif HOST_ARCH == HOST_ARCH_RISCV32
-#define HOST_BOOTEFI_NAME "BOOTRISCV32.EFI"
-#define HOST_PXE_ARCH 0x19
-#elif HOST_ARCH == HOST_ARCH_RISCV64
-#define HOST_BOOTEFI_NAME "BOOTRISCV64.EFI"
-#define HOST_PXE_ARCH 0x1b
-#else
-#error Unsupported Host architecture
-#endif
-
-#if defined(CONFIG_SANDBOX)
-#define BOOTEFI_NAME "BOOTSBOX.EFI"
-#elif defined(CONFIG_ARM64)
-#define BOOTEFI_NAME "BOOTAA64.EFI"
-#elif defined(CONFIG_ARM)
-#define BOOTEFI_NAME "BOOTARM.EFI"
-#elif defined(CONFIG_X86_64)
-#define BOOTEFI_NAME "BOOTX64.EFI"
-#elif defined(CONFIG_X86)
-#define BOOTEFI_NAME "BOOTIA32.EFI"
-#elif defined(CONFIG_ARCH_RV32I)
-#define BOOTEFI_NAME "BOOTRISCV32.EFI"
-#elif defined(CONFIG_ARCH_RV64I)
-#define BOOTEFI_NAME "BOOTRISCV64.EFI"
-#else
-#error Unsupported UEFI architecture
-#endif
-
-#if defined(CONFIG_CMD_EFIDEBUG) || defined(CONFIG_EFI_LOAD_FILE2_INITRD)
-/* GUID used by Linux to identify the LoadFile2 protocol with the initrd */
-const efi_guid_t efi_lf2_initrd_guid = EFI_INITRD_MEDIA_GUID;
-#endif
-
-const char *efi_get_basename(void)
-{
-	return efi_use_host_arch() ? HOST_BOOTEFI_NAME : BOOTEFI_NAME;
-}
-
-int efi_get_pxe_arch(void)
-{
-	if (efi_use_host_arch())
-		return HOST_PXE_ARCH;
-
-	/* http://www.iana.org/assignments/dhcpv6-parameters/dhcpv6-parameters.xml */
-	if (IS_ENABLED(CONFIG_ARM64))
-		return 0xb;
-	else if (IS_ENABLED(CONFIG_ARM))
-		return 0xa;
-	else if (IS_ENABLED(CONFIG_X86_64))
-		return 0x6;
-	else if (IS_ENABLED(CONFIG_X86))
-		return 0x7;
-	else if (IS_ENABLED(CONFIG_ARCH_RV32I))
-		return 0x19;
-	else if (IS_ENABLED(CONFIG_ARCH_RV64I))
-		return 0x1b;
-
-	return -EINVAL;
-}
-
 /**
  * efi_create_current_boot_var() - Return Boot#### name were #### is replaced by
  *			           the value of BootCurrent
-- 
2.43.0



More information about the U-Boot mailing list