| 49 | }; |
| 50 | |
| 51 | static void syntax(char *argv[]) { |
| 52 | printf("syntax: %s [-hvqrkl] [-c cpu] [-m system] [-t target ...]\n", argv[0]); |
| 53 | printf("\t [-i addr=hi[:]lo] | [-s file] | [-d [:]file] | addr...\n"); |
| 54 | printf(" -h\t show this help text\n"); |
| 55 | printf(" -v\t be verbose\n"); |
| 56 | printf(" -q\t be quiet (overrides -v)\n"); |
| 57 | printf(" -r\t include [Reserved] values\n"); |
| 58 | printf(" -k\t list all known systems and targets\n"); |
| 59 | printf(" -l\t list MSRs and bit fields for current target(s) (-kl for ALL targets!)\n"); |
| 60 | printf(" -c\t access MSRs on the specified CPU, default=%d\n", DEFAULT_CPU); |
| 61 | printf(" -m\t force a system, e.g: -m linux\n"); |
| 62 | printf(" -t\t force a target, can be used multiple times, e.g: -t geodelx -t cs5536\n"); |
| 63 | printf(" -i\t immediate mode\n"); |
| 64 | printf("\t decode hex addr=hi:lo for the target without reading hw value\n"); |
| 65 | printf("\t e.g: -i 4c00000f=f2f100ff56960004\n"); |
| 66 | printf(" -s\t stream mode\n"); |
| 67 | printf("\t read one MSR address per line and append current hw value to the line\n"); |
| 68 | printf("\t use the filename - for stdin/stdout\n"); |
| 69 | printf("\t using -l -s ignores input and will output all MSRs with values\n"); |
| 70 | printf(" -d\t diff mode\n"); |
| 71 | printf("\t read one address and value per line and compare with current hw value,\n"); |
| 72 | printf("\t printing differences to stdout. use the filename - to read from stdin\n"); |
| 73 | printf("\t use :file or :- to reverse diff, normally hw values are considered new\n"); |
| 74 | printf(" addr.. direct mode, read and decode values for the given MSR address(es)\n"); |
| 75 | } |
| 76 | |
| 77 | static void *add_target(const struct targetdef *t) { |
| 78 | void *tmp; |