Index: main/pci.c =================================================================== RCS file: /home/ts1/cvsroot/filo/main/pci.c,v retrieving revision 1.3 diff -u -r1.3 pci.c --- main/pci.c 14 Oct 2003 19:54:29 -0000 1.3 +++ main/pci.c 30 Oct 2003 12:22:17 -0000 @@ -6,37 +6,34 @@ static struct pci_dev *dev_list; static int n_devs; -static void pci_scan_bus(int bus) +static void pci_scan_bus(void) { - int devnum, fn, is_multi, vid; + int bus, devnum, fn, is_multi, vid; pci_addr addr; unsigned int htype; - for (devnum = 0; devnum < 32; devnum++) { - is_multi = 0; - for (fn = 0; fn==0 || (is_multi && fn<8); fn++) { - addr = PCI_ADDR(bus, devnum, fn); - vid = pci_read16(addr, PCI_VENDOR_ID); - if (vid==0xffff || vid==0) - continue; - - htype = pci_read8(addr, PCI_HEADER_TYPE); - if (fn == 0) - is_multi = htype & 0x80; - htype &= 0x7f; - - if (dev_list) { - dev_list[n_devs].addr = addr; - dev_list[n_devs].vendor = vid; - dev_list[n_devs].device = pci_read16(addr, PCI_DEVICE_ID); - dev_list[n_devs].devclass = pci_read16(addr, PCI_CLASS_DEVICE); - dev_list[n_devs].prog_if = pci_read8(addr, PCI_CLASS_PROG); + for (bus = 0; bus < 256; bus++) { + for (devnum = 0; devnum < 32; devnum++) { + is_multi = 0; + for (fn = 0; fn==0 || (is_multi && fn<8); fn++) { + addr = PCI_ADDR(bus, devnum, fn); + vid = pci_read16(addr, PCI_VENDOR_ID); + if (vid==0xffff || vid==0) + continue; + + htype = pci_read8(addr, PCI_HEADER_TYPE); + if (fn == 0) + is_multi = htype & 0x80; + + if (dev_list) { + dev_list[n_devs].addr = addr; + dev_list[n_devs].vendor = vid; + dev_list[n_devs].device = pci_read16(addr, PCI_DEVICE_ID); + dev_list[n_devs].devclass = pci_read16(addr, PCI_CLASS_DEVICE); + dev_list[n_devs].prog_if = pci_read8(addr, PCI_CLASS_PROG); + } + n_devs++; } - n_devs++; - - if (htype==PCI_HEADER_TYPE_BRIDGE - || htype==PCI_HEADER_TYPE_CARDBUS) - pci_scan_bus(pci_read8(addr, PCI_SECONDARY_BUS)); } } } @@ -46,13 +43,13 @@ /* Count devices */ dev_list = 0; debug("Scanning PCI: "); - pci_scan_bus(0); + pci_scan_bus(); debug("found %d devices\n", n_devs); /* Make the list */ dev_list = malloc(n_devs * sizeof(struct pci_dev)); n_devs = 0; - pci_scan_bus(0); + pci_scan_bus(); #if DEBUG {