Browse Source

added external_sim_device_t class and methods

pull/1953/head
mslijepc 12 months ago
parent
commit
2d84179a32
  1. 22
      riscv/devices.cc
  2. 12
      riscv/devices.h

22
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)->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<abstract_sim_if_t*>(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
}

12
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);

Loading…
Cancel
Save