diff options
Diffstat (limited to 'riscv/sim.cc')
-rw-r--r-- | riscv/sim.cc | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/riscv/sim.cc b/riscv/sim.cc index f4919c9..d08e274 100644 --- a/riscv/sim.cc +++ b/riscv/sim.cc @@ -38,7 +38,7 @@ extern device_factory_t* ns16550_factory; sim_t::sim_t(const cfg_t *cfg, bool halted, std::vector<std::pair<reg_t, abstract_mem_t*>> mems, - std::vector<device_factory_t*> plugin_device_factories, + const std::vector<device_factory_sargs_t>& plugin_device_factories, const std::vector<std::string>& args, const debug_module_config_t &dm_config, const char *log_path, @@ -115,10 +115,10 @@ 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<const device_factory_t*> device_factories = { - clint_factory, // clint must be element 0 - plic_factory, // plic must be element 1 - ns16550_factory}; + std::vector<device_factory_sargs_t> device_factories = { + {clint_factory, {}}, // clint must be element 0 + {plic_factory, {}}, // plic must be element 1 + {ns16550_factory, {}}}; device_factories.insert(device_factories.end(), plugin_device_factories.begin(), plugin_device_factories.end()); @@ -136,8 +136,11 @@ 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 (const device_factory_t *factory : device_factories) - device_nodes.append(factory->generate_dts(this)); + for (const device_factory_sargs_t& factory_sargs: device_factories) { + const device_factory_t* factory = factory_sargs.first; + const std::vector<std::string>& sargs = factory_sargs.second; + device_nodes.append(factory->generate_dts(this, sargs)); + } dts = make_dts(INSNS_PER_RTC_TICK, CPU_HZ, initrd_bounds.first, initrd_bounds.second, cfg->bootargs, cfg->pmpregions, cfg->pmpgranularity, @@ -160,9 +163,10 @@ 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++) { - const device_factory_t *factory = device_factories[i]; + const device_factory_t* factory = device_factories[i].first; + const std::vector<std::string>& sargs = device_factories[i].second; reg_t device_base = 0; - abstract_device_t* device = factory->parse_from_fdt(fdt, this, &device_base); + abstract_device_t* device = factory->parse_from_fdt(fdt, this, &device_base, sargs); if (device) { assert(device_base); std::shared_ptr<abstract_device_t> dev_ptr(device); |