aboutsummaryrefslogtreecommitdiffstats
path: root/src/boot.c
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@koconnor.net>2012-06-13 08:47:03 -0400
committerKevin O'Connor <kevin@koconnor.net>2012-06-13 08:47:03 -0400
commit7fa31b5abf8992c949693d315932c5dc91791892 (patch)
tree684c33ba87ac9e4a2518cc6cd7c37fc9db3c90ab /src/boot.c
parent5283b2e6e11edf552ca255b43cd0ea0f133ff168 (diff)
downloadseabios-7fa31b5abf8992c949693d315932c5dc91791892.tar.gz
Support USB MSC devices with multiples LUNs
There are USB Mass storage devices which have more than one device. Examples are CD Changers, or USB sticks which are partitioned in a CDROM and Harddisk device. Signed-off-by: Sven Schnelle <svens@stackframe.org> Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Diffstat (limited to 'src/boot.c')
-rw-r--r--src/boot.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/src/boot.c b/src/boot.c
index 6949490e..3ca7960b 100644
--- a/src/boot.c
+++ b/src/boot.c
@@ -205,15 +205,21 @@ build_usb_path(char *buf, int max, struct usbhub_s *hub)
return p;
}
-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, "/storage@%x/*@0/*@0,%d"
+ , usbdev->port+1, lun);
+ int ret = find_prio(desc);
+ if (ret >= 0)
+ return ret;
+ // Try usb-host/redir - for example: /pci@i0cf8/usb@1,2/usb-host@1
+ snprintf(p, desc+sizeof(desc)-p, "/usb-*@%x", usbdev->port+1);
return find_prio(desc);
}