diff options
Diffstat (limited to 'protocols')
-rw-r--r-- | protocols/CMakeLists.txt | 8 | ||||
-rw-r--r-- | protocols/default.c | 40 | ||||
-rw-r--r-- | protocols/default.h | 15 |
3 files changed, 63 insertions, 0 deletions
diff --git a/protocols/CMakeLists.txt b/protocols/CMakeLists.txt new file mode 100644 index 0000000..5f64a43 --- /dev/null +++ b/protocols/CMakeLists.txt @@ -0,0 +1,8 @@ +include_directories( + ${CMAKE_SOURCE_DIR} +) + + +set(HEADERS ${HEADERS} default.h) + +add_library(protocols STATIC default.c) diff --git a/protocols/default.c b/protocols/default.c new file mode 100644 index 0000000..5e344cf --- /dev/null +++ b/protocols/default.c @@ -0,0 +1,40 @@ +#include <sys/time.h> +#include <arpa/inet.h> +#include <assert.h> + +#include "tools.h" +#include "model.h" +#include "error.h" + +#define default_datacpy(dst, src, access, bank) pcilib_datacpy(dst, src, access, 1, bank->raw_endianess) + +int pcilib_default_read(pcilib_t *ctx, pcilib_register_bank_context_t *bank_ctx, pcilib_register_addr_t addr, pcilib_register_value_t *value) { + char *ptr; + pcilib_register_value_t val = 0; + + const pcilib_register_bank_description_t *b = bank_ctx->bank; + + int access = b->access / 8; + + ptr = pcilib_resolve_register_address(ctx, b->bar, b->read_addr + addr); + default_datacpy(&val, ptr, access, b); + +// *value = val&BIT_MASK(bits); + *value = val; + + return 0; +} + + +int pcilib_default_write(pcilib_t *ctx, pcilib_register_bank_context_t *bank_ctx, pcilib_register_addr_t addr, pcilib_register_value_t value) { + char *ptr; + + const pcilib_register_bank_description_t *b = bank_ctx->bank; + + int access = b->access / 8; + + ptr = pcilib_resolve_register_address(ctx, b->bar, b->write_addr + addr); + default_datacpy(ptr, &value, access, b); + + return 0; +} diff --git a/protocols/default.h b/protocols/default.h new file mode 100644 index 0000000..f8685f1 --- /dev/null +++ b/protocols/default.h @@ -0,0 +1,15 @@ +#ifndef _PCILIB_DEFAULT_H +#define _PCILIB_DEFAULT_H + +#include "pcilib.h" +#include "model.h" + +int pcilib_default_read(pcilib_t *ctx, pcilib_register_bank_context_t *bank, pcilib_register_addr_t addr, pcilib_register_value_t *value); +int pcilib_default_write(pcilib_t *ctx, pcilib_register_bank_context_t *bank, pcilib_register_addr_t addr, pcilib_register_value_t value); + +#ifdef _PCILIB_CONFIG_C +static pcilib_register_protocol_api_description_t pcilib_default_protocol_api = + { NULL, NULL, pcilib_default_read, pcilib_default_write }; +#endif /* _PCILIB_CONFIG_C */ + +#endif /* _PCILIB_DEFAULT_H */ |