* 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] = 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
{
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);
}
}
struct pci_methods pm_linux_sysfs = {
- "Linux-sysfs",
+ "linux-sysfs",
+ "The sys filesystem on Linux",
sysfs_config,
sysfs_detect,
sysfs_init,