efi_loader: use proper device-paths for partitions
Also, create disk objects for the disk itself, in addition to the
partitions. (UEFI terminology is a bit confusing, a "disk" object is
really a partition.) This helps grub properly identify the boot device
since it is trying to match up partition "disk" object with it's parent
device.
Now instead of seeing devices like:
/File(sdhci@
07864000.blk)/EndEntire
/File(usb_mass_storage.lun0)/EndEntire
You see:
/ACPI(
133741d0,0)/UnknownMessaging(1d)/EndEntire
/ACPI(
133741d0,0)/UnknownMessaging(1d)/HD(0,800,64000,
dd904a8c00000000,1,1)/EndEntire
/ACPI(
133741d0,0)/UnknownMessaging(1d)/HD(1,64800,200000,
dd904a8c00000000,1,1)/EndEntire
/ACPI(
133741d0,0)/UnknownMessaging(1d)/HD(2,264800,19a000,
dd904a8c00000000,1,1)/EndEntire
/ACPI(
133741d0,0)/USB(0,0)/USB(0,0)/USB(0,0)/EndEntire
/ACPI(
133741d0,0)/USB(0,0)/USB(0,0)/USB(0,0)/HD(0,800,60000,
38ca680200000000,1,1)/EndEntire
/ACPI(
133741d0,0)/USB(0,0)/USB(0,0)/USB(0,0)/HD(1,61000,155000,
38ca680200000000,1,1)/EndEntire
/ACPI(
133741d0,0)/USB(0,0)/USB(0,0)/USB(0,0)/HD(2,
20fa800,
1bbf8800,
38ca680200000000,1,1)/EndEntire
/ACPI(
133741d0,0)/USB(0,0)/USB(0,0)/USB(0,0)/HD(3,1b6800,
1f44000,
38ca680200000000,1,1)/EndEntire
This is on a board with single USB disk and single sd-card. The
UnknownMessaging(1d) node in the device-path is the MMC device,
but grub_efi_print_device_path() hasn't been updated yet for some
of the newer device-path sub-types.
This patch is inspired by a patch originally from Peter Jones, but
re-worked to use efi_device_path, so it doesn't much resemble the
original.
Signed-off-by: Rob Clark <robdclark@gmail.com>
[agraf: s/unsigned/unsigned int/]
Signed-off-by: Alexander Graf <agraf@suse.de>