diff options
| -rw-r--r-- | kapi/include/kapi/devices/device.hpp | 6 | ||||
| -rw-r--r-- | kernel/kapi/devices/bus.cpp | 1 | ||||
| -rw-r--r-- | kernel/kapi/devices/device.cpp | 8 |
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 |
