diff options
| author | Lukas Oesch <lukasoesch20@gmail.com> | 2026-03-03 10:15:20 +0100 |
|---|---|---|
| committer | Lukas Oesch <lukasoesch20@gmail.com> | 2026-03-17 16:42:30 +0100 |
| commit | 52a007ebee4e8ca284ec5767de01c311e9f1860e (patch) | |
| tree | ca9ea7720562d04b8590e142e908f31030eee6a8 /kernel/devices/src/storage/StorageManagement.cpp | |
| parent | d2e9e3ee57918ddd4a1f81e70304dc15964555ff (diff) | |
| download | teachos-52a007ebee4e8ca284ec5767de01c311e9f1860e.tar.xz teachos-52a007ebee4e8ca284ec5767de01c311e9f1860e.zip | |
implement major and minor analog to the linux kernel
Diffstat (limited to 'kernel/devices/src/storage/StorageManagement.cpp')
| -rw-r--r-- | kernel/devices/src/storage/StorageManagement.cpp | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/kernel/devices/src/storage/StorageManagement.cpp b/kernel/devices/src/storage/StorageManagement.cpp index cfc5239..58d8510 100644 --- a/kernel/devices/src/storage/StorageManagement.cpp +++ b/kernel/devices/src/storage/StorageManagement.cpp @@ -15,6 +15,9 @@ namespace devices::storage { namespace { + constexpr size_t static MINORS_PER_DEVICE = 16; + constinit size_t static next_free_major = 1; + constinit auto static active_storage_management = std::optional<storage_management>{}; constinit auto static active_ram_disk_controller = std::optional<ram_disk::ram_disk_controller>{}; } // namespace @@ -45,6 +48,7 @@ namespace devices::storage auto storage_management::add_controller(storage_controller * controller) -> void { + controller->set_ids(next_free_major++, MINORS_PER_DEVICE); m_controllers.at(0) = controller; // TODO BA-FS26 use push_back from kstd:vector } @@ -53,8 +57,12 @@ namespace devices::storage block_device * found = nullptr; std::ranges::find_if(m_controllers, [&](auto const controller) { - found = controller->device_by_major_minor(major, minor); - return found != nullptr; + if (controller != nullptr && controller->major() == major) + { + found = controller->device_by_major_minor(major, minor); + return found != nullptr; + } + return false; }); return found; |
