diff options
author | Stuart Bennett <stuart@freedesktop.org> | 2009-04-04 02:23:17 +0100 |
---|---|---|
committer | Stuart Bennett <stuart@freedesktop.org> | 2009-04-04 17:25:34 +0100 |
commit | 272b6783b189171e4f3f8a87eb2f8ba92c1a6e83 (patch) | |
tree | 65b7f20aa41c3c3da2ee234f2730d78c7dff9f4d | |
parent | 8f6fb577184c6824b22542f555194049d6c67f2b (diff) |
Add 8 bit register read/set methods
-rw-r--r-- | radeontool.c | 38 |
1 files changed, 29 insertions, 9 deletions
diff --git a/radeontool.c b/radeontool.c index b7bf515..7d87ce9 100644 --- a/radeontool.c +++ b/radeontool.c @@ -126,6 +126,8 @@ static void usage(void) printf(" --skip=1 - use the second radeon card\n"); printf("\n"); printf(" regs - show a listing of some random registers\n"); + printf(" 8regmatch <pattern> - show 8 bit registers matching wildcard pattern\n"); + printf(" 8regset <pattern> <value> - set 8 bit registers matching wildcard pattern\n"); printf(" regmatch <pattern> - show registers matching wildcard pattern\n"); printf(" regset <pattern> <value> - set registers matching wildcard pattern\n"); printf("\n"); @@ -376,7 +378,7 @@ static struct { } reg_list[] = { }; -void radeon_reg_match(const char *pattern) +void radeon_reg_match(const char *pattern, int byte) { int i; unsigned long address; @@ -384,8 +386,13 @@ void radeon_reg_match(const char *pattern) if (pattern[0] == '0' && pattern[1] == 'x') { address = strtol(&(pattern[2]), NULL, 16); - value = radeon_get32(address, pattern); - printf("%s\t0x%08x (%d)\n", pattern, value, value); + if (byte) { + value = radeon_get8(address, pattern); + printf("%s\t0x%02x (%d)\n", pattern, value, value); + } else { + value = radeon_get32(address, pattern); + printf("%s\t0x%08x (%d)\n", pattern, value, value); + } return; } @@ -405,16 +412,21 @@ void radeon_reg_match(const char *pattern) } } -void radeon_reg_set(const char *name, unsigned value) +void radeon_reg_set(const char *name, unsigned value, int byte) { int i; unsigned long address; if (name[0]=='0' && name[1]=='x') { address = strtoul(&(name[2]), NULL, 16); - printf("OLD: %s (%04lx)\t0x%08x\n", name, address, radeon_get32(address, name)); - radeon_set32(address, name, value); - printf("NEW: %s (%04lx)\t0x%08x\n", name, address, radeon_get32(address, name)); + if (byte) { + radeon_set8(address, name, value); + printf("Wrote: %s (%02lx)\t0x%02x\n", name, address, value); + } else { + printf("OLD: %s (%04lx)\t0x%08x\n", name, address, radeon_get32(address, name)); + radeon_set32(address, name, value); + printf("NEW: %s (%04lx)\t0x%08x\n", name, address, radeon_get32(address, name)); + } return; } if (name[0] == 'C' && name[2] == ':') { @@ -592,7 +604,11 @@ int main(int argc,char *argv[]) }; } else if(argc == 3) { if(strcmp(argv[1],"regmatch") == 0) { - radeon_reg_match(argv[2]); + radeon_reg_match(argv[2], 0); + return 0; + }; + if(strcmp(argv[1],"8regmatch") == 0) { + radeon_reg_match(argv[2], 1); return 0; }; if(strcmp(argv[1],"owner") == 0) { @@ -601,7 +617,11 @@ int main(int argc,char *argv[]) }; } else if(argc == 4) { if(strcmp(argv[1],"regset") == 0) { - radeon_reg_set(argv[2], strtoul(argv[3], NULL, 0)); + radeon_reg_set(argv[2], strtoul(argv[3], NULL, 0), 0); + return 0; + } + if(strcmp(argv[1],"8regset") == 0) { + radeon_reg_set(argv[2], strtoul(argv[3], NULL, 0), 1); return 0; } } |