/*
- * Linux PCI Utilities -- Manipulate PCI Configuration Registers
+ * The PCI Utilities -- Manipulate PCI Configuration Registers
*
- * Copyright (c) 1998--2003 Martin Mares <mj@ucw.cz>
+ * Copyright (c) 1998--2008 Martin Mares <mj@ucw.cz>
*
* Can be freely distributed and used under the terms of the GNU GPL.
*/
#include <stdarg.h>
#include <unistd.h>
+#define PCIUTILS_SETPCI
#include "pciutils.h"
static int force; /* Don't complain if no devices match */
static int verbose; /* Verbosity level */
static int demo_mode; /* Only show */
+const char program_name[] = "setpci";
+
static struct pci_access *pacc;
struct value {
{
if (verbose)
printf(" = ");
- if (!demo_mode)
+ switch (width)
{
- switch (width)
- {
- case 1:
- x = pci_read_byte(dev, addr);
- break;
- case 2:
- x = pci_read_word(dev, addr);
- break;
- default:
- x = pci_read_long(dev, addr);
- break;
- }
- printf(formats[width], x);
+ case 1:
+ x = pci_read_byte(dev, addr);
+ break;
+ case 2:
+ x = pci_read_word(dev, addr);
+ break;
+ default:
+ x = pci_read_long(dev, addr);
+ break;
}
- else
- putchar('?');
+ printf(formats[width], x);
putchar('\n');
}
}
{ 0x00, 0, NULL }
};
-static void NONRET
+static void NONRET PCI_PRINTF(1,2)
usage(char *msg, ...)
{
va_list args;
fprintf(stderr, "\n\n");
}
fprintf(stderr,
-"Usage: setpci [<options>] (<device>+ <reg>[=<values>]*)*\n\
--f\t\tDon't complain if there's nothing to do\n\
--v\t\tBe verbose\n\
--D\t\tList changes, don't commit them\n"
+"Usage: setpci [<options>] (<device>+ <reg>[=<values>]*)*\n"
+"\n"
+"General options:\n"
+"-f\t\tDon't complain if there's nothing to do\n"
+"-v\t\tBe verbose\n"
+"-D\t\tList changes, don't commit them\n"
+"\n"
+"PCI access options:\n"
GENERIC_HELP
-"<device>:\t-s [[<bus>]:][<slot>][.[<func>]]\n"
+"\n"
+"Setting commands:\n"
+"<device>:\t-s [[[<domain>]:][<bus>]:][<slot>][.[<func>]]\n"
"\t|\t-d [<vendor>]:[<device>]\n"
"<reg>:\t\t<number>[.(B|W|L)]\n"
" |\t\t<name>\n"
case 'L':
op->width = 4; break;
default:
- usage("Invalid width \"%s\"", *e);
+ usage("Invalid width \"%c\"", *e);
}
}
else
ll = r->offset;
op->width = r->width;
}
- if (ll > 0x100 || ll + op->width*((n < 0) ? 1 : n) > 0x100)
+ if (ll > 0x1000 || ll + op->width*((n < 0) ? 1 : n) > 0x1000)
die("Register number out of range!");
if (ll & (op->width - 1))
die("Unaligned register address!");