diff options
author | Andrew Waterman <andrew@sifive.com> | 2019-03-31 00:49:57 -0700 |
---|---|---|
committer | Andrew Waterman <andrew@sifive.com> | 2019-03-31 00:50:15 -0700 |
commit | f49618ca9d674ec7e596118f85027c4b503862ac (patch) | |
tree | 3b6ad73cbe8760309f930b743950a2853ad17668 /fesvr/memif.h | |
parent | 61cb96df00067ba61cf3816c74c18aef5677197a (diff) | |
download | spike-f49618ca9d674ec7e596118f85027c4b503862ac.zip spike-f49618ca9d674ec7e596118f85027c4b503862ac.tar.gz spike-f49618ca9d674ec7e596118f85027c4b503862ac.tar.bz2 |
Add fesvr; only globally install fesvr headers/libsstatic-link
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 |