]> mj.ucw.cz Git - pciutils.git/blobdiff - lib/sysfs.c
Let filters accept vendor and device 0xffff.
[pciutils.git] / lib / sysfs.c
index 74f6992bb87947bbbe3924028f7dadc2426e8581..ea386fa8fbdfbf4a7dd616ef8469eed2c4bed7a7 100644 (file)
@@ -2,7 +2,7 @@
  *     The PCI Library -- Configuration Access via /sys/bus/pci
  *
  *     Copyright (c) 2003 Matthew Wilcox <willy@fc.hp.com>
- *     Copyright (c) 1997--2003 Martin Mares <mj@ucw.cz>
+ *     Copyright (c) 1997--2008 Martin Mares <mj@ucw.cz>
  *
  *     Can be freely distributed and used under the terms of the GNU GPL.
  */
 static void
 sysfs_config(struct pci_access *a)
 {
-  a->method_params[PCI_ACCESS_SYS_BUS_PCI] = PATH_SYS_BUS_PCI;
+  pci_define_param(a, "sysfs.path", PCI_PATH_SYS_BUS_PCI, "Path to the sysfs device tree");
 }
 
 static inline char *
 sysfs_name(struct pci_access *a)
 {
-  return a->method_params[PCI_ACCESS_SYS_BUS_PCI];
+  return pci_get_param(a, "sysfs.path");
 }
 
 static int
@@ -112,12 +112,6 @@ sysfs_get_resources(struct pci_dev *d)
        break;
       if (sscanf(buf, "%llx %llx", &start, &end) != 2)
        a->error("Syntax error in %s", namebuf);
-      if (start != (unsigned long long)(pciaddr_t) start ||
-         end != (unsigned long long)(pciaddr_t) end)
-       {
-         a->warning("Resource %d in %s has a 64-bit address, ignoring", i, namebuf);
-         start = end = 0;
-       }
       if (start)
        size = end - start + 1;
       else
@@ -169,18 +163,14 @@ static void sysfs_scan(struct pci_access *a)
        {
          sysfs_get_resources(d);
          d->irq = sysfs_get_value(d, "irq");
-         d->known_fields = PCI_FILL_IRQ | PCI_FILL_BASES | PCI_FILL_ROM_BASE | PCI_FILL_SIZES;
-#if 0
          /*
-          *  We prefer reading these from the config registers, it's faster.
-          *  However, it would be possible and maybe even useful to hack the kernel
-          *  to believe that some device has a different ID. If you do it, just
-          *  enable this piece of code.  --mj
+          *  We could read these faster from the config registers, but we want to give
+          *  the kernel a chance to fix up ID's and especially classes of broken devices.
           */
          d->vendor_id = sysfs_get_value(d, "vendor");
          d->device_id = sysfs_get_value(d, "device");
-         d->known_fields |= PCI_FILL_IDENT;
-#endif
+         d->device_class = sysfs_get_value(d, "class") >> 8;
+         d->known_fields = PCI_FILL_IDENT | PCI_FILL_CLASS | PCI_FILL_IRQ | PCI_FILL_BASES | PCI_FILL_ROM_BASE | PCI_FILL_SIZES;
        }
       pci_link_dev(a, d);
     }
@@ -260,7 +250,8 @@ static void sysfs_cleanup_dev(struct pci_dev *d)
 }
 
 struct pci_methods pm_linux_sysfs = {
-  "Linux-sysfs",
+  "linux-sysfs",
+  "The sys filesystem on Linux",
   sysfs_config,
   sysfs_detect,
   sysfs_init,