aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFelix Morgner <felix.morgner@ost.ch>2026-04-10 10:38:51 +0200
committerFelix Morgner <felix.morgner@ost.ch>2026-04-10 10:38:51 +0200
commit5a6b6ab376e67b173ef36f831445ccba7e86e038 (patch)
tree54c1ef67971bc023bed74fbf5d94f45cf95c2159
parentdd8dfa3e674d05927e9ed4b7efcb634a634bfdcc (diff)
downloadteachos-5a6b6ab376e67b173ef36f831445ccba7e86e038.tar.xz
teachos-5a6b6ab376e67b173ef36f831445ccba7e86e038.zip
kapi/devices: add parent back-pointer to device
-rw-r--r--kapi/include/kapi/devices/device.hpp6
-rw-r--r--kernel/kapi/devices/bus.cpp1
-rw-r--r--kernel/kapi/devices/device.cpp8
3 files changed, 15 insertions, 0 deletions
diff --git a/kapi/include/kapi/devices/device.hpp b/kapi/include/kapi/devices/device.hpp
index b3647da..9939494 100644
--- a/kapi/include/kapi/devices/device.hpp
+++ b/kapi/include/kapi/devices/device.hpp
@@ -3,6 +3,7 @@
// IWYU pragma: private, include "kapi/devices.hpp"
+#include <kstd/memory>
#include <kstd/string>
#include <cstddef>
@@ -62,9 +63,14 @@ namespace kapi::devices
[[nodiscard]] virtual auto is_block_device() const -> bool;
private:
+ friend struct bus;
+
+ auto set_parent(kstd::observer_ptr<struct bus> parent) -> void;
+
size_t m_major;
size_t m_minor;
kstd::string m_name;
+ kstd::observer_ptr<bus> m_parent;
};
//! @}
diff --git a/kernel/kapi/devices/bus.cpp b/kernel/kapi/devices/bus.cpp
index 66b84d2..5f0dfcd 100644
--- a/kernel/kapi/devices/bus.cpp
+++ b/kernel/kapi/devices/bus.cpp
@@ -45,6 +45,7 @@ namespace kapi::devices
auto bus::add_child(kstd::unique_ptr<device> child) -> void
{
auto observer = m_observers.emplace_back(child.get());
+ child->set_parent(kstd::make_observer(this));
m_devices.push_back(std::move(child));
kapi::devices::register_device(*observer);
diff --git a/kernel/kapi/devices/device.cpp b/kernel/kapi/devices/device.cpp
index 9f7a404..41d96dc 100644
--- a/kernel/kapi/devices/device.cpp
+++ b/kernel/kapi/devices/device.cpp
@@ -1,5 +1,8 @@
#include "kapi/devices/device.hpp"
+#include "kapi/devices/bus.hpp"
+
+#include <kstd/memory>
#include <kstd/string>
#include <cstddef>
@@ -32,4 +35,9 @@ namespace kapi::devices
return false;
}
+ auto device::set_parent(kstd::observer_ptr<bus> parent) -> void
+ {
+ m_parent = parent;
+ }
+
} // namespace kapi::devices \ No newline at end of file