aboutsummaryrefslogtreecommitdiff
path: root/kernel/devices/src/storage
diff options
context:
space:
mode:
authorLukas Oesch <lukasoesch20@gmail.com>2026-03-03 08:37:56 +0100
committerLukas Oesch <lukasoesch20@gmail.com>2026-03-17 16:42:29 +0100
commitd2e9e3ee57918ddd4a1f81e70304dc15964555ff (patch)
tree92dbe0b5f97865f9f6c22f115be86c84df3e33da /kernel/devices/src/storage
parent9eeaf95fcc6b2d6302d8447940678e1597d26f0a (diff)
downloadteachos-d2e9e3ee57918ddd4a1f81e70304dc15964555ff.tar.xz
teachos-d2e9e3ee57918ddd4a1f81e70304dc15964555ff.zip
implement function to get a device by major and minor number
Diffstat (limited to 'kernel/devices/src/storage')
-rw-r--r--kernel/devices/src/storage/RAMDisk/RAMDiskController.cpp15
-rw-r--r--kernel/devices/src/storage/StorageManagement.cpp12
2 files changed, 25 insertions, 2 deletions
diff --git a/kernel/devices/src/storage/RAMDisk/RAMDiskController.cpp b/kernel/devices/src/storage/RAMDisk/RAMDiskController.cpp
index 90a7c0f..ec2cb97 100644
--- a/kernel/devices/src/storage/RAMDisk/RAMDiskController.cpp
+++ b/kernel/devices/src/storage/RAMDisk/RAMDiskController.cpp
@@ -3,12 +3,15 @@
#include "kapi/boot_module/boot_module.hpp"
#include "kapi/boot_module/boot_module_registry.hpp"
+#include "devices/BlockDevice.hpp"
#include "devices/storage/RAMDisk/RAMDiskDevice.hpp"
#include <kstd/print>
#include <algorithm>
+#include <array>
#include <cstddef>
+#include <cstdint>
namespace devices::storage::ram_disk
{
@@ -27,6 +30,18 @@ namespace devices::storage::ram_disk
m_devices.at(0) = ram_disk_device{module};
}
+ auto ram_disk_controller::device_by_major_minor(size_t major, size_t minor) -> block_device *
+ {
+ auto it = std::ranges::find_if(
+ m_devices, [major, minor](auto const & device) { return device.major() == major && device.minor() == minor; });
+
+ if (it != m_devices.end())
+ {
+ return &(*it);
+ }
+ return nullptr;
+ }
+
auto ram_disk_controller::devices_count() -> size_t
{
return m_devices.size();
diff --git a/kernel/devices/src/storage/StorageManagement.cpp b/kernel/devices/src/storage/StorageManagement.cpp
index 2daae0a..cfc5239 100644
--- a/kernel/devices/src/storage/StorageManagement.cpp
+++ b/kernel/devices/src/storage/StorageManagement.cpp
@@ -8,6 +8,7 @@
#include "devices/storage/StorageController.hpp"
#include <algorithm>
+#include <cstddef>
#include <optional>
namespace devices::storage
@@ -47,9 +48,16 @@ namespace devices::storage
m_controllers.at(0) = controller; // TODO BA-FS26 use push_back from kstd:vector
}
- auto storage_management::add_device(block_device * device) -> void
+ auto storage_management::device_by_major_minor(size_t major, size_t minor) -> block_device *
{
- m_devices.at(0) = device; // TODO BA-FS26 use push_back from kstd:vector
+ block_device * found = nullptr;
+
+ std::ranges::find_if(m_controllers, [&](auto const controller) {
+ found = controller->device_by_major_minor(major, minor);
+ return found != nullptr;
+ });
+
+ return found;
}
} // namespace devices::storage \ No newline at end of file