aboutsummaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'kernel')
-rw-r--r--kernel/devices/CMakeLists.txt1
-rw-r--r--kernel/devices/include/devices/storage/RAMDisk/RAMDiskController.hpp21
-rw-r--r--kernel/devices/include/devices/storage/StorageController.hpp5
-rw-r--r--kernel/devices/src/storage/RAMDisk/RAMDiskController.cpp29
-rw-r--r--kernel/devices/src/storage/StorageController.cpp6
-rw-r--r--kernel/devices/src/storage/StorageManagement.cpp11
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 &