]> mj.ucw.cz Git - pciutils.git/blobdiff - lib/generic.c
Fixed calls to config_fetch()
[pciutils.git] / lib / generic.c
index d9a9bdd76ad3950d5ccc8f15b2375df81dbf0217..d4f26000f87c5fbaca8bedccc0cef4a8b1f3e3a5 100644 (file)
@@ -1,6 +1,4 @@
 /*
- *     $Id: generic.c,v 1.7 2002/03/30 15:39:25 mj Exp $
- *
  *     The PCI Library -- Generic Direct Access Functions
  *
  *     Copyright (c) 1997--2000 Martin Mares <mj@ucw.cz>
@@ -16,7 +14,7 @@ void
 pci_generic_scan_bus(struct pci_access *a, byte *busmap, int bus)
 {
   int dev, multi, ht;
-  struct pci_dev *t = pci_alloc_dev(a);
+  struct pci_dev *t;
 
   a->debug("Scanning bus %02x for devices...\n", bus);
   if (busmap[bus])
@@ -25,18 +23,19 @@ pci_generic_scan_bus(struct pci_access *a, byte *busmap, int bus)
       return;
     }
   busmap[bus] = 1;
+  t = pci_alloc_dev(a);
   t->bus = bus;
   for(dev=0; dev<32; dev++)
     {
       t->dev = dev;
       multi = 0;
-      for(t->func=0; t->func<8; t->func++)
+      for(t->func=0; !t->func || multi && t->func<8; t->func++)
        {
          u32 vd = pci_read_long(t, PCI_VENDOR_ID);
          struct pci_dev *d;
 
          if (!vd || vd == 0xffffffff)
-           break;
+           continue;
          ht = pci_read_byte(t, PCI_HEADER_TYPE);
          if (!t->func)
            multi = ht & 0x80;
@@ -61,10 +60,9 @@ pci_generic_scan_bus(struct pci_access *a, byte *busmap, int bus)
            default:
              a->debug("Device %02x:%02x.%d has unknown header type %02x.\n", d->bus, d->dev, d->func, ht);
            }
-         if (!multi)
-           break;
        }
     }
+  pci_free_dev(t);
 }
 
 void