aboutsummaryrefslogtreecommitdiff
path: root/kernel/devices
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/devices')
-rw-r--r--kernel/devices/include/devices/BlockDevice.hpp4
-rw-r--r--kernel/devices/include/devices/Device.hpp9
-rw-r--r--kernel/devices/include/devices/storage/RAMDisk/RAMDiskController.hpp2
-rw-r--r--kernel/devices/include/devices/storage/StorageController.hpp7
-rw-r--r--kernel/devices/include/devices/storage/StorageManagement.hpp4
-rw-r--r--kernel/devices/src/Device.cpp13
-rw-r--r--kernel/devices/src/storage/RAMDisk/RAMDiskController.cpp15
-rw-r--r--kernel/devices/src/storage/StorageManagement.cpp12
8 files changed, 57 insertions, 9 deletions
diff --git a/kernel/devices/include/devices/BlockDevice.hpp b/kernel/devices/include/devices/BlockDevice.hpp
index 69d7f81..9e9ef08 100644
--- a/kernel/devices/include/devices/BlockDevice.hpp
+++ b/kernel/devices/include/devices/BlockDevice.hpp
@@ -1,11 +1,13 @@
#ifndef TEACH_OS_KERNEL_DEVICES_BLOCK_DEVICE_HPP
#define TEACH_OS_KERNEL_DEVICES_BLOCK_DEVICE_HPP
+#include "devices/Device.hpp"
+
#include <cstddef>
namespace devices
{
- struct block_device
+ struct block_device : device
{
virtual ~block_device() = default;
diff --git a/kernel/devices/include/devices/Device.hpp b/kernel/devices/include/devices/Device.hpp
index a3cac42..815049f 100644
--- a/kernel/devices/include/devices/Device.hpp
+++ b/kernel/devices/include/devices/Device.hpp
@@ -1,10 +1,19 @@
#ifndef TEACH_OS_KERNEL_DEVICES_DEVICE_HPP
#define TEACH_OS_KERNEL_DEVICES_DEVICE_HPP
+#include <cstddef>
namespace devices
{
struct device
{
+ virtual ~device() = default;
+
+ auto major() const -> size_t;
+ auto minor() const -> size_t;
+
+ private:
+ size_t m_major = 0; // TODO BA-FS26 initialize correctly
+ size_t m_minor = 0; // TODO BA-FS26 initialize correctly
};
} // namespace devices
diff --git a/kernel/devices/include/devices/storage/RAMDisk/RAMDiskController.hpp b/kernel/devices/include/devices/storage/RAMDisk/RAMDiskController.hpp
index bb61bbc..7d656b1 100644
--- a/kernel/devices/include/devices/storage/RAMDisk/RAMDiskController.hpp
+++ b/kernel/devices/include/devices/storage/RAMDisk/RAMDiskController.hpp
@@ -4,6 +4,7 @@
#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 "devices/storage/StorageController.hpp"
@@ -19,6 +20,7 @@ namespace devices::storage::ram_disk
auto probe() -> void override;
auto devices_count() -> size_t override;
+ auto device_by_major_minor(size_t major, size_t minor) -> block_device * override;
private:
auto create_device_from_boot_module(kapi::boot_modules::boot_module const & module) -> void;
diff --git a/kernel/devices/include/devices/storage/StorageController.hpp b/kernel/devices/include/devices/storage/StorageController.hpp
index 68c6907..a51683d 100644
--- a/kernel/devices/include/devices/storage/StorageController.hpp
+++ b/kernel/devices/include/devices/storage/StorageController.hpp
@@ -1,7 +1,10 @@
#ifndef TEACH_OS_KERNEL_DEVICES_STORAGE_STORAGE_CONTROLLER_HPP
#define TEACH_OS_KERNEL_DEVICES_STORAGE_STORAGE_CONTROLLER_HPP
+#include "devices/BlockDevice.hpp"
+
#include <cstddef>
+
namespace devices::storage
{
struct storage_controller
@@ -11,9 +14,7 @@ namespace devices::storage
virtual auto probe() -> void = 0;
virtual auto devices_count() -> size_t = 0;
-
- // TODO BA-FS26
- // virtual auto get_device(size_t index) -> std::optional<block_device> = 0;
+ virtual auto device_by_major_minor(size_t major, size_t minor) -> block_device * = 0;
};
} // namespace devices::storage
diff --git a/kernel/devices/include/devices/storage/StorageManagement.hpp b/kernel/devices/include/devices/storage/StorageManagement.hpp
index c237245..632ff19 100644
--- a/kernel/devices/include/devices/storage/StorageManagement.hpp
+++ b/kernel/devices/include/devices/storage/StorageManagement.hpp
@@ -5,6 +5,7 @@
#include "devices/storage/StorageController.hpp"
#include <array>
+#include <cstddef>
namespace devices::storage
{
@@ -16,13 +17,12 @@ namespace devices::storage
auto static get() -> storage_management &;
auto add_controller(storage_controller * controller) -> void;
- auto add_device(block_device * device) -> void;
+ auto device_by_major_minor(size_t major, size_t minor) -> block_device *;
private:
storage_management() = default;
std::array<storage_controller *, 1> m_controllers{}; // TODO BA-FS26 use kstd::vector when available
- std::array<block_device *, 1> m_devices{}; // TODO BA-FS26 use kstd::vector when available
};
} // namespace devices::storage
diff --git a/kernel/devices/src/Device.cpp b/kernel/devices/src/Device.cpp
index d755fb9..48ba29b 100644
--- a/kernel/devices/src/Device.cpp
+++ b/kernel/devices/src/Device.cpp
@@ -1,6 +1,17 @@
#include "devices/Device.hpp"
+#include <cstddef>
+
namespace devices
{
- // TODO BA-FS26 implement device functionality
+
+ auto device::major() const -> size_t
+ {
+ return m_major;
+ }
+
+ auto device::minor() const -> size_t
+ {
+ return m_minor;
+ }
} // namespace devices \ No newline at end of file
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