diff options
author | Kevin O'Connor <kevin@koconnor.net> | 2012-06-13 08:47:03 -0400 |
---|---|---|
committer | Kevin O'Connor <kevin@koconnor.net> | 2012-06-13 08:47:03 -0400 |
commit | 7fa31b5abf8992c949693d315932c5dc91791892 (patch) | |
tree | 684c33ba87ac9e4a2518cc6cd7c37fc9db3c90ab /src/boot.c | |
parent | 5283b2e6e11edf552ca255b43cd0ea0f133ff168 (diff) | |
download | seabios-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.c | 12 |
1 files changed, 9 insertions, 3 deletions
@@ -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); } |