summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorEugeni Dodonov <eugeni.dodonov@intel.com>2012-02-28 17:20:35 -0300
committerEugeni Dodonov <eugeni.dodonov@intel.com>2012-03-13 17:55:51 -0300
commitb7464e4032a181fc743fe531c6ea271c099b9a74 (patch)
tree31dadf74ae156291485acff8f1e4f5769e510eac /tools
parent628ad0c91bad85f48a34ae7cefd53e686f99a3a8 (diff)
intel_reg_read: add support for getopt
This will allow us to pass more options to it in the future. v2: fix whitespacing issues and improve scary warning text as suggested by Paul Menzel. Reviewed-by: Paul Menzel <paulepanter@users.sourceforge.net> Signed-off-by: Eugeni Dodonov <eugeni.dodonov@intel.com>
Diffstat (limited to 'tools')
-rw-r--r--tools/intel_reg_read.c44
1 files changed, 35 insertions, 9 deletions
diff --git a/tools/intel_reg_read.c b/tools/intel_reg_read.c
index cad30ff..95d28c5 100644
--- a/tools/intel_reg_read.c
+++ b/tools/intel_reg_read.c
@@ -41,21 +41,45 @@ static void dump_range(uint32_t start, uint32_t end)
*(volatile uint32_t *)((volatile char*)mmio + i));
}
+static void usage(char *cmdname)
+{
+ printf("Usage: %s [-f | addr]\n", cmdname);
+ printf("\t -f : read back full range of registers.\n");
+ printf("\t WARNING! This option may result in a machine hang!\n");
+ printf("\t addr : in 0xXXXX format\n");
+}
+
int main(int argc, char** argv)
{
+ int ret = 0;
uint32_t reg;
+ int ch;
+ char *cmdname = strdup(argv[0]);
+ int full_dump = 0;
+
+ while ((ch = getopt(argc, argv, "fh")) != -1) {
+ switch(ch) {
+ case 'f':
+ full_dump = 1;
+ break;
+ case 'h':
+ usage(cmdname);
+ ret = 1;
+ goto out;
+ }
+ }
+ argc -= optind;
+ argv += optind;
- if (argc != 2) {
- printf("Usage: %s [-f | addr]\n", argv[0]);
- printf("\t -f : read back full range of registers.\n");
- printf("\t WARNING! This could be danger to hang the machine!\n");
- printf("\t addr : in 0xXXXX format\n");
- exit(1);
+ if (argc != 1) {
+ usage(cmdname);
+ ret = 1;
+ goto out;
}
intel_register_access_init(intel_get_pci_device(), 0);
- if (!strcmp(argv[1], "-f")) {
+ if (full_dump) {
dump_range(0x00000, 0x00fff); /* VGA registers */
dump_range(0x02000, 0x02fff); /* instruction, memory, interrupt control registers */
dump_range(0x03000, 0x031ff); /* FENCE and PPGTT control registers */
@@ -71,12 +95,14 @@ int main(int argc, char** argv)
dump_range(0x70000, 0x72fff); /* display and cursor registers */
dump_range(0x73000, 0x73fff); /* performance counters */
} else {
- sscanf(argv[1], "0x%x", &reg);
+ sscanf(argv[0], "0x%x", &reg);
dump_range(reg, reg + 4);
}
intel_register_access_fini();
- return 0;
+out:
+ free(cmdname);
+ return ret;
}