mirror of
				https://xff.cz/git/u-boot/
				synced 2025-10-31 02:15:45 +01:00 
			
		
		
		
	efi_loader: return binary from efi_dp_from_lo()
For finding distro supplied device-trees we need to know from which device we are booting. This can be identified via the device-path of the binary. Up to now efi_dp_from_lo() only could return the initrd or fdt device-path. Allow returning the binary device-path, too. Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com> Reviewed-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
This commit is contained in:
		| @@ -1133,17 +1133,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 |  * efi_dp_from_lo() - get device-path from load option | ||||||
|  *                    multi-instance device path that matches |  | ||||||
|  *                    a specific GUID. This kind of device paths |  | ||||||
|  *                    is found in Boot#### options describing an |  | ||||||
|  *                    initrd location |  | ||||||
|  * |  * | ||||||
|  * @lo:		EFI_LOAD_OPTION containing a valid device path |  * The load options in U-Boot may contain multiple concatenated device-paths. | ||||||
|  * @guid:	guid to search for |  * 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: |  * Return: | ||||||
|  * device path including the VenMedia node or NULL. |  * device path excluding the matched VenMedia node or NULL. | ||||||
|  * Caller must free the returned value. |  * Caller must free the returned value. | ||||||
|  */ |  */ | ||||||
| struct | struct | ||||||
| @@ -1154,6 +1155,9 @@ efi_device_path *efi_dp_from_lo(struct efi_load_option *lo, | |||||||
| 	struct efi_device_path_vendor *vendor; | 	struct efi_device_path_vendor *vendor; | ||||||
| 	int lo_len = lo->file_path_length; | 	int lo_len = lo->file_path_length; | ||||||
|  |  | ||||||
|  | 	if (!guid) | ||||||
|  | 		return efi_dp_dup(fp); | ||||||
|  |  | ||||||
| 	for (; lo_len >=  sizeof(struct efi_device_path); | 	for (; lo_len >=  sizeof(struct efi_device_path); | ||||||
| 	     lo_len -= fp->length, fp = (void *)fp + fp->length) { | 	     lo_len -= fp->length, fp = (void *)fp + fp->length) { | ||||||
| 		if (lo_len < 0 || efi_dp_check_length(fp, lo_len) < 0) | 		if (lo_len < 0 || efi_dp_check_length(fp, lo_len) < 0) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user