Merge tag 'efi-next-20240611' of https://source.denx.de/u-boot/custodians/u-boot-efi into next

Pull request efi-next-20240611

UEFI:

* Allow specifying a device-tree in an EFI load option
  using the efidebug or eficonfig command.
* Let the EFI boot manager fall back to an OS provided device-tree
  if no device-tree is specified.
This commit is contained in:
Tom Rini
2024-06-11 07:42:55 -06:00
15 changed files with 463 additions and 139 deletions

View File

@@ -18,7 +18,17 @@
0xac, 0x74, 0xca, 0x55, 0x52, 0x31, 0xcc, 0x68)
extern const efi_guid_t efi_lf2_initrd_guid;
struct efi_initrd_dp {
/**
* struct efi_lo_dp_prefix - separator device path used in load options
*
* We use vendor media device nodes in UEFI load options to separate
* the binary, initrd, and fdt device-paths. This structure contains
* the vendor media device node and an end node.
*
* @vendor: vendor media device node
* @end: end node
*/
struct efi_lo_dp_prefix {
struct efi_device_path_vendor vendor;
struct efi_device_path end;
} __packed;

View File

@@ -664,6 +664,10 @@ efi_status_t EFIAPI efi_load_image(bool boot_policy,
void *source_buffer,
efi_uintn_t source_size,
efi_handle_t *image_handle);
/* Load image from path */
efi_status_t efi_load_image_from_path(bool boot_policy,
struct efi_device_path *file_path,
void **buffer, efi_uintn_t *size);
/* Start image */
efi_status_t EFIAPI efi_start_image(efi_handle_t image_handle,
efi_uintn_t *exit_data_size,
@@ -946,7 +950,7 @@ struct efi_device_path *efi_dp_from_lo(struct efi_load_option *lo,
const efi_guid_t *guid);
struct efi_device_path *efi_dp_concat(const struct efi_device_path *dp1,
const struct efi_device_path *dp2,
bool split_end_node);
size_t split_end_node);
struct efi_device_path *search_gpt_dp_node(struct efi_device_path *device_path);
efi_status_t efi_deserialize_load_option(struct efi_load_option *lo, u8 *data,
efi_uintn_t *size);
@@ -1185,4 +1189,22 @@ efi_status_t efi_disk_get_device_name(const efi_handle_t handle, char *buf, int
*/
void efi_add_known_memory(void);
/**
* efi_load_option_dp_join() - join device-paths for load option
*
* @dp: in: binary device-path, out: joined device-path
* @dp_size: size of joined device-path
* @initrd_dp: initrd device-path or NULL
* @fdt_dp: device-tree device-path or NULL
* Return: status_code
*/
efi_status_t efi_load_option_dp_join(struct efi_device_path **dp,
size_t *dp_size,
struct efi_device_path *initrd_dp,
struct efi_device_path *fdt_dp);
int efi_get_distro_fdt_name(char *fname, int size, int seq);
void efi_load_distro_fdt(void **fdt, efi_uintn_t *fdt_size);
#endif /* _EFI_LOADER_H */