summaryrefslogtreecommitdiff
path: root/pcilib/register.c
diff options
context:
space:
mode:
Diffstat (limited to 'pcilib/register.c')
-rw-r--r--pcilib/register.c17
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;
}