#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) {
return p;
}
-int bootprio_find_pci_device(int bdf)
+int bootprio_find_pci_device(struct pci_device *pci)
{
if (!CONFIG_BOOTORDER)
return -1;
// Find pci device - for example: /pci@i0cf8/ethernet@5
char desc[256];
- build_pci_path(desc, sizeof(desc), "*", find_pci(bdf));
+ build_pci_path(desc, sizeof(desc), "*", pci);
return find_prio(desc);
}
-int bootprio_find_ata_device(int bdf, int chanid, int slave)
+int bootprio_find_ata_device(struct pci_device *pci, int chanid, int slave)
{
if (!CONFIG_BOOTORDER)
return -1;
- if (bdf == -1)
+ if (!pci)
// support only pci machine for now
return -1;
// Find ata drive - for example: /pci@i0cf8/ide@1,1/drive@1/disk@0
char desc[256], *p;
- p = build_pci_path(desc, sizeof(desc), "*", find_pci(bdf));
+ p = build_pci_path(desc, sizeof(desc), "*", pci);
snprintf(p, desc+sizeof(desc)-p, "/drive@%x/disk@%x", chanid, slave);
return find_prio(desc);
}
-int bootprio_find_fdc_device(int bdf, int port, int fdid)
+int bootprio_find_fdc_device(struct pci_device *pci, int port, int fdid)
{
if (!CONFIG_BOOTORDER)
return -1;
- if (bdf == -1)
+ if (!pci)
// support only pci machine for now
return -1;
// Find floppy - for example: /pci@i0cf8/isa@1/fdc@03f1/floppy@0
char desc[256], *p;
- p = build_pci_path(desc, sizeof(desc), "isa", find_pci(bdf));
+ p = build_pci_path(desc, sizeof(desc), "isa", pci);
snprintf(p, desc+sizeof(desc)-p, "/fdc@%04x/floppy@%x", port, 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);
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);
}