From 2af1bbc99e2a8fc4b86bb31023dbbb077b1cbc97 Mon Sep 17 00:00:00 2001 From: Lukas Oesch Date: Sun, 15 Mar 2026 16:49:07 +0100 Subject: move m_devices from ram_disk_controller to storage_controller, store point to devices --- .../storage/ram_disk/ram_disk_controller.hpp | 21 ---------------- .../include/devices/storage/storage_controller.hpp | 7 ++++-- .../include/devices/storage/storage_management.hpp | 10 ++++---- .../src/storage/ram_disk/ram_disk_controller.cpp | 28 ++++++++-------------- kernel/devices/src/storage/storage_controller.cpp | 19 +++++++++++++++ kernel/devices/src/storage/storage_management.cpp | 10 ++++---- .../include/filesystem/ext2/ext2_filesystem.hpp | 6 ++--- .../filesystem/include/filesystem/filesystem.hpp | 4 ++-- kernel/filesystem/src/ext2/ext2_filesystem.cpp | 6 ++--- 9 files changed, 52 insertions(+), 59 deletions(-) diff --git a/kernel/devices/include/devices/storage/ram_disk/ram_disk_controller.hpp b/kernel/devices/include/devices/storage/ram_disk/ram_disk_controller.hpp index 424082d..f69f8d8 100644 --- a/kernel/devices/include/devices/storage/ram_disk/ram_disk_controller.hpp +++ b/kernel/devices/include/devices/storage/ram_disk/ram_disk_controller.hpp @@ -3,13 +3,8 @@ #include "kapi/boot_module/boot_module_registry.hpp" -#include "devices/block_device.hpp" -#include "devices/storage/ram_disk/ram_disk_device.hpp" #include "devices/storage/storage_controller.hpp" -#include -#include - namespace devices::storage::ram_disk { /** @@ -28,24 +23,8 @@ namespace devices::storage::ram_disk */ auto probe() -> void override; - /** - * @brief Return the number of managed RAM-disk devices. - * @return Number of managed devices. - */ - auto devices_count() -> size_t override; - - /** - * @brief Look up a RAM-disk device by major/minor numbers. - * @param major Device major number. - * @param minor Device minor number. - * @return Matching block device, or nullptr if no device matches. - */ - auto device_by_minor(size_t minor) -> block_device * override; - private: kapi::boot_modules::boot_module_registry const * m_boot_module_registry; - - std::array m_devices{}; // TODO BA-FS26 use kstd::vector when available }; } // namespace devices::storage::ram_disk diff --git a/kernel/devices/include/devices/storage/storage_controller.hpp b/kernel/devices/include/devices/storage/storage_controller.hpp index 0c7cf83..697d3c3 100644 --- a/kernel/devices/include/devices/storage/storage_controller.hpp +++ b/kernel/devices/include/devices/storage/storage_controller.hpp @@ -2,7 +2,9 @@ #define TEACH_OS_KERNEL_DEVICES_STORAGE_STORAGE_CONTROLLER_HPP #include "devices/block_device.hpp" +#include "devices/device.hpp" +#include #include namespace devices::storage @@ -42,7 +44,7 @@ namespace devices::storage * @brief Return the number of devices managed by this controller. * @return Number of managed devices. */ - virtual auto devices_count() -> size_t = 0; + auto devices_count() -> size_t; /** * @brief Find a managed device by major/minor numbers. @@ -50,11 +52,12 @@ namespace devices::storage * @param minor Device minor number. * @return Matching block device, or nullptr if no device matches. */ - virtual auto device_by_minor(size_t minor) -> block_device * = 0; + auto device_by_minor(size_t minor) -> device *; protected: size_t m_major{}; size_t m_minors_per_device{}; + std::array m_devices{}; // TODO BA-FS26 use kstd::vector when available }; } // namespace devices::storage diff --git a/kernel/devices/include/devices/storage/storage_management.hpp b/kernel/devices/include/devices/storage/storage_management.hpp index 2bed459..6ca8db7 100644 --- a/kernel/devices/include/devices/storage/storage_management.hpp +++ b/kernel/devices/include/devices/storage/storage_management.hpp @@ -1,7 +1,7 @@ #ifndef TEACH_OS_KERNEL_DEVICES_STORAGE_STORAGE_MANAGEMENT_HPP #define TEACH_OS_KERNEL_DEVICES_STORAGE_STORAGE_MANAGEMENT_HPP -#include "devices/block_device.hpp" +#include "devices/device.hpp" #include "devices/storage/storage_controller.hpp" #include @@ -43,18 +43,18 @@ namespace devices::storage auto add_controller(storage_controller * controller) -> void; /** - * @brief Find a block device by major/minor numbers. + * @brief Find a device by major/minor numbers. * @param major Device major number. * @param minor Device minor number. - * @return Matching block device, or nullptr if no device matches. + * @return Matching device, or nullptr if no device matches. */ - auto device_by_major_minor(size_t major, size_t minor) -> block_device *; + auto device_by_major_minor(size_t major, size_t minor) -> device *; /** * @brief Determine the boot device. * @return Boot device, or nullptr if it cannot be determined. */ - auto determine_boot_device() -> block_device *; + auto determine_boot_device() -> device *; private: /** diff --git a/kernel/devices/src/storage/ram_disk/ram_disk_controller.cpp b/kernel/devices/src/storage/ram_disk/ram_disk_controller.cpp index 9f9537f..b57dcfb 100644 --- a/kernel/devices/src/storage/ram_disk/ram_disk_controller.cpp +++ b/kernel/devices/src/storage/ram_disk/ram_disk_controller.cpp @@ -2,7 +2,6 @@ #include "kapi/boot_module/boot_module_registry.hpp" -#include "devices/block_device.hpp" #include "devices/storage/ram_disk/ram_disk_device.hpp" #include @@ -10,9 +9,17 @@ #include #include #include +#include namespace devices::storage::ram_disk { + namespace + { + // TODO BA-FS26 @Felix gibts besseren weg (ausser dynamic Memory) + // TODO BA-FS26 remove again, when dynamic memory available + constinit auto static active_ram_disk_device = std::optional{}; + } // namespace + ram_disk_controller::ram_disk_controller(kapi::boot_modules::boot_module_registry const * registry) : m_boot_module_registry(registry) {} @@ -25,23 +32,8 @@ namespace devices::storage::ram_disk auto const minor = current_device_index++ * m_minors_per_device; // TODO BA-FS26 use push_back from kstd::vector when available - m_devices.at(0) = ram_disk_device{module, m_major, minor}; + active_ram_disk_device.emplace(module, m_major, minor); + m_devices.at(0) = &*active_ram_disk_device; }); } - - auto ram_disk_controller::device_by_minor(size_t minor) -> block_device * - { - auto it = std::ranges::find_if(m_devices, [minor](auto const & device) { return device.minor() == minor; }); - - if (it != m_devices.end()) - { - return &(*it); - } - return nullptr; - } - - auto ram_disk_controller::devices_count() -> size_t - { - return m_devices.size(); - } } // namespace devices::storage::ram_disk \ No newline at end of file diff --git a/kernel/devices/src/storage/storage_controller.cpp b/kernel/devices/src/storage/storage_controller.cpp index f95f533..d127a8c 100644 --- a/kernel/devices/src/storage/storage_controller.cpp +++ b/kernel/devices/src/storage/storage_controller.cpp @@ -1,5 +1,8 @@ #include "devices/storage/storage_controller.hpp" +#include "devices/device.hpp" + +#include #include namespace devices::storage @@ -14,4 +17,20 @@ namespace devices::storage { return m_major; } + + auto storage_controller::device_by_minor(size_t minor) -> device * + { + auto it = std::ranges::find_if(m_devices, [minor](auto const & device) { return device->minor() == minor; }); + + if (it != m_devices.end()) + { + return *it; + } + return nullptr; + } + + auto storage_controller::devices_count() -> size_t + { + return m_devices.size(); + } } // namespace devices::storage \ No newline at end of file diff --git a/kernel/devices/src/storage/storage_management.cpp b/kernel/devices/src/storage/storage_management.cpp index a5b6503..a981359 100644 --- a/kernel/devices/src/storage/storage_management.cpp +++ b/kernel/devices/src/storage/storage_management.cpp @@ -3,7 +3,7 @@ #include "kapi/boot_modules.hpp" #include "kapi/system.hpp" -#include "devices/block_device.hpp" +#include "devices/device.hpp" #include "devices/storage/ram_disk/ram_disk_controller.hpp" #include "devices/storage/storage_controller.hpp" @@ -20,6 +20,7 @@ namespace devices::storage constinit size_t static next_free_major = START_MAJOR; constinit auto static active_storage_management = std::optional{}; + // TODO BA-FS26 remove again, when dynamic memory available constinit auto static active_ram_disk_controller = std::optional{}; } // namespace @@ -53,9 +54,9 @@ namespace devices::storage m_controllers.at(0) = controller; // TODO BA-FS26 use push_back from kstd:vector } - auto storage_management::device_by_major_minor(size_t major, size_t minor) -> block_device * + auto storage_management::device_by_major_minor(size_t major, size_t minor) -> device * { - block_device * found = nullptr; + device * found = nullptr; std::ranges::find_if(m_controllers, [&](auto const controller) { if (controller != nullptr && controller->major() == major) @@ -69,9 +70,8 @@ namespace devices::storage return found; } - auto storage_management::determine_boot_device() -> block_device * + auto storage_management::determine_boot_device() -> device * { - // TODO BA-FS26 better way? return device_by_major_minor(START_MAJOR, 0); } diff --git a/kernel/filesystem/include/filesystem/ext2/ext2_filesystem.hpp b/kernel/filesystem/include/filesystem/ext2/ext2_filesystem.hpp index 0027475..91ba14a 100644 --- a/kernel/filesystem/include/filesystem/ext2/ext2_filesystem.hpp +++ b/kernel/filesystem/include/filesystem/ext2/ext2_filesystem.hpp @@ -1,17 +1,17 @@ #ifndef TEACH_OS_KERNEL_FILESYSTEM_EXT2_FILESYSTEM_HPP #define TEACH_OS_KERNEL_FILESYSTEM_EXT2_FILESYSTEM_HPP -#include "devices/block_device.hpp" +#include "devices/device.hpp" #include "filesystem/filesystem.hpp" namespace filesystem::ext2 { struct ext2_filesystem : filesystem { - auto mount(devices::block_device * block_device) -> int override; + auto mount(devices::device * device) -> int override; private: - devices::block_device * m_block_device{}; + devices::device * m_device{}; }; } // namespace filesystem::ext2 diff --git a/kernel/filesystem/include/filesystem/filesystem.hpp b/kernel/filesystem/include/filesystem/filesystem.hpp index d5704c1..113b239 100644 --- a/kernel/filesystem/include/filesystem/filesystem.hpp +++ b/kernel/filesystem/include/filesystem/filesystem.hpp @@ -1,7 +1,7 @@ #ifndef TEACH_OS_KERNEL_FILESYSTEM_FILESYSTEM_HPP #define TEACH_OS_KERNEL_FILESYSTEM_FILESYSTEM_HPP -#include "devices/block_device.hpp" +#include "devices/device.hpp" #include "filesystem/inode.hpp" namespace filesystem @@ -10,7 +10,7 @@ namespace filesystem { virtual ~filesystem() = default; - virtual auto mount(devices::block_device * block_device) -> int = 0; + virtual auto mount(devices::device * device) -> int = 0; auto root_inode() -> inode *; diff --git a/kernel/filesystem/src/ext2/ext2_filesystem.cpp b/kernel/filesystem/src/ext2/ext2_filesystem.cpp index bdd430d..7111d13 100644 --- a/kernel/filesystem/src/ext2/ext2_filesystem.cpp +++ b/kernel/filesystem/src/ext2/ext2_filesystem.cpp @@ -1,12 +1,12 @@ #include "filesystem/ext2/ext2_filesystem.hpp" -#include "devices/block_device.hpp" +#include "devices/device.hpp" namespace filesystem::ext2 { - auto ext2_filesystem::mount(devices::block_device * block_device) -> int + auto ext2_filesystem::mount(devices::device * device) -> int { - if (!block_device) + if (!device) { return -1; // TODO BA-FS26 panic or errorcode? } -- cgit v1.2.3