On Tue, Jun 12, 2012 at 06:21:39PM +0200, Paolo Bonzini wrote:
> Il 12/06/2012 03:32, Kevin O'Connor ha scritto:
> > -int bootprio_find_usb(struct usbdevice_s *usbdev)
> > +int bootprio_find_usb(struct usbdevice_s *usbdev, int lun)
> >  {
> >      if (!CONFIG_BOOTORDER)
> >          return -1;
> > -    // Find usb - for example: 
> > /pci@i0cf8/usb@1,2/hub@1/network@0/ethernet@0
> > +    // Find usb - for example: 
> > /pci@i0cf8/usb@1,2/storage@1/channel@0/disk@0,0
> >      char desc[256], *p;
> >      p = build_pci_path(desc, sizeof(desc), "usb", usbdev->hub->cntl->pci);
> >      p = build_usb_path(p, desc+sizeof(desc)-p, usbdev->hub);
> > -    snprintf(p, desc+sizeof(desc)-p, "/*@%x", usbdev->port+1);
> > +    snprintf(p, desc+sizeof(desc)-p, "/*@%x/*@0/*@0,%d", usbdev->port+1, 
> > lun);
> >      return find_prio(desc);
> 
> This will not work if you're redirecting a USB device from the host,
> because then you will not have the SCSI-specific elements of the path.
> I suggest that you fall back to "/*@%x" if find_prio returns failure and
> lun=0.

Do you have an example of the bootorder syntax found for USB
passthrough?

The problem is that a shorter pattern match will match a longer
string.  So, if the bootorder contains:

/pci@i0cf8/usb@1,2/storage@1/channel@0/disk@0,1

and we search for "/pci@i0cf8/usb@1,2/storage@1/channel@0/disk@0,0"
(no match) followed by a search for "/pci@i0cf8/usb@1,2" then we'll
match even though we clearly intended to catch the lun=1 disk and not
the lun=0 disk.

I'm not sure what the solution is.

-Kevin

_______________________________________________
SeaBIOS mailing list
[email protected]
http://www.seabios.org/mailman/listinfo/seabios

Reply via email to