efi: Move the base name and PXE info into lib/efi
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@chromium.org>
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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/
|
||||
|
||||
6
lib/efi/Makefile
Normal file
6
lib/efi/Makefile
Normal file
@@ -0,0 +1,6 @@
|
||||
# SPDX-License-Identifier: GPL-2.0+
|
||||
#
|
||||
# Copyright 2025 Simon Glass <sjg@chromium.org>
|
||||
#
|
||||
|
||||
obj-y += basename.o
|
||||
85
lib/efi/basename.c
Normal file
85
lib/efi/basename.c
Normal file
@@ -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;
|
||||
}
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user