diff options
Diffstat (limited to 'pcilib/register.c')
| -rw-r--r-- | pcilib/register.c | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/pcilib/register.c b/pcilib/register.c index deb8cf4..68e5d36 100644 --- a/pcilib/register.c +++ b/pcilib/register.c @@ -19,7 +19,7 @@ #include "error.h" -int pcilib_add_registers(pcilib_t *ctx, size_t n, const pcilib_register_description_t *registers) { +int pcilib_add_registers(pcilib_t *ctx, pcilib_model_modification_flags_t flags, size_t n, const pcilib_register_description_t *registers, pcilib_register_t *ids) { // DS: Overrride existing registers // Registers identified by addr + offset + size + type or name @@ -52,7 +52,16 @@ int pcilib_add_registers(pcilib_t *ctx, size_t n, const pcilib_register_descript memcpy(ctx->registers + ctx->num_reg, registers, n * sizeof(pcilib_register_description_t)); memset(ctx->registers + ctx->num_reg + n, 0, sizeof(pcilib_register_description_t)); + + if (ids) { + size_t i; + + for (i = 0; i < n; i++) + ids[i] = ctx->num_reg + i; + } + ctx->num_reg += n; + return 0; } @@ -97,11 +106,11 @@ static int pcilib_read_register_space_internal(pcilib_t *ctx, pcilib_register_ba if ((bits > 0)&&(!err)) { pcilib_register_value_t val = 0; err = bapi->read(ctx, bctx, addr + n * access, &val); - + val = (val >> offset)&BIT_MASK(bits); memcpy(buf + n, &val, sizeof(pcilib_register_value_t)); - } + return err; } @@ -151,7 +160,7 @@ int pcilib_read_register_by_id(pcilib_t *ctx, pcilib_register_t reg, pcilib_regi } *value = res; - + return err; } |
