summaryrefslogtreecommitdiffstats
path: root/pcilib/bar.c
diff options
context:
space:
mode:
authorSuren A. Chilingaryan <csa@suren.me>2015-11-20 18:26:29 +0100
committerSuren A. Chilingaryan <csa@suren.me>2015-11-20 18:26:29 +0100
commitbba9c619c79175b58359116b52a889e30a632d07 (patch)
tree6da3898d50880e96f2afa5d5139bd16263fccf42 /pcilib/bar.c
parentfe5bca8604e8c381d3fe2cce3073dd6602d016d1 (diff)
downloadpcitool-bba9c619c79175b58359116b52a889e30a632d07.tar.gz
pcitool-bba9c619c79175b58359116b52a889e30a632d07.tar.bz2
pcitool-bba9c619c79175b58359116b52a889e30a632d07.tar.xz
pcitool-bba9c619c79175b58359116b52a889e30a632d07.zip
64-bit access to BAR memory
Diffstat (limited to 'pcilib/bar.c')
-rw-r--r--pcilib/bar.c13
1 files changed, 7 insertions, 6 deletions
diff --git a/pcilib/bar.c b/pcilib/bar.c
index 6d6cd6d..85c0e12 100644
--- a/pcilib/bar.c
+++ b/pcilib/bar.c
@@ -119,6 +119,7 @@ void *pcilib_map_bar(pcilib_t *ctx, pcilib_bar_t bar) {
return NULL;
}
+ ctx->bar_space[bar] = res;
return res;
}
@@ -323,26 +324,26 @@ const pcilib_bar_info_t *pcilib_get_bar_info(pcilib_t *ctx, pcilib_bar_t bar) {
return NULL;
}
-int pcilib_read(pcilib_t *ctx, pcilib_bar_t bar, uintptr_t addr, size_t size, void *buf) {
+int pcilib_read(pcilib_t *ctx, pcilib_bar_t bar, uintptr_t addr, uint8_t access, size_t n, void *buf) {
void *data;
- pcilib_detect_address(ctx, &bar, &addr, size);
+ pcilib_detect_address(ctx, &bar, &addr, access * n);
data = pcilib_map_bar(ctx, bar);
- pcilib_memcpy(buf, data + addr, size);
+ pcilib_memcpy(buf, data + addr, access, n);
pcilib_unmap_bar(ctx, bar, data);
return 0;
}
-int pcilib_write(pcilib_t *ctx, pcilib_bar_t bar, uintptr_t addr, size_t size, void *buf) {
+int pcilib_write(pcilib_t *ctx, pcilib_bar_t bar, uintptr_t addr, uint8_t access, size_t n, void *buf) {
void *data;
- pcilib_detect_address(ctx, &bar, &addr, size);
+ pcilib_detect_address(ctx, &bar, &addr, access * n);
data = pcilib_map_bar(ctx, bar);
- pcilib_memcpy(data + addr, buf, size);
+ pcilib_memcpy(data + addr, buf, access, n);
pcilib_unmap_bar(ctx, bar, data);