aboutsummaryrefslogtreecommitdiff
path: root/riscv/devices.cc
diff options
context:
space:
mode:
Diffstat (limited to 'riscv/devices.cc')
-rw-r--r--riscv/devices.cc22
1 files changed, 22 insertions, 0 deletions
diff --git a/riscv/devices.cc b/riscv/devices.cc
index d22e202..fb5bb5a 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<abstract_sim_if_t*>(external_simulator)->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<abstract_sim_if_t*>(external_simulator)->store(addr, len, bytes);
+}
+
+reg_t external_sim_device_t::size() {
+ if (unlikely(external_simulator == nullptr)) return 0;
+ return PGSIZE; // TODO: proper size
+}