From 52a007ebee4e8ca284ec5767de01c311e9f1860e Mon Sep 17 00:00:00 2001 From: Lukas Oesch Date: Tue, 3 Mar 2026 10:15:20 +0100 Subject: implement major and minor analog to the linux kernel --- kernel/devices/include/devices/BlockDevice.hpp | 1 + kernel/devices/include/devices/Device.hpp | 6 ++++-- kernel/devices/include/devices/storage/RAMDisk/RAMDiskDevice.hpp | 4 ++-- kernel/devices/include/devices/storage/StorageController.hpp | 7 +++++++ 4 files changed, 14 insertions(+), 4 deletions(-) (limited to 'kernel/devices/include') diff --git a/kernel/devices/include/devices/BlockDevice.hpp b/kernel/devices/include/devices/BlockDevice.hpp index 9e9ef08..2f9d0aa 100644 --- a/kernel/devices/include/devices/BlockDevice.hpp +++ b/kernel/devices/include/devices/BlockDevice.hpp @@ -9,6 +9,7 @@ namespace devices { struct block_device : device { + block_device(size_t major, size_t minor); virtual ~block_device() = default; virtual auto read_block(size_t block_index, void * buffer) const -> void = 0; diff --git a/kernel/devices/include/devices/Device.hpp b/kernel/devices/include/devices/Device.hpp index 815049f..0f93bff 100644 --- a/kernel/devices/include/devices/Device.hpp +++ b/kernel/devices/include/devices/Device.hpp @@ -2,18 +2,20 @@ #define TEACH_OS_KERNEL_DEVICES_DEVICE_HPP #include + namespace devices { struct device { + device(size_t major, size_t minor); 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 + size_t m_major; + size_t m_minor; }; } // namespace devices diff --git a/kernel/devices/include/devices/storage/RAMDisk/RAMDiskDevice.hpp b/kernel/devices/include/devices/storage/RAMDisk/RAMDiskDevice.hpp index fdcef3f..de71663 100644 --- a/kernel/devices/include/devices/storage/RAMDisk/RAMDiskDevice.hpp +++ b/kernel/devices/include/devices/storage/RAMDisk/RAMDiskDevice.hpp @@ -13,8 +13,8 @@ namespace devices::storage::ram_disk { constexpr size_t static block_size = 512uz; // TODO BA-FS26 really correct / good?? - ram_disk_device() = default; - ram_disk_device(kapi::boot_modules::boot_module const & module); + ram_disk_device(); // TODO BA-FS26 remove when kstd::vector is available + ram_disk_device(kapi::boot_modules::boot_module const & module, size_t major, size_t minor); auto read_block(size_t block_index, void * buffer) const -> void override; diff --git a/kernel/devices/include/devices/storage/StorageController.hpp b/kernel/devices/include/devices/storage/StorageController.hpp index a51683d..50fdb34 100644 --- a/kernel/devices/include/devices/storage/StorageController.hpp +++ b/kernel/devices/include/devices/storage/StorageController.hpp @@ -13,8 +13,15 @@ namespace devices::storage virtual auto probe() -> void = 0; + auto set_ids(size_t major, size_t minors_per_dev) -> void; + auto major() const -> size_t; + virtual auto devices_count() -> size_t = 0; virtual auto device_by_major_minor(size_t major, size_t minor) -> block_device * = 0; + + protected: + size_t m_major{}; + size_t m_minors_per_device{}; }; } // namespace devices::storage -- cgit v1.2.3