diff options
author | Andrew Waterman <andrew@sifive.com> | 2019-03-31 00:49:57 -0700 |
---|---|---|
committer | Chih-Min Chao <chihmin.chao@sifive.com> | 2019-05-14 01:50:01 -0700 |
commit | 7ac569476e8759d59e0698086bf1493154387bc0 (patch) | |
tree | 9cb1cf51f81daf1b1497c583783675d51cc3c86a /fesvr/memif.h | |
parent | c611cda2198ada65aae4c1ca6fd8a1d8f3cb0821 (diff) | |
download | spike-7ac569476e8759d59e0698086bf1493154387bc0.zip spike-7ac569476e8759d59e0698086bf1493154387bc0.tar.gz spike-7ac569476e8759d59e0698086bf1493154387bc0.tar.bz2 |
Add fesvr; only globally install fesvr headers/libs
Diffstat (limited to 'fesvr/memif.h')
-rw-r--r-- | fesvr/memif.h | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/fesvr/memif.h b/fesvr/memif.h new file mode 100644 index 0000000..3854d66 --- /dev/null +++ b/fesvr/memif.h @@ -0,0 +1,62 @@ +// See LICENSE for license details. + +#ifndef __MEMIF_H +#define __MEMIF_H + +#include <stdint.h> +#include <stddef.h> + +typedef uint64_t reg_t; +typedef int64_t sreg_t; +typedef reg_t addr_t; + +class chunked_memif_t +{ +public: + virtual void read_chunk(addr_t taddr, size_t len, void* dst) = 0; + virtual void write_chunk(addr_t taddr, size_t len, const void* src) = 0; + virtual void clear_chunk(addr_t taddr, size_t len) = 0; + + virtual size_t chunk_align() = 0; + virtual size_t chunk_max_size() = 0; +}; + +class memif_t +{ +public: + memif_t(chunked_memif_t* _cmemif) : cmemif(_cmemif) {} + virtual ~memif_t(){} + + // read and write byte arrays + virtual void read(addr_t addr, size_t len, void* bytes); + virtual void write(addr_t addr, size_t len, const void* bytes); + + // read and write 8-bit words + virtual uint8_t read_uint8(addr_t addr); + virtual int8_t read_int8(addr_t addr); + virtual void write_uint8(addr_t addr, uint8_t val); + virtual void write_int8(addr_t addr, int8_t val); + + // read and write 16-bit words + virtual uint16_t read_uint16(addr_t addr); + virtual int16_t read_int16(addr_t addr); + virtual void write_uint16(addr_t addr, uint16_t val); + virtual void write_int16(addr_t addr, int16_t val); + + // read and write 32-bit words + virtual uint32_t read_uint32(addr_t addr); + virtual int32_t read_int32(addr_t addr); + virtual void write_uint32(addr_t addr, uint32_t val); + virtual void write_int32(addr_t addr, int32_t val); + + // read and write 64-bit words + virtual uint64_t read_uint64(addr_t addr); + virtual int64_t read_int64(addr_t addr); + virtual void write_uint64(addr_t addr, uint64_t val); + virtual void write_int64(addr_t addr, int64_t val); + +protected: + chunked_memif_t* cmemif; +}; + +#endif // __MEMIF_H |