192
192
{"output", required_argument, 0, OPT_OUTPUT },
193
193
{"timeout", required_argument, 0, OPT_TIMEOUT },
194
194
{"iterations", required_argument, 0, OPT_ITERATIONS },
195
{"info", no_argument, 0, OPT_INFO },
195
{"info", optional_argument, 0, OPT_INFO },
196
196
{"list", no_argument, 0, OPT_LIST },
197
197
{"reset", no_argument, 0, OPT_RESET },
198
198
{"benchmark", optional_argument, 0, OPT_BENCHMARK },
575
void Info(pcilib_t *handle, const pcilib_model_description_t *model_info) {
575
void RegisterInfo(pcilib_t *handle, pcilib_register_t reg) {
577
pcilib_register_value_t val;
579
const pcilib_model_description_t *model_info = pcilib_get_model_description(handle);
580
const pcilib_register_description_t *r = &model_info->registers[reg];
581
pcilib_register_bank_t bank = pcilib_find_register_bank_by_addr(handle, r->bank);
582
const pcilib_register_bank_description_t *b = &model_info->banks[bank];
584
err = pcilib_read_register_by_id(handle, reg, &val);
587
printf("%s/%s\n", b->name, r->name);
588
printf(" Current value: ");
589
if (err) printf("error %i", err);
590
else printf(b->format, val);
592
if (r->mode&PCILIB_REGISTER_W) {
593
printf(" (default: ");
594
printf(b->format, r->defvalue);
599
printf(" Address : 0x%x [%u:%u]\n", r->addr, r->offset, r->offset + r->bits);
600
printf(" Access : ");
601
if ((r->mode&PCILIB_REGISTER_RW) == 0) printf("-");
602
if (r->mode&PCILIB_REGISTER_R) printf("R");
603
if (r->mode&PCILIB_REGISTER_W) printf("W");
604
if (r->mode&PCILIB_REGISTER_W1C) printf("/reset");
605
if (r->mode&PCILIB_REGISTER_W1I) printf("/invert");
610
printf(" Description : %s\n", r->description);
614
printf("\nSupported Views:\n");
615
for (i = 0; r->views[i].name; i++) {
616
pcilib_view_t view = pcilib_find_view_by_name(handle, r->views[i].view);
617
if (view == PCILIB_VIEW_INVALID) continue;
619
const pcilib_view_description_t *v = model_info->views[view];
621
printf(" View %s (", r->views[i].name);
623
case PCILIB_TYPE_STRING:
626
case PCILIB_TYPE_DOUBLE:
635
pcilib_unit_t unit = pcilib_find_unit_by_name(handle, v->unit);
637
printf(" Supported units: %s", v->unit);
639
if (unit != PCILIB_UNIT_INVALID) {
641
const pcilib_unit_description_t *u = &model_info->units[unit];
643
for (j = 0; u->transforms[j].unit; j++)
644
printf(", %s", u->transforms[j].unit);
650
printf(" Description : %s\n", v->description);
655
// printf("Type: %s". r->rw
658
void Info(pcilib_t *handle, const pcilib_model_description_t *model_info, const char *target) {
596
679
printf(" Interrupt - Pin: %i, Line: %i\n", board_info->interrupt_pin, board_info->interrupt_line);
684
pcilib_register_t reg;
686
reg = pcilib_find_register(handle, NULL, target);
687
if (reg != PCILIB_REGISTER_INVALID)
688
return RegisterInfo(handle, reg);
690
Error(" No register %s is found", target);
598
693
List(handle, model_info, (char*)-1, 0);
601
695
printf("Available models:\n");
603
697
dir = opendir(path);