diff options
| author | Felix Morgner <felix.morgner@ost.ch> | 2026-07-24 17:50:16 +0200 |
|---|---|---|
| committer | Felix Morgner <felix.morgner@ost.ch> | 2026-07-24 17:50:16 +0200 |
| commit | e99eb52d9923606dd325862a5f2e649eee0b2d3e (patch) | |
| tree | e3a15138bfec8a630d02f0f858bb9f000c6da3f8 /kernel/kapi/devices.cpp | |
| parent | aa25bfac399e32efda039eb833b2c4d74f1edba0 (diff) | |
| download | kernel-e99eb52d9923606dd325862a5f2e649eee0b2d3e.tar.xz kernel-e99eb52d9923606dd325862a5f2e649eee0b2d3e.zip | |
kapi: formally extract device registry
Diffstat (limited to 'kernel/kapi/devices.cpp')
| -rw-r--r-- | kernel/kapi/devices.cpp | 65 |
1 files changed, 4 insertions, 61 deletions
diff --git a/kernel/kapi/devices.cpp b/kernel/kapi/devices.cpp index 64e549f3..b0f384ab 100644 --- a/kernel/kapi/devices.cpp +++ b/kernel/kapi/devices.cpp @@ -8,12 +8,9 @@ #include <kstd/flat_map.hpp> #include <kstd/memory.hpp> -#include <kstd/print.hpp> #include <kstd/string.hpp> -#include <kstd/vector.hpp> #include <string_view> -#include <utility> namespace kapi::devices { @@ -30,11 +27,12 @@ namespace kapi::devices kapi::system::panic("[OS:DEV] The device subsystem has already been initialized"); } + device_registry::init(); interface_registry::init(); kernel::drivers::init(); root_bus = kstd::make_shared<kernel::devices::root_bus>(); - register_device(root_bus); + device_registry::get().add(root_bus); } auto get_root_bus() -> kstd::shared_ptr<bus> @@ -46,70 +44,15 @@ namespace kapi::devices return root_bus; } - auto register_device(kstd::shared_ptr<device> device) -> bool - { - if (!device) - { - return false; - } - - kstd::println("[OS:DEV] Registering device {}", device->name()); - - auto found = device_tree.find(device->name()); - if (found != device_tree.end()) - { - if (!found->second.expired()) - { - return false; - } - - found->second = device; - return true; - } - - return device_tree.emplace(device->name(), device).second; - } - - auto unregister_device(device &) -> bool - { - kstd::println("[OS:DEV] TODO: implement device deregistration"); - return false; - } - - auto find_device(std::string_view name) -> kstd::shared_ptr<device> - { - auto found = device_tree.find(kstd::string{name}); - if (found == device_tree.end()) - { - return nullptr; - } - - return found->second.lock(); - } - - auto all() -> kstd::vector<kstd::shared_ptr<device>> - { - auto result = kstd::vector<kstd::shared_ptr<device>>{}; - - for (auto const & [name, weak_device] : device_tree) - { - if (auto device = weak_device.lock()) - { - result.push_back(std::move(device)); - } - } - - return result; - } - } // namespace kapi::devices namespace kapi::test_support::devices { auto deinit() -> void { - deinit_interface_registry(); deinit_driver_registry(); + deinit_interface_registry(); + deinit_device_registry(); kapi::devices::root_bus.reset(); } |
