efi: Move default filename to a function
Use a function to obtain the device EFI filename, so that we can control how sandbox behaves. Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:

committed by
Heinrich Schuchardt

parent
efe9bd4a08
commit
9fd623afed
@@ -13,7 +13,7 @@
|
|||||||
#include <bootmeth.h>
|
#include <bootmeth.h>
|
||||||
#include <command.h>
|
#include <command.h>
|
||||||
#include <dm.h>
|
#include <dm.h>
|
||||||
#include <efi_default_filename.h>
|
#include <efi.h>
|
||||||
#include <efi_loader.h>
|
#include <efi_loader.h>
|
||||||
#include <fs.h>
|
#include <fs.h>
|
||||||
#include <malloc.h>
|
#include <malloc.h>
|
||||||
@@ -168,7 +168,7 @@ static int distro_efi_try_bootflow_files(struct udevice *dev,
|
|||||||
}
|
}
|
||||||
|
|
||||||
strcpy(fname, EFI_DIRNAME);
|
strcpy(fname, EFI_DIRNAME);
|
||||||
strcat(fname, BOOTEFI_NAME);
|
strcat(fname, efi_get_basename());
|
||||||
|
|
||||||
if (bflow->blk)
|
if (bflow->blk)
|
||||||
desc = dev_get_uclass_plat(bflow->blk);
|
desc = dev_get_uclass_plat(bflow->blk);
|
||||||
|
@@ -669,4 +669,13 @@ int efi_get_mmap(struct efi_mem_desc **descp, int *sizep, uint *keyp,
|
|||||||
*/
|
*/
|
||||||
void efi_show_tables(struct efi_system_table *systab);
|
void efi_show_tables(struct efi_system_table *systab);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* efi_get_basename() - Get the default filename to use when loading
|
||||||
|
*
|
||||||
|
* E.g. this function returns BOOTAA64.EFI for an aarch target
|
||||||
|
*
|
||||||
|
* Return: Default EFI filename
|
||||||
|
*/
|
||||||
|
const char *efi_get_basename(void);
|
||||||
|
|
||||||
#endif /* _LINUX_EFI_H */
|
#endif /* _LINUX_EFI_H */
|
||||||
|
@@ -1,56 +0,0 @@
|
|||||||
/* SPDX-License-Identifier: GPL-2.0+ */
|
|
||||||
/*
|
|
||||||
* When a boot option does not provide a file path the EFI file to be
|
|
||||||
* booted is \EFI\BOOT\$(BOOTEFI_NAME).EFI. The architecture specific
|
|
||||||
* file name is defined in this include.
|
|
||||||
*
|
|
||||||
* Copyright (c) 2022, Heinrich Schuchardt <xypron.glpk@gmx.de>
|
|
||||||
* Copyright (c) 2022, Linaro Limited
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef _EFI_DEFAULT_FILENAME_H
|
|
||||||
#define _EFI_DEFAULT_FILENAME_H
|
|
||||||
|
|
||||||
#include <host_arch.h>
|
|
||||||
|
|
||||||
#undef BOOTEFI_NAME
|
|
||||||
|
|
||||||
#ifdef CONFIG_SANDBOX
|
|
||||||
|
|
||||||
#if HOST_ARCH == HOST_ARCH_X86_64
|
|
||||||
#define BOOTEFI_NAME "BOOTX64.EFI"
|
|
||||||
#elif HOST_ARCH == HOST_ARCH_X86
|
|
||||||
#define BOOTEFI_NAME "BOOTIA32.EFI"
|
|
||||||
#elif HOST_ARCH == HOST_ARCH_AARCH64
|
|
||||||
#define BOOTEFI_NAME "BOOTAA64.EFI"
|
|
||||||
#elif HOST_ARCH == HOST_ARCH_ARM
|
|
||||||
#define BOOTEFI_NAME "BOOTARM.EFI"
|
|
||||||
#elif HOST_ARCH == HOST_ARCH_RISCV32
|
|
||||||
#define BOOTEFI_NAME "BOOTRISCV32.EFI"
|
|
||||||
#elif HOST_ARCH == HOST_ARCH_RISCV64
|
|
||||||
#define BOOTEFI_NAME "BOOTRISCV64.EFI"
|
|
||||||
#else
|
|
||||||
#error Unsupported UEFI architecture
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
#if 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
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif
|
|
@@ -11,10 +11,10 @@
|
|||||||
#include <blkmap.h>
|
#include <blkmap.h>
|
||||||
#include <charset.h>
|
#include <charset.h>
|
||||||
#include <dm.h>
|
#include <dm.h>
|
||||||
|
#include <efi.h>
|
||||||
#include <log.h>
|
#include <log.h>
|
||||||
#include <malloc.h>
|
#include <malloc.h>
|
||||||
#include <net.h>
|
#include <net.h>
|
||||||
#include <efi_default_filename.h>
|
|
||||||
#include <efi_loader.h>
|
#include <efi_loader.h>
|
||||||
#include <efi_variable.h>
|
#include <efi_variable.h>
|
||||||
#include <asm/unaligned.h>
|
#include <asm/unaligned.h>
|
||||||
@@ -82,8 +82,12 @@ struct efi_device_path *expand_media_path(struct efi_device_path *device_path)
|
|||||||
&efi_simple_file_system_protocol_guid, &rem);
|
&efi_simple_file_system_protocol_guid, &rem);
|
||||||
if (handle) {
|
if (handle) {
|
||||||
if (rem->type == DEVICE_PATH_TYPE_END) {
|
if (rem->type == DEVICE_PATH_TYPE_END) {
|
||||||
full_path = efi_dp_from_file(device_path,
|
char fname[30];
|
||||||
"/EFI/BOOT/" BOOTEFI_NAME);
|
|
||||||
|
snprintf(fname, sizeof(fname), "/EFI/BOOT/%s",
|
||||||
|
efi_get_basename());
|
||||||
|
full_path = efi_dp_from_file(device_path, fname);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
full_path = efi_dp_dup(device_path);
|
full_path = efi_dp_dup(device_path);
|
||||||
}
|
}
|
||||||
|
@@ -12,18 +12,63 @@
|
|||||||
#include <mapmem.h>
|
#include <mapmem.h>
|
||||||
#include <dm.h>
|
#include <dm.h>
|
||||||
#include <fs.h>
|
#include <fs.h>
|
||||||
|
#include <efi.h>
|
||||||
#include <efi_api.h>
|
#include <efi_api.h>
|
||||||
#include <efi_load_initrd.h>
|
#include <efi_load_initrd.h>
|
||||||
#include <efi_loader.h>
|
#include <efi_loader.h>
|
||||||
#include <efi_variable.h>
|
#include <efi_variable.h>
|
||||||
|
#include <host_arch.h>
|
||||||
#include <linux/libfdt.h>
|
#include <linux/libfdt.h>
|
||||||
#include <linux/list.h>
|
#include <linux/list.h>
|
||||||
|
|
||||||
|
#ifdef CONFIG_SANDBOX
|
||||||
|
|
||||||
|
#if HOST_ARCH == HOST_ARCH_X86_64
|
||||||
|
#define BOOTEFI_NAME "BOOTX64.EFI"
|
||||||
|
#elif HOST_ARCH == HOST_ARCH_X86
|
||||||
|
#define BOOTEFI_NAME "BOOTIA32.EFI"
|
||||||
|
#elif HOST_ARCH == HOST_ARCH_AARCH64
|
||||||
|
#define BOOTEFI_NAME "BOOTAA64.EFI"
|
||||||
|
#elif HOST_ARCH == HOST_ARCH_ARM
|
||||||
|
#define BOOTEFI_NAME "BOOTARM.EFI"
|
||||||
|
#elif HOST_ARCH == HOST_ARCH_RISCV32
|
||||||
|
#define BOOTEFI_NAME "BOOTRISCV32.EFI"
|
||||||
|
#elif HOST_ARCH == HOST_ARCH_RISCV64
|
||||||
|
#define BOOTEFI_NAME "BOOTRISCV64.EFI"
|
||||||
|
#else
|
||||||
|
#error Unsupported UEFI architecture
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
#if 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
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(CONFIG_CMD_EFIDEBUG) || defined(CONFIG_EFI_LOAD_FILE2_INITRD)
|
#if defined(CONFIG_CMD_EFIDEBUG) || defined(CONFIG_EFI_LOAD_FILE2_INITRD)
|
||||||
/* GUID used by Linux to identify the LoadFile2 protocol with the 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;
|
const efi_guid_t efi_lf2_initrd_guid = EFI_INITRD_MEDIA_GUID;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
const char *efi_get_basename(void)
|
||||||
|
{
|
||||||
|
return BOOTEFI_NAME;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* efi_create_current_boot_var() - Return Boot#### name were #### is replaced by
|
* efi_create_current_boot_var() - Return Boot#### name were #### is replaced by
|
||||||
* the value of BootCurrent
|
* the value of BootCurrent
|
||||||
|
@@ -12,7 +12,7 @@
|
|||||||
#include <bootstd.h>
|
#include <bootstd.h>
|
||||||
#include <cli.h>
|
#include <cli.h>
|
||||||
#include <dm.h>
|
#include <dm.h>
|
||||||
#include <efi_default_filename.h>
|
#include <efi.h>
|
||||||
#include <expo.h>
|
#include <expo.h>
|
||||||
#ifdef CONFIG_SANDBOX
|
#ifdef CONFIG_SANDBOX
|
||||||
#include <asm/test.h>
|
#include <asm/test.h>
|
||||||
@@ -184,8 +184,9 @@ static int bootflow_cmd_scan_e(struct unit_test_state *uts)
|
|||||||
ut_assert_nextline(" 3 efi media mmc 0 mmc1.bootdev.whole ");
|
ut_assert_nextline(" 3 efi media mmc 0 mmc1.bootdev.whole ");
|
||||||
ut_assert_nextline(" ** No partition found, err=-2: No such file or directory");
|
ut_assert_nextline(" ** No partition found, err=-2: No such file or directory");
|
||||||
ut_assert_nextline(" 4 extlinux ready mmc 1 mmc1.bootdev.part_1 /extlinux/extlinux.conf");
|
ut_assert_nextline(" 4 extlinux ready mmc 1 mmc1.bootdev.part_1 /extlinux/extlinux.conf");
|
||||||
ut_assert_nextline(" 5 efi fs mmc 1 mmc1.bootdev.part_1 /EFI/BOOT/"
|
ut_assert_nextline(
|
||||||
BOOTEFI_NAME);
|
" 5 efi fs mmc 1 mmc1.bootdev.part_1 /EFI/BOOT/%s",
|
||||||
|
efi_get_basename());
|
||||||
|
|
||||||
ut_assert_skip_to_line("Scanning bootdev 'mmc0.bootdev':");
|
ut_assert_skip_to_line("Scanning bootdev 'mmc0.bootdev':");
|
||||||
ut_assert_skip_to_line(
|
ut_assert_skip_to_line(
|
||||||
|
Reference in New Issue
Block a user