The pre-1.0 firmware path for SCSI devices already included the LUN using the suffix argument to add_boot_device_path. Avoid that it is included twice, and, for consistency with the OpenFirmware spec: 1) move the "channel" to a separate device path; 2) convert the colons to commas; 3) use hex for the numbers.
This is compatible with SeaBIOS USB boot, which only looks at the prefix for the usb-storage device (e.g. /pci@i0cf8/usb@1,2/storage@1), and never at the SCSI part. Signed-off-by: Paolo Bonzini <pbonz...@redhat.com> --- hw/scsi-bus.c | 4 ++-- hw/scsi-disk.c | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/hw/scsi-bus.c b/hw/scsi-bus.c index 61c883f..07d6a7d 100644 --- a/hw/scsi-bus.c +++ b/hw/scsi-bus.c @@ -1307,8 +1307,8 @@ static char *scsibus_get_fw_dev_path(DeviceState *dev) SCSIDevice *d = DO_UPCAST(SCSIDevice, qdev, dev); char path[100]; - snprintf(path, sizeof(path), "%s@%d:%d:%d", qdev_fw_name(dev), - d->channel, d->id, d->lun); + snprintf(path, sizeof(path), "channel@%x/%s@%x,%x", d->channel, + qdev_fw_name(dev), d->id, d->lun); return strdup(path); } diff --git a/hw/scsi-disk.c b/hw/scsi-disk.c index 9da6d36..16a4714 100644 --- a/hw/scsi-disk.c +++ b/hw/scsi-disk.c @@ -1581,7 +1581,7 @@ static int scsi_initfn(SCSIDevice *dev) bdrv_set_buffer_alignment(s->qdev.conf.bs, s->qdev.blocksize); bdrv_iostatus_enable(s->qdev.conf.bs); - add_boot_device_path(s->qdev.conf.bootindex, &dev->qdev, ",0"); + add_boot_device_path(s->qdev.conf.bootindex, &dev->qdev, NULL); return 0; } -- 1.7.7.1