/alps/pcitool

To get this branch, use:
bzr branch http://darksoft.org/webbzr/alps/pcitool

« back to all changes in this revision

Viewing changes to pcitool/cli.c

  • Committer: Suren A. Chilingaryan
  • Date: 2015-10-12 23:59:17 UTC
  • Revision ID: csa@suren.me-20151012235917-s5oi62kmu8khjl0t
Support writting register views

Show diffs side-by-side

added added

removed removed

Lines of Context:
1144
1144
 
1145
1145
        if (unit) {
1146
1146
            pcilib_value_t val = {0};
1147
 
            err = pcilib_read_register_view(handle, bank, model_info->registers[regid].name, unit, &val);
1148
 
            if (err) printf("Error reading view %s of register %s\n", unit, reg);
1149
 
            else {
1150
 
                err = pcilib_convert_value_type(handle, &val, PCILIB_TYPE_STRING);
1151
 
                if (err) printf("Error converting view %s of register %s to string\n", unit, reg);
1152
 
                else printf("%s = %s\n", reg, val.sval);
1153
 
            }
 
1147
            err = pcilib_read_register_view(handle, bank, reg, unit, &val);
 
1148
            if (err) Error("Error reading view %s of register %s", unit, reg);
 
1149
 
 
1150
            err = pcilib_convert_value_type(handle, &val, PCILIB_TYPE_STRING);
 
1151
            if (err) Error("Error converting view %s of register %s to string", unit, reg);
 
1152
 
 
1153
            printf("%s = %s\n", reg, val.sval);
1154
1154
        } else {
1155
1155
            bank_id = pcilib_find_register_bank_by_addr(handle, model_info->registers[regid].bank);
1156
1156
            format = model_info->banks[bank_id].format;
1157
1157
            if (!format) format = "%lu";
1158
1158
            err = pcilib_read_register_by_id(handle, regid, &value);
1159
 
            if (err) printf("Error reading register %s\n", reg);
1160
 
            else {
1161
 
                printf("%s = ", reg);
1162
 
                printf(format, value);
1163
 
                printf("\n");
1164
 
            }
 
1159
            if (err) Error("Error reading register %s", reg);
 
1160
 
 
1161
            printf("%s = ", reg);
 
1162
            printf(format, value);
 
1163
            printf("\n");
1165
1164
        }
1166
1165
    } else {
1167
1166
        if (model_info->registers) {
1364
1363
}
1365
1364
 
1366
1365
int WriteRegister(pcilib_t *handle, const pcilib_model_description_t *model_info, const char *bank, const char *reg, const char *unit, char **data) {
1367
 
    int err;
1368
 
 
1369
 
    unsigned long val;
1370
 
    pcilib_register_value_t value;
1371
 
 
1372
 
    const char *format = NULL;
 
1366
    int err = 0;
 
1367
 
 
1368
    pcilib_value_t val = {0};
 
1369
    pcilib_register_value_t value, verify;
1373
1370
 
1374
1371
    pcilib_register_t regid = pcilib_find_register(handle, bank, reg);
1375
1372
    if (regid == PCILIB_REGISTER_INVALID) Error("Can't find register (%s) from bank (%s)", reg, bank?bank:"autodetected");
1384
1381
    if (!format) format = "%lu";
1385
1382
*/
1386
1383
 
1387
 
    if (isnumber(*data)) {
1388
 
        if (sscanf(*data, "%li", &val) != 1) {
1389
 
            Error("Can't parse data value (%s) is not valid decimal number", *data);
1390
 
        }
1391
 
 
1392
 
        format = "%li";
1393
 
    } else if (isxnumber(*data)) {
1394
 
        if (sscanf(*data, "%lx", &val) != 1) {
1395
 
            Error("Can't parse data value (%s) is not valid decimal number", *data);
1396
 
        }
1397
 
        
1398
 
        format = "0x%lx";
1399
 
    } else {
1400
 
            Error("Can't parse data value (%s) is not valid decimal number", *data);
1401
 
    }
1402
 
 
1403
 
    value = val;
1404
 
    
1405
 
    err = pcilib_write_register(handle, bank, reg, value);
1406
 
    if (err) Error("Error writting register %s\n", reg);
1407
 
 
1408
 
    if ((model_info->registers[regid].mode&PCILIB_REGISTER_RW) == PCILIB_REGISTER_RW) {
1409
 
        err = pcilib_read_register(handle, bank, reg, &value);
1410
 
        if (err) Error("Error reading back register %s for verification\n", reg);
1411
 
    
1412
 
        if (val != value) {
1413
 
            Error("Failed to write register %s: %lu is written and %lu is read back", reg, val, value);
1414
 
        } else {
1415
 
            printf("%s = ", reg);
1416
 
            printf(format, value);
1417
 
            printf("\n");
1418
 
        }
1419
 
    } else {
 
1384
    err = pcilib_set_value_from_static_string(handle, &val, *data);
 
1385
    if (err) Error("Error (%i) setting value", err);
 
1386
 
 
1387
    if (unit) {
 
1388
        err = pcilib_write_register_view(handle, bank, reg, unit, &val);
 
1389
        if (err) Error("Error writting view %s of register %s", unit, reg);
1420
1390
        printf("%s is written\n ", reg);
 
1391
    } else {
 
1392
        value = pcilib_get_value_as_register_value(handle, &val, &err);
 
1393
        if (err) Error("Error (%i) parsing data value (%s)", *data);
 
1394
 
 
1395
        err = pcilib_write_register(handle, bank, reg, value);
 
1396
        if (err) Error("Error writting register %s\n", reg);
 
1397
 
 
1398
        if ((model_info->registers[regid].mode&PCILIB_REGISTER_RW) == PCILIB_REGISTER_RW) {
 
1399
            const char *format = (val.format?val.format:"%u");
 
1400
            
 
1401
            err = pcilib_read_register(handle, bank, reg, &verify);
 
1402
            if (err) Error("Error reading back register %s for verification\n", reg);
 
1403
    
 
1404
            if (verify != value) {
 
1405
                Error("Failed to write register %s: %lu is written and %lu is read back", reg, value, verify);
 
1406
            } else {
 
1407
                printf("%s = ", reg);
 
1408
                printf(format, verify);
 
1409
                printf("\n");
 
1410
            }
 
1411
        } else {
 
1412
            printf("%s is written\n ", reg);
 
1413
        }
1421
1414
    }
1422
 
    
 
1415
 
1423
1416
    return 0;
1424
1417
}
1425
1418