diff options
Diffstat (limited to 'riscv/abstract_device.h')
-rw-r--r-- | riscv/abstract_device.h | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/riscv/abstract_device.h b/riscv/abstract_device.h index 0726cd7..41f5c3f 100644 --- a/riscv/abstract_device.h +++ b/riscv/abstract_device.h @@ -16,6 +16,7 @@ class abstract_device_t { public: virtual bool load(reg_t addr, size_t len, uint8_t* bytes) = 0; virtual bool store(reg_t addr, size_t len, const uint8_t* bytes) = 0; + virtual reg_t size() = 0; virtual ~abstract_device_t() {} virtual void tick(reg_t UNUSED rtc_ticks) {} }; @@ -45,4 +46,11 @@ mmio_device_map_t& mmio_device_map(); std::string generate_dts(const sim_t* sim, const std::vector<std::string>& sargs) const override { return generate(sim, sargs); } \ }; device_factory_t *name##_factory = new name##_factory_t(); +#define REGISTER_BUILTIN_DEVICE(name, parse, generate) \ + class name##_factory_t : public device_factory_t { \ + public: \ + name##_t* parse_from_fdt(const void* fdt, const sim_t* sim, reg_t* base, const std::vector<std::string>& sargs) const override { return parse(fdt, sim, base, sargs); } \ + std::string generate_dts(const sim_t* sim, const std::vector<std::string>& sargs) const override { return generate(sim, sargs); } \ + }; device_factory_t *name##_factory = new name##_factory_t(); + #endif |