diff options
| author | Suren A. Chilingaryan <csa@suren.me> | 2015-10-19 15:58:46 +0200 | 
|---|---|---|
| committer | Suren A. Chilingaryan <csa@suren.me> | 2015-10-19 15:58:46 +0200 | 
| commit | 55255f2ce3a2234850249efcabd9ba32d0a89a9c (patch) | |
| tree | 586d075665bebbb698e3a84eee6595f47401997f /pcitool | |
| parent | 87ef1499bfcaa0ea2a58cb6d3c327162507f6ac8 (diff) | |
| download | pcitool-55255f2ce3a2234850249efcabd9ba32d0a89a9c.tar.gz pcitool-55255f2ce3a2234850249efcabd9ba32d0a89a9c.tar.bz2 pcitool-55255f2ce3a2234850249efcabd9ba32d0a89a9c.tar.xz pcitool-55255f2ce3a2234850249efcabd9ba32d0a89a9c.zip | |
Support computed (property-based) registers
Diffstat (limited to 'pcitool')
| -rw-r--r-- | pcitool/cli.c | 33 | 
1 files changed, 23 insertions, 10 deletions
| diff --git a/pcitool/cli.c b/pcitool/cli.c index 4debb75..1cf59fb 100644 --- a/pcitool/cli.c +++ b/pcitool/cli.c @@ -706,16 +706,23 @@ void ViewInfo(pcilib_t *handle, pcilib_register_t reg, size_t id) {      if (r) printf(")");      printf("\n"); -    if (r) { -        err = pcilib_read_register_view_by_id(handle, reg, r->views[id].name, &val); +    if (v->mode&PCILIB_ACCESS_R) { +        if (r) { +            err = pcilib_read_register_view_by_id(handle, reg, r->views[id].name, &val); +        } else { +            err = pcilib_get_property(handle, v->name, &val); +        } +        if (!err) err = pcilib_convert_value_type(handle, &val, PCILIB_TYPE_STRING);      } else { -        err = pcilib_get_property(handle, v->name, &val); +        err = PCILIB_ERROR_NOTPERMITED;      } -    if (!err) err = pcilib_convert_value_type(handle, &val, PCILIB_TYPE_STRING); -    if (err) -        printf("    Current value  : error %i\n", err); -    else { +    if (err) { +        if (err == PCILIB_ERROR_NOTPERMITED) +            printf("    Current value  : no read access\n"); +        else +            printf("    Current value  : error %i\n", err); +    } else {          printf("    Current value  : %s", val.sval);          if (v->unit) printf(" (units: %s)", v->unit);          printf("\n"); @@ -775,15 +782,21 @@ void RegisterInfo(pcilib_t *handle, pcilib_register_t reg) {      pcilib_register_bank_t bank = pcilib_find_register_bank_by_addr(handle, r->bank);      const pcilib_register_bank_description_t *b = &model_info->banks[bank]; -    err = pcilib_read_register_by_id(handle, reg, ®val); +    if (r->mode&PCILIB_ACCESS_R) { +        err = pcilib_read_register_by_id(handle, reg, ®val); +    } else { +        err = PCILIB_ERROR_NOTPERMITED; +    }      info = pcilib_get_register_info(handle, b->name, r->name, 0);      if (!info) Error("Can't obtain register info for %s", r->name);      printf("%s/%s\n", b->name, r->name);      printf("  Current value: "); -    if (err) printf("error %i", err); -    else printf(b->format, regval); +    if (err) { +        if (err == PCILIB_ERROR_NOTPERMITED) printf("no read access"); +        else printf("error %i", err); +    } else printf(b->format, regval);      if (r->mode&PCILIB_REGISTER_W) {  	printf(" (default: "); | 
