summaryrefslogtreecommitdiff
path: root/common.c
diff options
context:
space:
mode:
authorMartin Mares <mj@ucw.cz>2008-02-20 12:18:19 +0100
committerMartin Mares <mj@ucw.cz>2008-02-20 12:18:19 +0100
commita2bf30a4fd407c55e8172e2f6fd158725ccb90b6 (patch)
tree971b143dc78a2b88ac43e01e2914ba23b95fcd57 /common.c
parentdaf1afbf693d83566863e6dc5447e0bebdd1c679 (diff)
parent4d59f9e543c291e1454c638e32cbe94af66b11b8 (diff)
downloadpciutils-network.tar.gz
Merge with git+ssh://git.ucw.cz/home/mj/GIT/pciutils.git#networknetwork
Diffstat (limited to 'common.c')
-rw-r--r--common.c61
1 files changed, 53 insertions, 8 deletions
diff --git a/common.c b/common.c
index 7d52530..ed39b87 100644
--- 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.
*/
@@ -44,17 +44,56 @@ xrealloc(void *ptr, unsigned int howmuch)
return p;
}
+static void
+set_pci_method(struct pci_access *pacc, char *arg)
+{
+ char *name;
+ int i;
+
+ if (!strcmp(arg, "help"))
+ {
+ printf("Known PCI access methods:\n\n");
+ for (i=0; name = pci_get_method_name(i); i++)
+ if (name[0])
+ printf("%s\n", name);
+ exit(0);
+ }
+ else
+ {
+ i = pci_lookup_method(arg);
+ if (i < 0)
+ die("No such PCI access method: %s (see `-A help' for a list)", arg);
+ pacc->method = i;
+ }
+}
+
+static void
+set_pci_option(struct pci_access *pacc, char *arg)
+{
+ if (!strcmp(arg, "help"))
+ {
+ struct pci_param *p;
+ printf("Known PCI access parameters:\n\n");
+ for (p=NULL; p=pci_walk_params(pacc, p);)
+ printf("%-20s %s (%s)\n", p->param, p->help, p->value);
+ exit(0);
+ }
+ else
+ {
+ char *sep = strchr(arg, '=');
+ if (!sep)
+ die("Invalid PCI access parameter syntax: %s", arg);
+ *sep++ = 0;
+ if (pci_set_param(pacc, arg, sep) < 0)
+ die("Unrecognized PCI access parameter: %s (see `-O help' for a list)", arg);
+ }
+}
+
int
parse_generic_option(int i, struct pci_access *pacc, char *optarg)
{
switch (i)
{
-#ifdef PCI_HAVE_PM_LINUX_PROC
- case 'P':
- pacc->method_params[PCI_ACCESS_PROC_BUS_PCI] = optarg;
- pacc->method = PCI_ACCESS_PROC_BUS_PCI;
- break;
-#endif
#ifdef PCI_HAVE_PM_INTEL_CONF
case 'H':
if (!strcmp(optarg, "1"))
@@ -67,13 +106,19 @@ 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
+ case 'A':
+ set_pci_method(pacc, optarg);
+ break;
case 'G':
pacc->debugging++;
break;
+ case 'O':
+ set_pci_option(pacc, optarg);
+ break;
default:
return 0;
}