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 <s...@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 <s...@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