intel_reg_read: support reading multiple registers

The registers must be passed on the command line and will be read
sequentially, one at a time.

Signed-off-by: Eugeni Dodonov <eugeni.dodonov@intel.com>
This commit is contained in:
Eugeni Dodonov 2012-02-28 17:33:54 -03:00
parent b7464e4032
commit 8d45456428

View File

@ -43,7 +43,7 @@ static void dump_range(uint32_t start, uint32_t end)
static void usage(char *cmdname) static void usage(char *cmdname)
{ {
printf("Usage: %s [-f | addr]\n", cmdname); printf("Usage: %s [-f] [addr1] [addr2] .. [addrN]\n", cmdname);
printf("\t -f : read back full range of registers.\n"); printf("\t -f : read back full range of registers.\n");
printf("\t WARNING! This option may result in a machine hang!\n"); printf("\t WARNING! This option may result in a machine hang!\n");
printf("\t addr : in 0xXXXX format\n"); printf("\t addr : in 0xXXXX format\n");
@ -53,7 +53,7 @@ int main(int argc, char** argv)
{ {
int ret = 0; int ret = 0;
uint32_t reg; uint32_t reg;
int ch; int i, ch;
char *cmdname = strdup(argv[0]); char *cmdname = strdup(argv[0]);
int full_dump = 0; int full_dump = 0;
@ -71,7 +71,7 @@ int main(int argc, char** argv)
argc -= optind; argc -= optind;
argv += optind; argv += optind;
if (argc != 1) { if (argc < 1) {
usage(cmdname); usage(cmdname);
ret = 1; ret = 1;
goto out; goto out;
@ -95,8 +95,10 @@ int main(int argc, char** argv)
dump_range(0x70000, 0x72fff); /* display and cursor registers */ dump_range(0x70000, 0x72fff); /* display and cursor registers */
dump_range(0x73000, 0x73fff); /* performance counters */ dump_range(0x73000, 0x73fff); /* performance counters */
} else { } else {
sscanf(argv[0], "0x%x", &reg); for (i=0; i < argc; i++) {
dump_range(reg, reg + 4); sscanf(argv[i], "0x%x", &reg);
dump_range(reg, reg + 4);
}
} }
intel_register_access_fini(); intel_register_access_fini();