aboutsummaryrefslogtreecommitdiff
path: root/riscv/devices.cc
diff options
context:
space:
mode:
Diffstat (limited to 'riscv/devices.cc')
-rw-r--r--riscv/devices.cc46
1 files changed, 6 insertions, 40 deletions
diff --git a/riscv/devices.cc b/riscv/devices.cc
index 81b232d..2c06f78 100644
--- a/riscv/devices.cc
+++ b/riscv/devices.cc
@@ -2,6 +2,12 @@
#include "mmu.h"
#include <stdexcept>
+mmio_device_map_t& mmio_device_map()
+{
+ static mmio_device_map_t device_map;
+ return device_map;
+}
+
void bus_t::add_device(reg_t addr, abstract_device_t* dev)
{
// Searching devices via lower_bound/upper_bound
@@ -51,46 +57,6 @@ std::pair<reg_t, abstract_device_t*> bus_t::find_device(reg_t addr)
return std::make_pair(it->first, it->second);
}
-// Type for holding all registered MMIO plugins by name.
-using mmio_plugin_map_t = std::map<std::string, mmio_plugin_t>;
-
-// Simple singleton instance of an mmio_plugin_map_t.
-static mmio_plugin_map_t& mmio_plugin_map()
-{
- static mmio_plugin_map_t instance;
- return instance;
-}
-
-void register_mmio_plugin(const char* name_cstr,
- const mmio_plugin_t* mmio_plugin)
-{
- std::string name(name_cstr);
- if (!mmio_plugin_map().emplace(name, *mmio_plugin).second) {
- throw std::runtime_error("Plugin \"" + name + "\" already registered!");
- }
-}
-
-mmio_plugin_device_t::mmio_plugin_device_t(const std::string& name,
- const std::string& args)
- : plugin(mmio_plugin_map().at(name)), user_data((*plugin.alloc)(args.c_str()))
-{
-}
-
-mmio_plugin_device_t::~mmio_plugin_device_t()
-{
- (*plugin.dealloc)(user_data);
-}
-
-bool mmio_plugin_device_t::load(reg_t addr, size_t len, uint8_t* bytes)
-{
- return (*plugin.load)(user_data, addr, len, bytes);
-}
-
-bool mmio_plugin_device_t::store(reg_t addr, size_t len, const uint8_t* bytes)
-{
- return (*plugin.store)(user_data, addr, len, bytes);
-}
-
mem_t::mem_t(reg_t size)
: sz(size)
{