
On 4/28/24 15:28, Ilias Apalodimas wrote:
Hi Heinrich
On Fri, 26 Apr 2024 at 17:14, Heinrich Schuchardt heinrich.schuchardt@canonical.com wrote:
Up to now efi_dp_from_lo() only could return the initrd or fdt device-path. Allow returning the binary device-path to.
Why do we need this?
In patch 14/14 I add this line:
+ dp = efi_get_dp_from_boot(NULL);
The binary path indicates the partition on which to search for the default dtb as indicated by $fdtfile.
I should have added an explanation in the commit message.
Best regards
Heinrich
Thanks /Ilias
Signed-off-by: Heinrich Schuchardt heinrich.schuchardt@canonical.com
lib/efi_loader/efi_device_path.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-)
diff --git a/lib/efi_loader/efi_device_path.c b/lib/efi_loader/efi_device_path.c index 75fe95c9c1e..c8893f5626b 100644 --- a/lib/efi_loader/efi_device_path.c +++ b/lib/efi_loader/efi_device_path.c @@ -1140,17 +1140,18 @@ ssize_t efi_dp_check_length(const struct efi_device_path *dp, }
/**
- efi_dp_from_lo() - Get the instance of a VenMedia node in a
multi-instance device path that matches
a specific GUID. This kind of device paths
is found in Boot#### options describing an
initrd location
- efi_dp_from_lo() - get device-path from load option
- @lo: EFI_LOAD_OPTION containing a valid device path
- @guid: guid to search for
- The load options in U-Boot may contain multiple concatenated device-paths.
- The first device-path indicates the EFI binary to execute. Subsequent
- device-paths start with a VenMedia node where the GUID identifies the
- function (initrd or fdt).
- @lo: EFI load option containing a valid device path
- @guid: GUID identifying device-path or NULL for the EFI binary
- Return:
- device path including the VenMedia node or NULL.
*/ struct
- device path excluding the matched VenMedia node or NULL.
- Caller must free the returned value.
@@ -1161,6 +1162,9 @@ efi_device_path *efi_dp_from_lo(struct efi_load_option *lo, struct efi_device_path_vendor *vendor; int lo_len = lo->file_path_length;
if (!guid)
return efi_dp_dup(fp);
for (; lo_len >= sizeof(struct efi_device_path); lo_len -= fp->length, fp = (void *)fp + fp->length) { if (lo_len < 0 || efi_dp_check_length(fp, lo_len) < 0)
-- 2.43.0