efi_loader: support all uclasses in device path

On devices with multiple USB mass storage devices errors like

    Path /../USB(0x0,0x0)/USB(0x1,0x0)/Ctrl(0x0)
    already installed.

are seen. This is due to creating non-unique device paths. To uniquely
identify devices we must provide path nodes for all devices on the path
from the root device.

Add support for generating device path nodes for all uclasses.

Reported-by: Suniel Mahesh <sunil@amarulasolutions.com>
Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
This commit is contained in:
Heinrich Schuchardt 2023-07-19 06:43:08 +02:00
parent dc7a2f1d9f
commit e07368ea57
2 changed files with 32 additions and 31 deletions

View file

@ -579,6 +579,13 @@ struct efi_device_path_vendor {
u8 vendor_data[];
} __packed;
struct efi_device_path_udevice {
struct efi_device_path dp;
efi_guid_t guid;
int uclass_id;
int dev_number;
} __packed;
struct efi_device_path_controller {
struct efi_device_path dp;
u32 controller_number;