diff options
Diffstat (limited to 'lib/efi_loader/efi_device_path.c')
-rw-r--r-- | lib/efi_loader/efi_device_path.c | 33 |
1 files changed, 14 insertions, 19 deletions
diff --git a/lib/efi_loader/efi_device_path.c b/lib/efi_loader/efi_device_path.c index ac5e6f7e14f..73f1fe75a83 100644 --- a/lib/efi_loader/efi_device_path.c +++ b/lib/efi_loader/efi_device_path.c @@ -422,7 +422,7 @@ bool efi_dp_is_multi_instance(const struct efi_device_path *dp) /* size of device-path not including END node for device and all parents * up to the root device. */ -static unsigned dp_size(struct udevice *dev) +__maybe_unused static unsigned int dp_size(struct udevice *dev) { if (!dev || !dev->driver) return sizeof(ROOT); @@ -494,7 +494,7 @@ static unsigned dp_size(struct udevice *dev) * @dev device * @return pointer to the end of the device path */ -static void *dp_fill(void *buf, struct udevice *dev) +__maybe_unused static void *dp_fill(void *buf, struct udevice *dev) { if (!dev || !dev->driver) return buf; @@ -654,20 +654,6 @@ static void *dp_fill(void *buf, struct udevice *dev) return dp_fill(buf, dev->parent); } } - -/* Construct a device-path from a device: */ -struct efi_device_path *efi_dp_from_dev(struct udevice *dev) -{ - void *buf, *start; - - start = buf = dp_alloc(dp_size(dev) + sizeof(END)); - if (!buf) - return NULL; - buf = dp_fill(buf, dev); - *((struct efi_device_path *)buf) = END; - - return start; -} #endif static unsigned dp_part_size(struct blk_desc *desc, int part) @@ -1032,6 +1018,16 @@ out: return EFI_SUCCESS; } +/** + * efi_dp_from_name() - convert U-Boot device and file path to device path + * + * @dev: U-Boot device, e.g. 'mmc' + * @devnr: U-Boot device number, e.g. 1 for 'mmc:1' + * @path: file path relative to U-Boot device, may be NULL + * @device: pointer to receive device path of the device + * @file: pointer to receive device path for the file + * Return: status code + */ efi_status_t efi_dp_from_name(const char *dev, const char *devnr, const char *path, struct efi_device_path **device, @@ -1071,10 +1067,9 @@ efi_status_t efi_dp_from_name(const char *dev, const char *devnr, s = filename; while ((s = strchr(s, '/'))) *s++ = '\\'; - *file = efi_dp_from_file(((!is_net && device) ? desc : NULL), - part, filename); + *file = efi_dp_from_file(is_net ? NULL : desc, part, filename); - if (!file) + if (!*file) return EFI_INVALID_PARAMETER; return EFI_SUCCESS; |