Changeset 1200 for lm-sensors/trunk/prog/dump/isadump.c
- Timestamp:
- 10/13/01 18:37:16 (12 years ago)
- Files:
-
- 1 modified
-
lm-sensors/trunk/prog/dump/isadump.c (modified) (8 diffs)
Legend:
- Unmodified
- Added
- Removed
-
lm-sensors/trunk/prog/dump/isadump.c
r1107 r1200 1 1 /* 2 isadump.c - Part ofisadump, a user-space program to dump ISA registers2 isadump.c - isadump, a user-space program to dump ISA registers 3 3 Copyright (c) 2000 Frodo Looijaard <frodol@dds.nl>, and 4 4 Mark D. Studebaker <mdsxyz123@yahoo.com> … … 17 17 along with this program; if not, write to the Free Software 18 18 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 19 */ 20 21 /* 22 Typical usage: 23 isadump 0x295 0x296 Basic winbond dump using address/data registers 24 isadump 0x295 0x296 2 Winbond dump, bank 2 25 isadump -f 0x5000 Flat address space dump like for Via 686a 19 26 */ 20 27 … … 48 55 { 49 56 fprintf(stderr,"Syntax: isadump ADDRREG DATAREG [BANK [BANKREG]]\n"); 57 fprintf(stderr," isadump -f ADDRESS (for flat address space)\n"); 50 58 } 51 59 52 60 int main(int argc, char *argv[]) 53 61 { 54 int addrreg, datareg, bank = 0, bankreg = 0x4E; 62 int addrreg, datareg = 0, bank = 0, bankreg = 0x4E; 63 int i,j,res; 64 int flat = 0; 55 65 char *end; 56 int i,j,res; 57 58 if (argc < 2) { 59 fprintf(stderr,"Error: No registers specified!\n"); 60 help(); 61 exit(1); 62 } 63 64 addrreg = strtol(argv[1],&end,0); 66 67 if (argc < 3) { 68 help(); 69 exit(1); 70 } 71 72 if(strcmp(argv[1], "-f")) { 73 addrreg = strtol(argv[1],&end,0); 74 } else { 75 if(argc != 3) { 76 help(); 77 exit(1); 78 } 79 flat = 1; 80 addrreg = strtol(argv[2],&end,0) & 0xff00; 81 } 65 82 if (*end) { 66 fprintf(stderr,"Error: First argument not a number!\n"); 67 help(); 68 exit(1); 69 } 70 if ((addrreg < 0) || (addrreg > 0xfff)) { 71 fprintf(stderr,"Error: Address register out of range!\n"); 72 help(); 73 exit(1); 74 } 75 76 if (argc < 3) { 77 fprintf(stderr,"Error: No data register specified!\n"); 78 help(); 79 exit(1); 80 } 83 fprintf(stderr,"Error: Invalid address!\n"); 84 help(); 85 exit(1); 86 } 87 if ((addrreg < 0) || (addrreg > 0xffff)) { 88 fprintf(stderr,"Error: Address out of range!\n"); 89 help(); 90 exit(1); 91 } 92 93 if(flat) 94 goto START; 81 95 82 96 datareg = strtol(argv[2],&end,0); 83 97 if (*end) { 84 fprintf(stderr,"Error: Second argument not a number!\n");85 help(); 86 exit(1); 87 } 88 if ((datareg < 0) || (datareg > 0xfff )) {98 fprintf(stderr,"Error: Invalid data register!\n"); 99 help(); 100 exit(1); 101 } 102 if ((datareg < 0) || (datareg > 0xffff)) { 89 103 fprintf(stderr,"Error: Data register out of range!\n"); 90 104 help(); … … 108 122 bankreg = strtol(argv[4],&end,0); 109 123 if (*end) { 110 fprintf(stderr,"Error: Invalid bank register number!\n");124 fprintf(stderr,"Error: Invalid bank register!\n"); 111 125 help(); 112 126 exit(1); … … 120 134 } 121 135 136 START: 137 122 138 if (getuid()) { 123 139 fprintf(stderr,"Error: Can only be run as root (or make it suid root)\n"); … … 127 143 fprintf(stderr," WARNING! Running this program can cause system crashes, " 128 144 "data loss and worse!\n"); 129 fprintf(stderr," I will probe address register 0x%04x and " 145 if(flat) 146 fprintf(stderr," I will probe address range 0x%04x to " 147 "0x%04x.\n",addrreg, addrreg + 0xff); 148 else 149 fprintf(stderr," I will probe address register 0x%04x and " 130 150 "data register 0x%04x.\n",addrreg,datareg); 131 151 if(bank) … … 136 156 137 157 #ifndef __powerpc__ 138 if ((datareg < 0x400) && (addrreg < 0x400) ) {158 if ((datareg < 0x400) && (addrreg < 0x400) && !flat) { 139 159 if(ioperm(datareg,1,1)) { 140 160 fprintf(stderr,"Error: Could not ioperm() data register!\n"); … … 163 183 printf("%c0: ",hexchar(i/16)); 164 184 for(j = 0; j < 16; j++) { 165 outb(i+j,addrreg); 166 res = inb(datareg); 167 printf("%c%c ",hexchar(res/16),hexchar(res%16)); 185 if(flat) { 186 res = inb(addrreg + i + j); 187 } else { 188 outb(i+j,addrreg); 189 res = inb(datareg); 190 } 191 printf("%c%c ",hexchar(res/16),hexchar(res%16)); 168 192 } 169 193 printf("\n");
