Changeset 1603
- Timestamp:
- 07/23/09 04:12:27 (14 years ago)
- Files:
-
- trunk/libffado/tests/scan-devreg.cpp (modified) (8 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/libffado/tests/scan-devreg.cpp
r1550 r1603 44 44 #define MAX_ARGS 1000 45 45 46 // #define SCAN_BASE_ADDR 0xffff00000000ULL 47 #define SCAN_BASE_ADDR 0xFFFFE0200000ULL 46 #define SCAN_BASE_ADDR 0xfffff0000000ULL 48 47 // If changing these be sure to update the option help text 49 48 #define DEFAULT_SCAN_START_REG 0x0b00 … … 84 83 signed int verbose; 85 84 bool test; 86 signed int 87 signed int 88 signed long longint scan_start;89 signed long longint scan_length;85 signed int port; 86 signed int node; 87 signed int scan_start; 88 signed int scan_length; 90 89 } arguments; 91 90 … … 113 112 case 's': 114 113 errno = 0; 115 arguments->scan_start = strtol l(arg, &tail, 0);114 arguments->scan_start = strtol(arg, &tail, 0); 116 115 if (errno) { 117 116 perror("argument parsing failed:"); … … 125 124 case 'l': 126 125 errno = 0; 127 arguments->scan_length = strtol l(arg, &tail, 0);126 arguments->scan_length = strtol(arg, &tail, 0); 128 127 if (errno) { 129 128 perror("argument parsing failed:"); … … 232 231 // only MOTU devices but this can be expanded on an as-needs 233 232 // basis. 234 // if (configRom->getNodeVendorId() == 0x1f2) { 235 if (configRom->getNodeVendorId() == 0x0000130E) { 233 if (configRom->getNodeVendorId() == 0x1f2) { 236 234 node_id = node; 237 235 port = i; … … 263 261 264 262 quadlet_t old_vals[arguments.scan_length/4+1], quadlet; 265 char present[arguments.scan_length/ 4+1];263 char present[arguments.scan_length/(4*32)+1]; 266 264 memset(old_vals, 0x00, sizeof(old_vals)); 267 265 // Assume all registers are present until proven otherwise 268 266 memset(present, 0xff, sizeof(present)); 269 267 270 printf("Scanning from %012llX to %012llX (len: % lld)\n",268 printf("Scanning from %012llX to %012llX (len: %d)\n", 271 269 SCAN_BASE_ADDR + arguments.scan_start, 272 270 SCAN_BASE_ADDR + arguments.scan_start + arguments.scan_length, … … 275 273 chr[0] = 0; 276 274 while(chr[0]!='q') { 277 for (signed long longint reg=arguments.scan_start;275 for (signed int reg=arguments.scan_start; 278 276 reg < arguments.scan_start + arguments.scan_length; reg+=4) { 279 unsigned long long int reg_index = (reg - arguments.scan_start)/4; 280 281 if (present[reg_index] == 0) { 277 unsigned int reg_index = (reg - arguments.scan_start)/4; 278 unsigned int pres_index = (reg - arguments.scan_start)/(4*32); 279 unsigned int pres_bit = ((reg - arguments.scan_start)/4) & 0x1f; 280 281 if (!(present[pres_index] & (1<<pres_bit))) { 282 282 continue; 283 283 } … … 285 285 if (m_1394Service->read(0xffc0 | node_id, SCAN_BASE_ADDR+reg, 1, &quadlet) <= 0) { 286 286 // Flag the register as not being present so we don't keep trying to read it 287 present[ reg_index] = 0;288 printf("Register %012llX: failed\n", SCAN_BASE_ADDR+reg);287 present[pres_index] &= ~(1<<pres_bit); 288 // printf("Register %012llX: failed\n", SCAN_BASE_ADDR+reg); 289 289 continue; 290 290 } else { 291 291 quadlet = CondSwapFromBus32(quadlet); 292 char bitvector[33];293 bitvector[32] = 0;294 for (int i=0; i<32; i++) {295 if (quadlet & (1<<(31-i))) {296 bitvector[i] = '1';297 } else {298 bitvector[i] = '0';299 }300 }301 char bitvector_spaced[33+7];302 bitvector_spaced[32+7] = 0;303 int cnt=0;304 for (int i=0; i<32; i++) {305 if (i % 4 == 0 && i) {306 bitvector_spaced[cnt] = ' ';307 cnt++;308 }309 bitvector_spaced[cnt] = bitvector[i];310 cnt++;311 }312 printf("Register [%06lld] %012llX: %08X [%10u] [%s] [%10d %10d]\n",313 (reg-arguments.scan_start)/4, SCAN_BASE_ADDR+reg,314 quadlet, quadlet,315 bitvector_spaced,316 (quadlet>>16) & 0xFFFF, quadlet & 0xFFFF);317 292 } 318 293 319 294 if (old_vals[reg_index] != quadlet) { 320 295 if (loop != 0) { 321 printf("0x%0 12llx changed from %08X to %08X\n", SCAN_BASE_ADDR+reg, old_vals[reg_index], quadlet);296 printf("0x%04x changed from %08X to %08X\n", reg, old_vals[reg_index], quadlet); 322 297 } 323 298 old_vals[reg_index] = quadlet;