diff options
author | Martin Mares <mj@ucw.cz> | 2008-02-20 12:18:19 +0100 |
---|---|---|
committer | Martin Mares <mj@ucw.cz> | 2008-02-20 12:18:19 +0100 |
commit | a2bf30a4fd407c55e8172e2f6fd158725ccb90b6 (patch) | |
tree | 971b143dc78a2b88ac43e01e2914ba23b95fcd57 /common.c | |
parent | daf1afbf693d83566863e6dc5447e0bebdd1c679 (diff) | |
parent | 4d59f9e543c291e1454c638e32cbe94af66b11b8 (diff) | |
download | pciutils-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.c | 61 |
1 files changed, 53 insertions, 8 deletions
@@ -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; } |