From 890ba303b28be816ff00f464b6f3a6b000b5e6e2 Mon Sep 17 00:00:00 2001 From: "Suren A. Chilingaryan" Date: Tue, 5 May 2015 15:27:22 +0200 Subject: Split bar manipulation and fifo operations in stand-alone source and publish kmem and bar headers --- pcilib/fifo.c | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 pcilib/fifo.c (limited to 'pcilib/fifo.c') diff --git a/pcilib/fifo.c b/pcilib/fifo.c new file mode 100644 index 0000000..593400f --- /dev/null +++ b/pcilib/fifo.c @@ -0,0 +1,55 @@ +#define _BSD_SOURCE +#define _POSIX_C_SOURCE 200809L + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "pcilib.h" +#include "pci.h" +#include "tools.h" +#include "error.h" +#include "model.h" +#include "plugin.h" +#include "bar.h" + +int pcilib_read_fifo(pcilib_t *ctx, pcilib_bar_t bar, uintptr_t addr, uint8_t fifo_size, size_t n, void *buf) { + int i; + void *data; + + pcilib_detect_address(ctx, &bar, &addr, fifo_size); + data = pcilib_map_bar(ctx, bar); + + for (i = 0; i < n; i++) { + pcilib_memcpy(buf + i * fifo_size, data + addr, fifo_size); + } + + pcilib_unmap_bar(ctx, bar, data); + + return 0; +} + +int pcilib_write_fifo(pcilib_t *ctx, pcilib_bar_t bar, uintptr_t addr, uint8_t fifo_size, size_t n, void *buf) { + int i; + void *data; + + pcilib_detect_address(ctx, &bar, &addr, fifo_size); + data = pcilib_map_bar(ctx, bar); + + for (i = 0; i < n; i++) { + pcilib_memcpy(data + addr, buf + i * fifo_size, fifo_size); + } + + pcilib_unmap_bar(ctx, bar, data); + + return 0; +} -- cgit v1.2.3