Browse Source

device_t: device_factories should be const

pull/1374/head
Jerry Zhao 3 years ago
parent
commit
3ab4107b81
  1. 10
      riscv/abstract_device.h
  2. 6
      riscv/sim.cc

10
riscv/abstract_device.h

@ -21,16 +21,16 @@ class abstract_device_t {
// parameterized by parsing the DTS
class device_factory_t {
public:
virtual abstract_device_t* parse_from_fdt(const void* fdt, const sim_t* sim, reg_t* base) = 0;
virtual std::string generate_dts(const sim_t* sim) = 0;
virtual abstract_device_t* parse_from_fdt(const void* fdt, const sim_t* sim, reg_t* base) const = 0;
virtual std::string generate_dts(const sim_t* sim) const = 0;
virtual ~device_factory_t() {}
};
#define REGISTER_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) override { return parse(fdt, sim, base); } \
std::string generate_dts(const sim_t* sim) override { return generate(sim); } \
}; device_factory_t *name##_factory = new name##_factory_t();
name##_t* parse_from_fdt(const void* fdt, const sim_t* sim, reg_t* base) const override { return parse(fdt, sim, base); } \
std::string generate_dts(const sim_t* sim) const override { return generate(sim); } \
}; const device_factory_t *name##_factory = new name##_factory_t();
#endif

6
riscv/sim.cc

@ -120,7 +120,7 @@ sim_t::sim_t(const cfg_t *cfg, bool halted,
// that's not bus-accessible), but it should handle the normal use cases. In
// particular, the default device tree configuration that you get without
// setting the dtb_file argument has one.
std::vector<device_factory_t*> device_factories = {
std::vector<const device_factory_t*> device_factories = {
clint_factory, // clint must be element 0
plic_factory, // plic must be element 1
ns16550_factory};
@ -138,7 +138,7 @@ sim_t::sim_t(const cfg_t *cfg, bool halted,
} else {
std::pair<reg_t, reg_t> initrd_bounds = cfg->initrd_bounds();
std::string device_nodes;
for (device_factory_t *factory : device_factories)
for (const device_factory_t *factory : device_factories)
device_nodes.append(factory->generate_dts(this));
dts = make_dts(INSNS_PER_RTC_TICK, CPU_HZ,
initrd_bounds.first, initrd_bounds.second,
@ -162,7 +162,7 @@ sim_t::sim_t(const cfg_t *cfg, bool halted,
void *fdt = (void *)dtb.c_str();
for (size_t i = 0; i < device_factories.size(); i++) {
device_factory_t *factory = device_factories[i];
const device_factory_t *factory = device_factories[i];
reg_t device_base = 0;
abstract_device_t* device = factory->parse_from_fdt(fdt, this, &device_base);
if (device) {

Loading…
Cancel
Save