diff options
| author | Lukas Oesch <lukasoesch20@gmail.com> | 2026-03-03 08:37:56 +0100 |
|---|---|---|
| committer | Lukas Oesch <lukasoesch20@gmail.com> | 2026-03-17 16:42:29 +0100 |
| commit | d2e9e3ee57918ddd4a1f81e70304dc15964555ff (patch) | |
| tree | 92dbe0b5f97865f9f6c22f115be86c84df3e33da /kernel/devices/include | |
| parent | 9eeaf95fcc6b2d6302d8447940678e1597d26f0a (diff) | |
| download | teachos-d2e9e3ee57918ddd4a1f81e70304dc15964555ff.tar.xz teachos-d2e9e3ee57918ddd4a1f81e70304dc15964555ff.zip | |
implement function to get a device by major and minor number
Diffstat (limited to 'kernel/devices/include')
5 files changed, 20 insertions, 6 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 |
