]> git.ipfire.org Git - thirdparty/pciutils.git/commitdiff
Sylixos: Trying to simplify probing mechanism
authorMartin Mares <mj@ucw.cz>
Sun, 18 Mar 2018 17:53:18 +0000 (18:53 +0100)
committerMartin Mares <mj@ucw.cz>
Sun, 18 Mar 2018 17:53:18 +0000 (18:53 +0100)
lib/configure
lib/sylixos-device.c

index 1953c5a833971eed8d5f3ee920c33d652d0e21f0..f8f019686b81c6c3e85c521cb25017c42f3e7d63 100755 (executable)
@@ -145,7 +145,6 @@ case $sys in
                echo >>$c '#define PCI_PATH_SYLIXOS_DEVICE "/proc/pci"'
                echo >>$c '#define PCI_HAVE_64BIT_ADDRESS'
                echo >>$c '#define PCI_HAVE_PM_SYLIXOS_DEVICE'
-               echo >>$c '#define PCI_SCAN_FUNC "PCI_SCAN_TBL"'
                IDSDIR="/etc/pci"
                ;;
        *)
index 4bc207427a69a1509dab88a3e1eb44b90201a99a..a23438ee15a7d2441639ea7bf7d3918a9e52e3ba 100644 (file)
 
 #include "internal.h"
 
-#define PCI_VENDOR_ID_IS_INVALID(vendor) (((vendor) == 0xffff) || ((vendor) == 0x0000))
-
-typedef struct {
-  struct pci_access *a;
-  byte *busmap;
-  int bus;
-} pci_dev_scan;
-
-static int
-sylixos_pci_traversal (int (*function)(), void *arg, int min_bus, int max_bus)
-{
-  int bus, dev, func;
-  u8 header;
-  u16 vendor;
-
-  if (!function || (min_bus < 0) || (max_bus < 0))
-    return PX_ERROR;
-
-  min_bus = (min_bus > (PCI_MAX_BUS - 1)) ? (PCI_MAX_BUS - 1) : min_bus;
-  max_bus = (max_bus > (PCI_MAX_BUS - 1)) ? (PCI_MAX_BUS - 1) : max_bus;
-
-  for (bus = min_bus; bus <= max_bus; bus++)
-    {
-      for (dev = 0; dev < PCI_MAX_SLOTS; dev++)
-       {
-         for (func = 0; func < PCI_MAX_FUNCTIONS; func++)
-           {
-             pciConfigInWord(bus, dev, func, PCI_VENDOR_ID, &vendor);
-             if (PCI_VENDOR_ID_IS_INVALID(vendor))
-               {
-                 if (func == 0)
-                   break;
-                 continue;
-               }
-
-             if (function(bus, dev, func, arg) != ERROR_NONE)
-               goto  __out;
-
-             if (func == 0)
-               {
-                 pciConfigInByte(bus, dev, func, PCI_HEADER_TYPE, &header);
-                 if ((header & PCI_HEADER_MULTI_FUNC) != PCI_HEADER_MULTI_FUNC)
-                   break;
-               }
-           }
-       }
-    }
-
-__out:
-  return ERROR_NONE;
-}
-
-static int
-pci_dev_list_create (int  bus, int  dev, int  func, void *arg)
-{
-  pci_dev_scan *f = (pci_dev_scan *)arg;
-  struct pci_dev *d;
-  u32 vd;
-
-  f->busmap[bus] = 1;
-  d = pci_alloc_dev(f->a);
-  d->bus = bus;
-  d->dev = dev;
-  d->func = func;
-
-  vd = pci_read_long(d, PCI_VENDOR_ID);
-  d->vendor_id = vd & 0xffff;
-  d->device_id = vd >> 16U;
-  d->known_fields = PCI_FILL_IDENT;
-  d->hdrtype = pci_read_byte(d, PCI_HEADER_TYPE) & 0x7f;
-  pci_link_dev(f->a, d);
-
-  return ERROR_NONE;
-}
-
-static void
-pci_generic_scan_bus_tbl(struct pci_access *a, byte *busmap, int bus)
-{
-  pci_dev_scan f;
-
-  f.a = a;
-  f.busmap = busmap;
-  f.bus = bus;
-
-  sylixos_pci_traversal(pci_dev_list_create, &f, bus, PCI_MAX_BUS);
-}
-
 static void
 sylixos_scan(struct pci_access *a)
 {
-  int se;
   u8 busmap[256];
-  char *env;
+  int bus;
 
   memset(busmap, 0, sizeof(busmap));
 
-  env = getenv(PCI_SCAN_FUNC);
-  if (!env)
-    {
-      pci_generic_scan_bus(a, busmap, 0);
-      return;
-    }
-
-  se = atoi(env);
-  if (se)
-    pci_generic_scan_bus_tbl(a, busmap, 0);
-  else
-    pci_generic_scan_bus(a, busmap, 0);
+  for (bus = 0; bus < PCI_MAX_BUS; bus++)
+    if (!busmap[bus])
+      pci_generic_scan_bus(a, busmap, bus);
 }
 
 static void
@@ -147,15 +50,13 @@ sylixos_detect(struct pci_access *a)
 }
 
 static void
-sylixos_init(struct pci_access *a)
+sylixos_init(struct pci_access *a UNUSED)
 {
-  a->fd = -1;
 }
 
 static void
-sylixos_cleanup(struct pci_access *a)
+sylixos_cleanup(struct pci_access *a UNUSED)
 {
-    a->fd = -1;
 }
 
 static int