Changeset 5962
- Timestamp:
- 04/15/11 10:27:30 (13 months ago)
- Location:
- lm-sensors/trunk
- Files:
-
- 5 modified
-
CHANGES (modified) (1 diff)
-
prog/dump/isaset.8 (modified) (4 diffs)
-
prog/dump/isaset.c (modified) (11 diffs)
-
prog/dump/util.c (modified) (1 diff)
-
prog/dump/util.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
lm-sensors/trunk/CHANGES
r5961 r5962 4 4 SVN HEAD 5 5 isadump: Add support for word (16-bit) and long (32-bit) reads 6 isaset: Add support for word (16-bit) and long (32-bit) writes 6 7 sensors-detect: Add AMD family 15h CPU detection 7 8 Add detection of ADT7461A / NCT1008 -
lm-sensors/trunk/prog/dump/isaset.8
r4471 r5962 1 .TH ISASET 8 " May 2005"1 .TH ISASET 8 "April 2011" 2 2 .SH "NAME" 3 3 isaset \- set ISA registers … … 6 6 .B isaset 7 7 .RB [ -y ] 8 .RB [ -W | -L ] 8 9 .I addrreg 9 10 .I datareg … … 14 15 .br 15 16 .B isaset 17 .B -f 16 18 .RB [ -y ] 17 .BI "-f " address 19 .RB [ -W | -L ] 20 .I address 18 21 .I value 19 22 .RI [ mask ] … … 34 37 will perform the operation directly. This is mainly meant to be used in 35 38 scripts. 39 .TP 40 .B -W 41 Perform a 16-bit write. 42 .TP 43 .B -L 44 Perform a 32-bit write. 36 45 37 46 .SH OPTIONS (I2C-like access mode) -
lm-sensors/trunk/prog/dump/isaset.c
r5709 r5962 3 3 Copyright (C) 2000 Frodo Looijaard <frodol@dds.nl>, and 4 4 Mark D. Studebaker <mdsxyz123@yahoo.com> 5 Copyright (C) 2004 ,2007Jean Delvare <khali@linux-fr.org>5 Copyright (C) 2004-2011 Jean Delvare <khali@linux-fr.org> 6 6 7 7 This program is free software; you can redistribute it and/or modify … … 49 49 fprintf(stderr, 50 50 "Syntax for I2C-like access:\n" 51 " isaset [ -y] ADDRREG DATAREG ADDRESS VALUE [MASK]\n"51 " isaset [OPTIONS] ADDRREG DATAREG ADDRESS VALUE [MASK]\n" 52 52 "Syntax for flat address space:\n" 53 " isaset [-y] -f ADDRESS VALUE [MASK]\n"); 53 " isaset -f [OPTIONS] ADDRESS VALUE [MASK]\n" 54 "Options:\n" 55 " -f Enable flat address space mode\n" 56 " -y Assume affirmative answer to all questions\n" 57 " -W Write a word (16-bit) value\n" 58 " -L Write a long (32-bit) value\n"); 54 59 } 55 60 56 61 int main(int argc, char *argv[]) 57 62 { 58 int addrreg, datareg = 0, value, addr = 0, vmask= 0;59 unsigned charres;63 int addrreg, datareg = 0, addr = 0; 64 unsigned long value, vmask = 0, maxval = 0xff, res; 60 65 int flags = 0; 61 int flat = 0, yes = 0 ;66 int flat = 0, yes = 0, width = 1; 62 67 char *end; 63 68 … … 67 72 case 'f': flat = 1; break; 68 73 case 'y': yes = 1; break; 74 case 'W': width = 2; maxval = 0xffff; break; 75 case 'L': width = 4; maxval = 0xffffffff; break; 69 76 default: 70 77 fprintf(stderr, "Warning: Unsupported flag " … … 129 136 flags += 2; 130 137 131 value = strto l(argv[flags+2], &end, 0);138 value = strtoul(argv[flags+2], &end, 0); 132 139 if (*end) { 133 140 fprintf(stderr, "Error: Invalid value!\n"); … … 135 142 exit(1); 136 143 } 137 if (value < 0 || value > 0xff) {144 if (value > maxval) { 138 145 fprintf(stderr, "Error: Value out of range " 139 "(0x 00-0xff)!\n");146 "(0x%0*u-%0*lu)!\n", width * 2, 0, width * 2, maxval); 140 147 help(); 141 148 exit(1); … … 143 150 144 151 if (flags+3 < argc) { 145 vmask = strto l(argv[flags+3], &end, 0);152 vmask = strtoul(argv[flags+3], &end, 0); 146 153 if (*end) { 147 154 fprintf(stderr, "Error: Invalid mask!\n"); … … 149 156 exit(1); 150 157 } 151 if (vmask < 0 || vmask > 0xff) {158 if (vmask > maxval) { 152 159 fprintf(stderr, "Error: Mask out of range " 153 "(0x00-0xff)!\n"); 160 "(0x%0*u-%0*lu)!\n", width * 2, 0, 161 width * 2, maxval); 154 162 help(); 155 163 exit(1); … … 168 176 169 177 if (flat) 170 fprintf(stderr, "I will write value 0x%02x%s to address " 171 "0x%x.\n", value, vmask ? " (masked)" : "", 172 addrreg); 178 fprintf(stderr, 179 "I will write value 0x%0*lx%s to address " 180 "0x%x.\n", width * 2, value, 181 vmask ? " (masked)" : "", addrreg); 173 182 else 174 fprintf(stderr, "I will write value 0x%02x%s to address " 183 fprintf(stderr, 184 "I will write value 0x%0*lx%s to address " 175 185 "0x%02x of chip with address register 0x%x\n" 176 "and data register 0x%x.\n", 186 "and data register 0x%x.\n", width * 2, 177 187 value, vmask ? " (masked)" : "", addr, 178 188 addrreg, datareg); … … 207 217 208 218 if (vmask) { 209 intoldvalue;219 unsigned long oldvalue; 210 220 211 221 if (flat) { 212 oldvalue = in b(addrreg);222 oldvalue = inx(addrreg, width); 213 223 } else { 214 224 outb(addr, addrreg); 215 oldvalue = inb(datareg); 216 } 217 218 if (oldvalue < 0) { 219 fprintf(stderr, "Error: Failed to read old value\n"); 220 exit(1); 225 oldvalue = inx(datareg, width); 221 226 } 222 227 … … 224 229 225 230 if (!yes) { 226 fprintf(stderr, "Old value 0x%02x, write mask " 227 "0x%02x: Will write 0x%02x to %s " 228 "0x%02x\n", oldvalue, vmask, value, 231 fprintf(stderr, "Old value 0x%0*lx, write mask " 232 "0x%0*lx: Will write 0x%0*lx to %s " 233 "0x%02x\n", width * 2, oldvalue, 234 width * 2, vmask, width * 2, value, 229 235 flat ? "address" : "register", 230 236 flat ? addrreg : addr); … … 242 248 if (flat) { 243 249 /* write */ 244 out b(value, addrreg);250 outx(value, addrreg, width); 245 251 /* readback */ 246 res = in b(addrreg);252 res = inx(addrreg, width); 247 253 } else { 248 254 /* write */ 249 255 outb(addr, addrreg); 250 out b(value, datareg);256 outx(value, datareg, width); 251 257 /* readback */ 252 res = in b(datareg);258 res = inx(datareg, width); 253 259 } 254 260 255 261 if (res != value) { 256 fprintf(stderr, "Data mismatch, wrote 0x%02x, " 257 "read 0x%02x back.\n", value, res); 262 fprintf(stderr, "Data mismatch, wrote 0x%0*lx, " 263 "read 0x%0*lx back.\n", width * 2, value, 264 width * 2, res); 258 265 } 259 266 -
lm-sensors/trunk/prog/dump/util.c
r5961 r5962 68 68 } 69 69 } 70 71 /* I/O write of specified size */ 72 void outx(unsigned long value, int addr, int width) 73 { 74 switch (width) { 75 case 2: 76 outw(value, addr); 77 break; 78 case 4: 79 outl(value, addr); 80 break; 81 default: 82 outb(value, addr); 83 } 84 } -
lm-sensors/trunk/prog/dump/util.h
r5961 r5962 14 14 extern int user_ack(int def); 15 15 extern unsigned long inx(int addr, int width); 16 extern void outx(unsigned long value, int addr, int width); 16 17 17 18 #endif /* _UTIL_H */
