From 2d84179a32e1463ad54ee7b09cfebc32ee0fa8e7 Mon Sep 17 00:00:00 2001 From: mslijepc Date: Thu, 10 Apr 2025 16:38:03 +0200 Subject: [PATCH] added external_sim_device_t class and methods --- riscv/devices.cc | 22 ++++++++++++++++++++++ riscv/devices.h | 12 ++++++++++++ 2 files changed, 34 insertions(+) diff --git a/riscv/devices.cc b/riscv/devices.cc index d22e202b..e94ffb4c 100644 --- a/riscv/devices.cc +++ b/riscv/devices.cc @@ -155,3 +155,25 @@ void mem_t::dump(std::ostream& o) { } } } + +external_sim_device_t::external_sim_device_t(void* sim) + : external_simulator(sim) {} + +void external_sim_device_t::set_simulator(void* sim) { + external_simulator = sim; +} + +bool external_sim_device_t::load(reg_t addr, size_t len, uint8_t* bytes) { + if (unlikely(external_simulator == nullptr)) return false; + return static_cast(external_simulator)->do_load(addr, len, bytes); +} + +bool external_sim_device_t::store(reg_t addr, size_t len, const uint8_t* bytes) { + if (unlikely(external_simulator == nullptr)) return false; + return static_cast(external_simulator)->do_store(addr, len, bytes); +} + +reg_t external_sim_device_t::size() { + if (unlikely(external_simulator == nullptr)) return 0; + return PGSIZE; // TODO: proper size +} diff --git a/riscv/devices.h b/riscv/devices.h index ec013808..94de3c42 100644 --- a/riscv/devices.h +++ b/riscv/devices.h @@ -78,6 +78,18 @@ public: virtual bool do_store(reg_t addr, size_t len, const uint8_t* bytes) = 0; }; +class external_sim_device_t : public abstract_device_t { +public: + external_sim_device_t(void* sim); + void set_simulator(void* sim); + bool load(reg_t addr, size_t len, uint8_t* bytes) override; + bool store(reg_t addr, size_t len, const uint8_t* bytes) override; + reg_t size() override; + +private: + void* external_simulator; +}; + class clint_t : public abstract_device_t { public: clint_t(const simif_t*, uint64_t freq_hz, bool real_time);