18
int pcilib_add_register_properties(pcilib_t *ctx, size_t n, const pcilib_register_bank_t *banks, const pcilib_register_description_t *registers) {
19
int pcilib_add_registers_from_properties(pcilib_t *ctx, size_t n, pcilib_view_context_t* const *view_ctx, pcilib_view_description_t* const *v) {
21
pcilib_register_t pos = 0;
22
pcilib_register_description_t regs[n];
24
for (i = 0; i < n; i++) {
25
if ((v[i]->flags&PCILIB_VIEW_FLAG_REGISTER) == 0) continue;
27
regs[pos++] = (pcilib_register_description_t){
28
.addr = view_ctx[i]->view,
29
.bits = 8 * sizeof(pcilib_register_value_t),
31
.type = PCILIB_REGISTER_PROPERTY,
32
.bank = PCILIB_REGISTER_BANK_PROPERTY,
33
.name = (v[i]->regname?v[i]->regname:v[i]->name),
34
.description = v[i]->description
39
return pcilib_add_registers(ctx, 0, pos, regs, NULL);
45
int pcilib_add_properties_from_registers(pcilib_t *ctx, size_t n, const pcilib_register_bank_t *banks, const pcilib_register_description_t *registers) {
21
48
pcilib_register_t i;
28
55
for (i = 0; i < n; i++) {
29
57
pcilib_access_mode_t mode = 0;
31
59
pcilib_register_view_description_t v;
32
60
pcilib_register_bank_description_t *b = &ctx->banks[banks[i]];
34
char *view_name = malloc(strlen(registers[i].name) + strlen(b->name) + 13);
62
if (registers[i].type == PCILIB_REGISTER_PROPERTY) continue;
64
view_name = malloc(strlen(registers[i].name) + strlen(b->name) + 13);
36
66
pcilib_clean_views(ctx, cur_view);
37
67
return PCILIB_ERROR_MEMORY;