Changeset 1603

Show
Ignore:
Timestamp:
07/23/09 04:12:27 (15 years ago)
Author:
jwoithe
Message:

Restore scan-devreg functionality accidently removed in revision 1550.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/libffado/tests/scan-devreg.cpp

    r1550 r1603  
    4444#define MAX_ARGS 1000 
    4545 
    46 // #define SCAN_BASE_ADDR 0xffff00000000ULL 
    47 #define SCAN_BASE_ADDR 0xFFFFE0200000ULL 
     46#define SCAN_BASE_ADDR 0xfffff0000000ULL 
    4847// If changing these be sure to update the option help text 
    4948#define DEFAULT_SCAN_START_REG 0x0b00 
     
    8483    signed int   verbose; 
    8584    bool         test; 
    86     signed int             port; 
    87     signed int             node; 
    88     signed long long int   scan_start; 
    89     signed long long int   scan_length; 
     85    signed int   port; 
     86    signed int   node; 
     87    signed int   scan_start; 
     88    signed int   scan_length; 
    9089} arguments; 
    9190 
     
    113112    case 's': 
    114113        errno = 0; 
    115         arguments->scan_start = strtoll(arg, &tail, 0); 
     114        arguments->scan_start = strtol(arg, &tail, 0); 
    116115        if (errno) { 
    117116            perror("argument parsing failed:"); 
     
    125124    case 'l': 
    126125        errno = 0; 
    127         arguments->scan_length = strtoll(arg, &tail, 0); 
     126        arguments->scan_length = strtol(arg, &tail, 0); 
    128127        if (errno) { 
    129128            perror("argument parsing failed:"); 
     
    232231            // only MOTU devices but this can be expanded on an as-needs 
    233232            // basis. 
    234 //             if (configRom->getNodeVendorId() == 0x1f2) { 
    235             if (configRom->getNodeVendorId() == 0x0000130E) { 
     233            if (configRom->getNodeVendorId() == 0x1f2) { 
    236234                node_id = node; 
    237235                port = i; 
     
    263261 
    264262    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]; 
    266264    memset(old_vals, 0x00, sizeof(old_vals)); 
    267265    // Assume all registers are present until proven otherwise 
    268266    memset(present, 0xff, sizeof(present)); 
    269267     
    270     printf("Scanning from %012llX to %012llX (len: %lld)\n", 
     268    printf("Scanning from %012llX to %012llX (len: %d)\n", 
    271269           SCAN_BASE_ADDR + arguments.scan_start, 
    272270           SCAN_BASE_ADDR + arguments.scan_start + arguments.scan_length, 
     
    275273    chr[0] = 0; 
    276274    while(chr[0]!='q') { 
    277         for (signed long long int reg=arguments.scan_start; 
     275        for (signed int reg=arguments.scan_start; 
    278276             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))) { 
    282282                continue; 
    283283            } 
     
    285285            if (m_1394Service->read(0xffc0 | node_id, SCAN_BASE_ADDR+reg, 1, &quadlet) <= 0) { 
    286286                // 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); 
    289289                continue; 
    290290            } else { 
    291291                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); 
    317292            } 
    318293 
    319294            if (old_vals[reg_index] != quadlet) { 
    320295                if (loop != 0) { 
    321                     printf("0x%012llx 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); 
    322297                } 
    323298                old_vals[reg_index] = quadlet;