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_MAC_ADDR 0x0b
|
||||||
# define DEVICE_PATH_SUB_TYPE_MSG_UART 0x0e
|
# define DEVICE_PATH_SUB_TYPE_MSG_UART 0x0e
|
||||||
# define DEVICE_PATH_SUB_TYPE_MSG_USB_CLASS 0x0f
|
# 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_SATA 0x12
|
||||||
# define DEVICE_PATH_SUB_TYPE_MSG_NVME 0x17
|
# define DEVICE_PATH_SUB_TYPE_MSG_NVME 0x17
|
||||||
# define DEVICE_PATH_SUB_TYPE_MSG_URI 0x18
|
# 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
|
* efi_dp_shorten() - shorten device-path
|
||||||
*
|
*
|
||||||
* We can have device paths that start with a USB WWID or a USB Class node,
|
* When creating a short boot option we want to use a device-path that is
|
||||||
* and a few other cases which don't encode the full device path with bus
|
* independent of the location where the block device is plugged in.
|
||||||
* hierarchy:
|
|
||||||
*
|
*
|
||||||
* * MESSAGING:USB_WWID
|
* UsbWwi() nodes contain a serial number, hard drive paths a partition
|
||||||
* * MESSAGING:USB_CLASS
|
* UUID. Both should be unique.
|
||||||
* * MEDIA:FILE_PATH
|
|
||||||
* * MEDIA:HARD_DRIVE
|
|
||||||
* * MESSAGING:URI
|
|
||||||
*
|
*
|
||||||
* 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
|
* @dp: original device-path
|
||||||
* @Return: shortened device-path or NULL
|
* @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)
|
struct efi_device_path *efi_dp_shorten(struct efi_device_path *dp)
|
||||||
{
|
{
|
||||||
while (dp) {
|
while (dp) {
|
||||||
/*
|
if (EFI_DP_TYPE(dp, MESSAGING_DEVICE, MSG_USB_WWI) ||
|
||||||
* 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) ||
|
|
||||||
EFI_DP_TYPE(dp, MEDIA_DEVICE, HARD_DRIVE_PATH) ||
|
EFI_DP_TYPE(dp, MEDIA_DEVICE, HARD_DRIVE_PATH) ||
|
||||||
EFI_DP_TYPE(dp, MEDIA_DEVICE, FILE_PATH))
|
EFI_DP_TYPE(dp, MEDIA_DEVICE, FILE_PATH))
|
||||||
return dp;
|
return dp;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue