aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--kapi/include/kapi/devices/manager.hpp16
-rw-r--r--kernel/kapi/devices.cpp22
-rw-r--r--libs/kstd/include/kstd/bits/flat_map.hpp2
3 files changed, 39 insertions, 1 deletions
diff --git a/kapi/include/kapi/devices/manager.hpp b/kapi/include/kapi/devices/manager.hpp
index 56cd678..7817fbc 100644
--- a/kapi/include/kapi/devices/manager.hpp
+++ b/kapi/include/kapi/devices/manager.hpp
@@ -5,7 +5,10 @@
#include "kapi/devices/device.hpp"
+#include <kstd/memory>
+
#include <cstddef>
+#include <string_view>
namespace kapi::devices
{
@@ -30,6 +33,19 @@ namespace kapi::devices
//! @return true if the device was unregistered successfully, false otherwise.
auto unregister_device(device & device) -> bool;
+ //! Find a device by its major and minor numbers.
+ //!
+ //! @param major the major number of the device.
+ //! @param minor the minor number of the device.
+ //! @return a pointer to the device iff. the device was found, nullptr otherwise.
+ auto find_device(std::size_t major, std::size_t minor) -> kstd::observer_ptr<device>;
+
+ //! Find a device by its name.
+ //!
+ //! @param name the name of the device.
+ //! @return a pointer to the device iff. the device was found, nullptr otherwise.
+ auto find_device(std::string_view name) -> kstd::observer_ptr<device>;
+
//! @}
} // namespace kapi::devices
diff --git a/kernel/kapi/devices.cpp b/kernel/kapi/devices.cpp
index c0b738e..7d35778 100644
--- a/kernel/kapi/devices.cpp
+++ b/kernel/kapi/devices.cpp
@@ -11,6 +11,7 @@
#include <atomic>
#include <cstddef>
#include <optional>
+#include <string_view>
#include <utility>
namespace kapi::devices
@@ -62,4 +63,25 @@ namespace kapi::devices
return false;
}
+ auto find_device(std::size_t major, std::size_t minor) -> kstd::observer_ptr<device>
+ {
+ if (device_tree.contains(std::pair{major, minor}))
+ {
+ return device_tree.at(std::pair{major, minor});
+ }
+ return nullptr;
+ }
+
+ auto find_device(std::string_view name) -> kstd::observer_ptr<device>
+ {
+ for (auto const & [key, value] : device_tree)
+ {
+ if (value->name() == name)
+ {
+ return value;
+ }
+ }
+ return nullptr;
+ }
+
} // namespace kapi::devices \ No newline at end of file
diff --git a/libs/kstd/include/kstd/bits/flat_map.hpp b/libs/kstd/include/kstd/bits/flat_map.hpp
index 9455549..fe46203 100644
--- a/libs/kstd/include/kstd/bits/flat_map.hpp
+++ b/libs/kstd/include/kstd/bits/flat_map.hpp
@@ -45,7 +45,7 @@ namespace kstd::bits
template<std::size_t Index>
requires(Index >= 0 && Index <= 1)
- constexpr auto get() const noexcept -> decltype(auto)
+ [[nodiscard]] constexpr auto get() const noexcept -> decltype(auto)
{
if constexpr (Index == 0)
{