aboutsummaryrefslogtreecommitdiff
path: root/kernel/kapi/devices.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/kapi/devices.cpp')
-rw-r--r--kernel/kapi/devices.cpp19
1 files changed, 19 insertions, 0 deletions
diff --git a/kernel/kapi/devices.cpp b/kernel/kapi/devices.cpp
index 8f3011fe..5eed1b87 100644
--- a/kernel/kapi/devices.cpp
+++ b/kernel/kapi/devices.cpp
@@ -2,6 +2,7 @@
#include <kernel/devices/root_bus.hpp>
+#include <kapi/devices/driver_registry.hpp>
#include <kapi/system.hpp>
#include <kapi/test_support/devices.hpp>
@@ -9,6 +10,7 @@
#include <kstd/memory.hpp>
#include <kstd/print.hpp>
#include <kstd/string.hpp>
+#include <kstd/vector.hpp>
#include <string_view>
#include <utility>
@@ -29,6 +31,7 @@ namespace kapi::devices
}
interface_registry::init();
+ driver_registry::init();
root_bus = kstd::make_shared<kernel::devices::root_bus>();
register_device(root_bus);
@@ -85,6 +88,21 @@ namespace kapi::devices
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
@@ -92,6 +110,7 @@ namespace kapi::test_support::devices
auto deinit() -> void
{
deinit_interface_registry();
+ deinit_driver_registry();
kapi::devices::root_bus.reset();
}