usb: fix boot paths
[seabios.git] / src / boot.c
index 3fda39a9a9219556da57f768d1c1f00303c37320..93928d38dd5ff3df57d100b5e57e08cb0621992f 100644 (file)
@@ -98,22 +98,9 @@ find_prio(const char *glob)
 
 #define FW_PCI_DOMAIN "/pci@i0cf8"
 
-static struct pci_device *
-find_pci(u16 bdf)
-{
-    struct pci_device *pci;
-    foreachpci(pci) {
-        if (pci->bdf == bdf)
-            return pci;
-    }
-    return NULL;
-}
-
 static char *
 build_pci_path(char *buf, int max, const char *devname, struct pci_device *pci)
 {
-    if (!pci)
-        return buf;
     // Build the string path of a bdf - for example: /pci@i0cf8/isa@1,2
     char *p = buf;
     if (pci->parent) {
@@ -169,13 +156,13 @@ int bootprio_find_fdc_device(struct pci_device *pci, int port, int fdid)
     return find_prio(desc);
 }
 
-int bootprio_find_pci_rom(int bdf, int instance)
+int bootprio_find_pci_rom(struct pci_device *pci, int instance)
 {
     if (!CONFIG_BOOTORDER)
         return -1;
     // Find pci rom - for example: /pci@i0cf8/scsi@3:rom2
     char desc[256], *p;
-    p = build_pci_path(desc, sizeof(desc), "*", find_pci(bdf));
+    p = build_pci_path(desc, sizeof(desc), "*", pci);
     if (instance)
         snprintf(p, desc+sizeof(desc)-p, ":rom%d", instance);
     return find_prio(desc);
@@ -204,9 +191,9 @@ int bootprio_find_usb(struct pci_device *pci, u64 path)
     for (i=56; i>0; i-=8) {
         int port = (path >> i) & 0xff;
         if (port != 0xff)
-            p += snprintf(p, desc+sizeof(desc)-p, "/hub@%x", port);
+            p += snprintf(p, desc+sizeof(desc)-p, "/hub@%x", port+1);
     }
-    snprintf(p, desc+sizeof(desc)-p, "/*@%x", (u32)(path & 0xff));
+    snprintf(p, desc+sizeof(desc)-p, "/*@%x", (u32)(path & 0xff)+1);
     return find_prio(desc);
 }