diff options
| author | marcel.braun <marcel.braun@ost.ch> | 2026-02-28 17:03:03 +0100 |
|---|---|---|
| committer | Lukas Oesch <lukasoesch20@gmail.com> | 2026-03-17 16:42:17 +0100 |
| commit | 2d52fae22143ec94c3741e60fd74374f9675e742 (patch) | |
| tree | 3f159c27304f6c661e80d95b80c3a7a8da7056f2 | |
| parent | 7a9bdbc58361ff22491785d778474571035ad697 (diff) | |
| download | teachos-2d52fae22143ec94c3741e60fd74374f9675e742.tar.xz teachos-2d52fae22143ec94c3741e60fd74374f9675e742.zip | |
Implement RAMDiskController and instantiate it in StorageManagement
6 files changed, 64 insertions, 9 deletions
diff --git a/kernel/devices/CMakeLists.txt b/kernel/devices/CMakeLists.txt index 8022dee..0707a03 100644 --- a/kernel/devices/CMakeLists.txt +++ b/kernel/devices/CMakeLists.txt @@ -4,7 +4,6 @@ add_library("kernel::devices" ALIAS "kernel_devices") target_sources("kernel_devices" PRIVATE "src/Device.cpp" "src/BlockDevice.cpp" - "src/storage/StorageController.cpp" "src/storage/StorageManagement.cpp" "src/storage/RAMDisk/RAMDiskController.cpp" "src/storage/RAMDisk/RAMDiskDevice.cpp" diff --git a/kernel/devices/include/devices/storage/RAMDisk/RAMDiskController.hpp b/kernel/devices/include/devices/storage/RAMDisk/RAMDiskController.hpp index 3fcb645..6213ed4 100644 --- a/kernel/devices/include/devices/storage/RAMDisk/RAMDiskController.hpp +++ b/kernel/devices/include/devices/storage/RAMDisk/RAMDiskController.hpp @@ -1,10 +1,29 @@ #ifndef TEACH_OS_KERNEL_DEVICES_STORAGE_RAM_DISK_CONTROLLER_HPP #define TEACH_OS_KERNEL_DEVICES_STORAGE_RAM_DISK_CONTROLLER_HPP +#include "kapi/boot_module/boot_module.hpp" +#include "kapi/boot_module/boot_module_registry.hpp" + +#include "devices/storage/RAMDisk/RAMDiskDevice.hpp" +#include "devices/storage/StorageController.hpp" + +#include <array> +#include <cstddef> + namespace devices::storage::ram_disk { - struct ram_disk_controller + struct ram_disk_controller : storage_controller { + explicit ram_disk_controller(kapi::boot_modules::boot_module_registry const * registry); + + auto probe() -> void override; + auto devices_count() -> size_t override; + + private: + auto create_device_from_boot_module(kapi::boot_modules::boot_module const & module) -> void; + + kapi::boot_modules::boot_module_registry const * m_boot_module_registry; + std::array<ram_disk_device, 1> m_devices{}; // TODO BA-FS26 use kstd::vector }; } // namespace devices::storage::ram_disk diff --git a/kernel/devices/include/devices/storage/StorageController.hpp b/kernel/devices/include/devices/storage/StorageController.hpp index 3167be0..7904d07 100644 --- a/kernel/devices/include/devices/storage/StorageController.hpp +++ b/kernel/devices/include/devices/storage/StorageController.hpp @@ -1,10 +1,15 @@ #ifndef TEACH_OS_KERNEL_DEVICES_STORAGE_STORAGE_CONTROLLER_HPP #define TEACH_OS_KERNEL_DEVICES_STORAGE_STORAGE_CONTROLLER_HPP +#include <cstddef> namespace devices::storage { struct storage_controller { + virtual ~storage_controller() = default; + + virtual auto probe() -> void = 0; + virtual auto devices_count() -> size_t = 0; }; } // namespace devices::storage diff --git a/kernel/devices/src/storage/RAMDisk/RAMDiskController.cpp b/kernel/devices/src/storage/RAMDisk/RAMDiskController.cpp index 9c6427d..c4807b0 100644 --- a/kernel/devices/src/storage/RAMDisk/RAMDiskController.cpp +++ b/kernel/devices/src/storage/RAMDisk/RAMDiskController.cpp @@ -1,6 +1,33 @@ #include "devices/storage/RAMDisk/RAMDiskController.hpp" +#include "kapi/boot_module/boot_module.hpp" +#include "kapi/boot_module/boot_module_registry.hpp" + +#include <kstd/print> + +#include <algorithm> +#include <cstddef> + namespace devices::storage::ram_disk { - // TODO BA-FS26 implement ram disk controller functionality + ram_disk_controller::ram_disk_controller(kapi::boot_modules::boot_module_registry const * registry) + : m_boot_module_registry(registry) + {} + + auto ram_disk_controller::probe() -> void + { + std::ranges::for_each(*m_boot_module_registry, + [this](auto const & module) { create_device_from_boot_module(module); }); + } + + auto ram_disk_controller::devices_count() -> size_t + { + return m_devices.size(); + } + + auto create_device_from_boot_module(kapi::boot_modules::boot_module const & module) -> void + { + kstd::println("[RAM DISK CONTROLLER] Found boot module: {} at address {} with size {} bytes", module.name, + module.start_address, module.size); + } } // namespace devices::storage::ram_disk
\ No newline at end of file diff --git a/kernel/devices/src/storage/StorageController.cpp b/kernel/devices/src/storage/StorageController.cpp deleted file mode 100644 index fe386cf..0000000 --- a/kernel/devices/src/storage/StorageController.cpp +++ /dev/null @@ -1,6 +0,0 @@ -#include "devices/storage/StorageController.hpp" - -namespace devices::storage -{ - // TODO BA-FS26 implement storage controller functionality -} // namespace devices::storage
\ No newline at end of file diff --git a/kernel/devices/src/storage/StorageManagement.cpp b/kernel/devices/src/storage/StorageManagement.cpp index 14c59ac..9cc9a06 100644 --- a/kernel/devices/src/storage/StorageManagement.cpp +++ b/kernel/devices/src/storage/StorageManagement.cpp @@ -1,8 +1,10 @@ #include "devices/storage/StorageManagement.hpp" +#include "kapi/boot_modules.hpp" #include "kapi/system.hpp" #include "devices/BlockDevice.hpp" +#include "devices/storage/RAMDisk/RAMDiskController.hpp" #include "devices/storage/StorageController.hpp" #include <optional> @@ -12,6 +14,7 @@ namespace devices::storage namespace { 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 auto storage_management::init() -> void @@ -21,6 +24,14 @@ namespace devices::storage kapi::system::panic("[DEVICES] Storage management has already been initialized."); } active_storage_management.emplace(storage_management{}); + + active_ram_disk_controller.emplace(&kapi::boot_modules::get_boot_module_registry()); + active_storage_management->add_controller(&active_ram_disk_controller.value()); + + for (auto controller : active_storage_management->m_controllers) + { + controller->probe(); + } } auto storage_management::get() -> storage_management & |
