diff options
| author | Lukas Oesch <lukasoesch20@gmail.com> | 2026-03-03 08:37:56 +0100 |
|---|---|---|
| committer | Lukas Oesch <lukasoesch20@gmail.com> | 2026-03-17 16:42:29 +0100 |
| commit | d2e9e3ee57918ddd4a1f81e70304dc15964555ff (patch) | |
| tree | 92dbe0b5f97865f9f6c22f115be86c84df3e33da /kernel/devices/src/storage | |
| parent | 9eeaf95fcc6b2d6302d8447940678e1597d26f0a (diff) | |
| download | teachos-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.cpp | 15 | ||||
| -rw-r--r-- | kernel/devices/src/storage/StorageManagement.cpp | 12 |
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 |
