]> mj.ucw.cz Git - pciutils.git/commitdiff
Replaced the method_params array by library parameters.
authorMartin Mares <mj@ucw.cz>
Tue, 12 Feb 2008 08:54:36 +0000 (09:54 +0100)
committerMartin Mares <mj@ucw.cz>
Tue, 12 Feb 2008 08:54:36 +0000 (09:54 +0100)
This change is backward incompatible, but hopefully nobody used this
ill-thought interface.

common.c
lib/aix-device.c
lib/dump.c
lib/fbsd-device.c
lib/nbsd-libpci.c
lib/obsd-device.c
lib/pci.h
lib/proc.c
lib/sysfs.c
lspci.c

index 7e53157773dcfebacfc47428f647e0a9c3a0db67..ed439b4d54868c282a9a110789b199f1c91cbea7 100644 (file)
--- a/common.c
+++ b/common.c
@@ -1,7 +1,7 @@
 /*
  *     The PCI Utilities -- Common Functions
  *
- *     Copyright (c) 1997--2006 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.
  */
@@ -73,7 +73,7 @@ parse_generic_option(int i, struct pci_access *pacc, char *optarg)
     {
 #ifdef PCI_HAVE_PM_LINUX_PROC
     case 'P':
-      pacc->method_params[PCI_ACCESS_PROC_BUS_PCI] = optarg;
+      pci_set_param(pacc, "proc.path", optarg);
       pacc->method = PCI_ACCESS_PROC_BUS_PCI;
       break;
 #endif
@@ -89,7 +89,7 @@ parse_generic_option(int i, struct pci_access *pacc, char *optarg)
 #endif
 #ifdef PCI_HAVE_PM_DUMP
     case 'F':
-      pacc->method_params[PCI_ACCESS_DUMP] = optarg;
+      pci_set_param(pacc, "dump.name", optarg);
       pacc->method = PCI_ACCESS_DUMP;
       break;
 #endif
index e02c98dc4cd647597d0dfe20c760b4ea1c40e385..2febd7973092b9e9e412ea2006d3203186475e9d 100644 (file)
@@ -122,12 +122,6 @@ aix_bus_number(char *name)
 
 /* Method entries */
 
-static void
-aix_config(struct pci_access *a)
-{
-  a->method_params[PCI_ACCESS_AIX_DEVICE] = NULL;
-}
-
 static int
 aix_detect(struct pci_access *a)
 {
@@ -266,7 +260,7 @@ aix_write(struct pci_dev *d, int pos, byte *buf, int len)
 
 struct pci_methods pm_aix_device = {
   "AIX-device",
-  aix_config,
+  NULL,
   aix_detect,
   aix_init,
   aix_cleanup,
index 04837e64f193304b9270cc4cf84df8a6ca9b8d9b..9bf50af827816c772ad01bf6496be250f487645d 100644 (file)
@@ -1,7 +1,7 @@
 /*
  *     The PCI Library -- Reading of Bus Dumps
  *
- *     Copyright (c) 1997--2005 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.
  */
@@ -18,10 +18,17 @@ struct dump_data {
   byte data[1];
 };
 
+static void
+dump_config(struct pci_access *a)
+{
+  pci_define_param(a, "dump.name", "", "Name of the bus dump file to read from");
+}
+
 static int
 dump_detect(struct pci_access *a)
 {
-  return !!a->method_params[PCI_ACCESS_DUMP];
+  char *name = pci_get_param(a, "dump.name");
+  return name && name[0];
 }
 
 static void
@@ -49,7 +56,7 @@ dump_validate(char *s, char *fmt)
 static void
 dump_init(struct pci_access *a)
 {
-  char *name = a->method_params[PCI_ACCESS_DUMP];
+  char *name = pci_get_param(a, "dump.name");
   FILE *f;
   char buf[256];
   struct pci_dev *dev = NULL;
@@ -157,7 +164,7 @@ dump_cleanup_dev(struct pci_dev *d)
 
 struct pci_methods pm_dump = {
   "dump",
-  NULL,                                        /* config */
+  dump_config,
   dump_detect,
   dump_init,
   dump_cleanup,
index 875480daa332f29882d7326539e36657b8440879..328190627312025341f60b9e96b3b82fde1c5c12 100644 (file)
 static void
 fbsd_config(struct pci_access *a)
 {
-  a->method_params[PCI_ACCESS_FBSD_DEVICE] = PCI_PATH_FBSD_DEVICE;
+  pci_define_param(a, "fbsd.path", PCI_PATH_FBSD_DEVICE, "Path to the FreeBSD PCI device");
 }
 
 static int
 fbsd_detect(struct pci_access *a)
 {
-  char *name = a->method_params[PCI_ACCESS_FBSD_DEVICE];
+  char *name = pci_get_param(a, "fbsd.path");
 
   if (access(name, R_OK))
     {
@@ -53,7 +53,7 @@ fbsd_detect(struct pci_access *a)
 static void
 fbsd_init(struct pci_access *a)
 {
-  char *name = a->method_params[PCI_ACCESS_FBSD_DEVICE];
+  char *name = pci_get_param(a, "fbsd.path");
 
   a->fd = open(name, O_RDWR, 0);
   if (a->fd < 0)
index 81600a0689051b9bcb501be2d3a6a04898653c22..7955570dcd24a1cea20443043f632bcd23060ad7 100644 (file)
 static void
 nbsd_config(struct pci_access *a)
 {
-  a->method_params[PCI_ACCESS_NBSD_LIBPCI] = PCI_PATH_NBSD_DEVICE;
+  pci_define_param(a, "nbsd.path", PCI_PATH_NBSD_DEVICE, "Path to the NetBSD PCI device");
 }
 
 static int
 nbsd_detect(struct pci_access *a)
 {
-  char *name = a->method_params[PCI_ACCESS_NBSD_LIBPCI];
+  char *name = pci_get_param(a, "nbsd.path");
 
   if (access(name, R_OK))
     {
@@ -48,7 +48,7 @@ nbsd_detect(struct pci_access *a)
 static void
 nbsd_init(struct pci_access *a)
 {
-  char *name = a->method_params[PCI_ACCESS_NBSD_LIBPCI];
+  char *name = pci_get_param(a, "nbsd.path");
   int mode = a->writeable ? O_RDWR : O_RDONLY;
 
   a->fd = open(name, mode, 0);
index 721f2f53c31d81193ff6b735fd41283253854043..217e7873cf8a3a4a988055d851accb5746b8596c 100644 (file)
 static void
 obsd_config(struct pci_access *a)
 {
-  a->method_params[PCI_ACCESS_OBSD_DEVICE] = PCI_PATH_OBSD_DEVICE;
+  pci_define_param(a, "obsd.path", PCI_PATH_OBSD_DEVICE, "Path to the OpenBSD PCI device");
 }
 
 static int
 obsd_detect(struct pci_access *a)
 {
-  char *name = a->method_params[PCI_ACCESS_OBSD_DEVICE];
+  char *name = pci_get_param(a, "obsd.path");
 
   if (access(name, R_OK))
     {
@@ -39,7 +39,7 @@ obsd_detect(struct pci_access *a)
 static void
 obsd_init(struct pci_access *a)
 {
-  char *name = a->method_params[PCI_ACCESS_OBSD_DEVICE];
+  char *name = pci_get_param(a, "obsd.path");
 
   a->fd = open(name, O_RDWR, 0);
   if (a->fd < 0)
index 4d18385dcfa48ee36e77517bdfe825f5fa76196e..ce42deb589e162f887522e4664041ded1a9eeabe 100644 (file)
--- a/lib/pci.h
+++ b/lib/pci.h
@@ -23,23 +23,22 @@ struct pci_methods;
 
 enum pci_access_type {
   /* Known access methods, remember to update access.c as well */
-  PCI_ACCESS_AUTO,                     /* Autodetection (params: none) */
-  PCI_ACCESS_SYS_BUS_PCI,              /* Linux /sys/bus/pci (params: path) */
-  PCI_ACCESS_PROC_BUS_PCI,             /* Linux /proc/bus/pci (params: path) */
-  PCI_ACCESS_I386_TYPE1,               /* i386 ports, type 1 (params: none) */
-  PCI_ACCESS_I386_TYPE2,               /* i386 ports, type 2 (params: none) */
-  PCI_ACCESS_FBSD_DEVICE,              /* FreeBSD /dev/pci (params: path) */
+  PCI_ACCESS_AUTO,                     /* Autodetection */
+  PCI_ACCESS_SYS_BUS_PCI,              /* Linux /sys/bus/pci */
+  PCI_ACCESS_PROC_BUS_PCI,             /* Linux /proc/bus/pci */
+  PCI_ACCESS_I386_TYPE1,               /* i386 ports, type 1 */
+  PCI_ACCESS_I386_TYPE2,               /* i386 ports, type 2 */
+  PCI_ACCESS_FBSD_DEVICE,              /* FreeBSD /dev/pci */
   PCI_ACCESS_AIX_DEVICE,               /* /dev/pci0, /dev/bus0, etc. */
   PCI_ACCESS_NBSD_LIBPCI,              /* NetBSD libpci */
   PCI_ACCESS_OBSD_DEVICE,              /* OpenBSD /dev/pci */
-  PCI_ACCESS_DUMP,                     /* Dump file (params: filename) */
+  PCI_ACCESS_DUMP,                     /* Dump file */
   PCI_ACCESS_MAX
 };
 
 struct pci_access {
   /* Options you can change: */
   unsigned int method;                 /* Access method */
-  char *method_params[PCI_ACCESS_MAX]; /* Parameters for the methods */
   int writeable;                       /* Open in read/write mode */
   int buscentric;                      /* Bus-centric view of the world */
 
index f493e491e771684c0ebd0e87843d3319bf89f7cb..20f57902b4207507559a9739b68dae2cb958064d 100644 (file)
 static void
 proc_config(struct pci_access *a)
 {
-  a->method_params[PCI_ACCESS_PROC_BUS_PCI] = PCI_PATH_PROC_BUS_PCI;
+  pci_define_param(a, "proc.path", PCI_PATH_PROC_BUS_PCI, "Path to the procfs bus tree");
 }
 
 static int
 proc_detect(struct pci_access *a)
 {
-  char *name = a->method_params[PCI_ACCESS_PROC_BUS_PCI];
+  char *name = pci_get_param(a, "proc.path");
 
   if (access(name, R_OK))
     {
@@ -60,7 +60,7 @@ proc_scan(struct pci_access *a)
   FILE *f;
   char buf[512];
 
-  if (snprintf(buf, sizeof(buf), "%s/devices", a->method_params[PCI_ACCESS_PROC_BUS_PCI]) == sizeof(buf))
+  if (snprintf(buf, sizeof(buf), "%s/devices", pci_get_param(a, "proc.path")) == sizeof(buf))
     a->error("File name too long");
   f = fopen(buf, "r");
   if (!f)
@@ -124,7 +124,7 @@ proc_setup(struct pci_dev *d, int rw)
       if (a->fd >= 0)
        close(a->fd);
       e = snprintf(buf, sizeof(buf), "%s/%02x/%02x.%d",
-                  a->method_params[PCI_ACCESS_PROC_BUS_PCI],
+                  pci_get_param(a, "proc.path"),
                   d->bus, d->dev, d->func);
       if (e < 0 || e >= (int) sizeof(buf))
        a->error("File name too long");
index a6cbd57a6c753c278647fc2c859f1e4df475e18d..581bedbd12938244e8d0b9e722d78b18bcee3e98 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] = 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
diff --git a/lspci.c b/lspci.c
index 5047559367132e2573b0052a61c778907e34705b..7879f9b88c51fa3ff0a897a395ada2cba56dcc4a 100644 (file)
--- a/lspci.c
+++ b/lspci.c
@@ -1584,13 +1584,16 @@ static char *
 find_driver(struct device *d, char *buf)
 {
   struct pci_dev *dev = d->dev;
-  char *base = dev->access->method_params[PCI_ACCESS_SYS_BUS_PCI];
-  char name[1024], *drv;
+  char name[1024], *drv, *base;
   int n;
 
   if (dev->access->method != PCI_ACCESS_SYS_BUS_PCI)
     return NULL;
 
+  base = pci_get_param(dev->access, "sysfs.path");
+  if (!base || !base[0])
+    return NULL;
+
   n = snprintf(name, sizeof(name), "%s/devices/%04x:%02x:%02x.%d/driver",
               base, dev->domain, dev->bus, dev->dev, dev->func);
   if (n < 0 || n >= (int)sizeof(name))