mirror of
https://github.com/u-boot/u-boot.git
synced 2025-05-08 19:11:53 +00:00
efi_loader: correct shortening of device-paths
We use short device-paths in boot options so that a file on a block device can be found independent of the port into which the device is plugged. Usb() device-path nodes only contain port and interface information and therefore cannot identify a block device. UsbWwi() device-path nodes contain the serial number of USB devices. Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
This commit is contained in:
parent
ffc1cfb8f4
commit
a9203b0fef
2 changed files with 7 additions and 15 deletions
|
@ -610,6 +610,7 @@ struct efi_device_path_acpi_path {
|
|||
# define DEVICE_PATH_SUB_TYPE_MSG_MAC_ADDR 0x0b
|
||||
# define DEVICE_PATH_SUB_TYPE_MSG_UART 0x0e
|
||||
# define DEVICE_PATH_SUB_TYPE_MSG_USB_CLASS 0x0f
|
||||
# define DEVICE_PATH_SUB_TYPE_MSG_USB_WWI 0x10
|
||||
# define DEVICE_PATH_SUB_TYPE_MSG_SATA 0x12
|
||||
# define DEVICE_PATH_SUB_TYPE_MSG_NVME 0x17
|
||||
# define DEVICE_PATH_SUB_TYPE_MSG_URI 0x18
|
||||
|
|
|
@ -124,17 +124,13 @@ int efi_dp_match(const struct efi_device_path *a,
|
|||
/**
|
||||
* efi_dp_shorten() - shorten device-path
|
||||
*
|
||||
* We can have device paths that start with a USB WWID or a USB Class node,
|
||||
* and a few other cases which don't encode the full device path with bus
|
||||
* hierarchy:
|
||||
* When creating a short boot option we want to use a device-path that is
|
||||
* independent of the location where the block device is plugged in.
|
||||
*
|
||||
* * MESSAGING:USB_WWID
|
||||
* * MESSAGING:USB_CLASS
|
||||
* * MEDIA:FILE_PATH
|
||||
* * MEDIA:HARD_DRIVE
|
||||
* * MESSAGING:URI
|
||||
* UsbWwi() nodes contain a serial number, hard drive paths a partition
|
||||
* UUID. Both should be unique.
|
||||
*
|
||||
* See UEFI spec (section 3.1.2, about short-form device-paths)
|
||||
* See UEFI spec, section 3.1.2 for "short-form device path".
|
||||
*
|
||||
* @dp: original device-path
|
||||
* @Return: shortened device-path or NULL
|
||||
|
@ -142,12 +138,7 @@ int efi_dp_match(const struct efi_device_path *a,
|
|||
struct efi_device_path *efi_dp_shorten(struct efi_device_path *dp)
|
||||
{
|
||||
while (dp) {
|
||||
/*
|
||||
* TODO: Add MESSAGING:USB_WWID and MESSAGING:URI..
|
||||
* in practice fallback.efi just uses MEDIA:HARD_DRIVE
|
||||
* so not sure when we would see these other cases.
|
||||
*/
|
||||
if (EFI_DP_TYPE(dp, MESSAGING_DEVICE, MSG_USB) ||
|
||||
if (EFI_DP_TYPE(dp, MESSAGING_DEVICE, MSG_USB_WWI) ||
|
||||
EFI_DP_TYPE(dp, MEDIA_DEVICE, HARD_DRIVE_PATH) ||
|
||||
EFI_DP_TYPE(dp, MEDIA_DEVICE, FILE_PATH))
|
||||
return dp;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue