From 5603c7ec2b07dbc772fe2c20a9e9e176c5465c57 Mon Sep 17 00:00:00 2001 From: "marcel.braun" Date: Mon, 30 Mar 2026 21:22:22 +0200 Subject: Move everything in kernel into kernel namespace --- kernel/src/devices/block_device.cpp | 4 ++-- kernel/src/devices/block_device_utils.cpp | 4 ++-- kernel/src/devices/device.cpp | 4 ++-- .../storage/ram_disk/ram_disk_controller.cpp | 4 ++-- .../devices/storage/ram_disk/ram_disk_device.cpp | 4 ++-- kernel/src/devices/storage/storage_controller.cpp | 4 ++-- kernel/src/devices/storage/storage_management.cpp | 4 ++-- kernel/src/filesystem/dentry.cpp | 4 ++-- kernel/src/filesystem/devfs/devfs_filesystem.cpp | 4 ++-- kernel/src/filesystem/devfs/devfs_root_inode.cpp | 4 ++-- kernel/src/filesystem/device_inode.cpp | 4 ++-- kernel/src/filesystem/ext2/ext2_filesystem.cpp | 4 ++-- kernel/src/filesystem/ext2/ext2_inode.cpp | 4 ++-- kernel/src/filesystem/file_descriptor_table.cpp | 4 ++-- kernel/src/filesystem/filesystem.cpp | 4 ++-- kernel/src/filesystem/inode.cpp | 4 ++-- kernel/src/filesystem/mount.cpp | 4 ++-- kernel/src/filesystem/mount_table.cpp | 4 ++-- kernel/src/filesystem/open_file_description.cpp | 4 ++-- kernel/src/filesystem/rootfs/rootfs_filesystem.cpp | 4 ++-- kernel/src/filesystem/rootfs/rootfs_inode.cpp | 4 ++-- kernel/src/filesystem/vfs.cpp | 4 ++-- kernel/src/main.cpp | 28 +++++++++++----------- 23 files changed, 58 insertions(+), 58 deletions(-) (limited to 'kernel/src') diff --git a/kernel/src/devices/block_device.cpp b/kernel/src/devices/block_device.cpp index 3402814..cfe2eb2 100644 --- a/kernel/src/devices/block_device.cpp +++ b/kernel/src/devices/block_device.cpp @@ -8,7 +8,7 @@ #include -namespace devices +namespace kernel::devices { block_device::block_device(size_t major, size_t minor, kstd::string const & name, size_t block_size) : device(major, minor, name) @@ -40,4 +40,4 @@ namespace devices { return size(); } -} // namespace devices \ No newline at end of file +} // namespace kernel::devices \ No newline at end of file diff --git a/kernel/src/devices/block_device_utils.cpp b/kernel/src/devices/block_device_utils.cpp index 9d3af1b..5469087 100644 --- a/kernel/src/devices/block_device_utils.cpp +++ b/kernel/src/devices/block_device_utils.cpp @@ -12,7 +12,7 @@ #include #include -namespace devices::block_device_utils +namespace kernel::devices::block_device_utils { using block_op = void (*)(size_t idx, size_t off, size_t len, size_t done, devices::block_device * device, @@ -100,4 +100,4 @@ namespace devices::block_device_utils }); } -} // namespace devices::block_device_utils \ No newline at end of file +} // namespace kernel::devices::block_device_utils \ No newline at end of file diff --git a/kernel/src/devices/device.cpp b/kernel/src/devices/device.cpp index 287f14b..1e7589e 100644 --- a/kernel/src/devices/device.cpp +++ b/kernel/src/devices/device.cpp @@ -4,7 +4,7 @@ #include -namespace devices +namespace kernel::devices { device::device(size_t major, size_t minor, kstd::string const & name) : m_major(major) @@ -26,4 +26,4 @@ namespace devices { return m_name; } -} // namespace devices \ No newline at end of file +} // namespace kernel::devices \ No newline at end of file diff --git a/kernel/src/devices/storage/ram_disk/ram_disk_controller.cpp b/kernel/src/devices/storage/ram_disk/ram_disk_controller.cpp index f3e9f70..26eb10b 100644 --- a/kernel/src/devices/storage/ram_disk/ram_disk_controller.cpp +++ b/kernel/src/devices/storage/ram_disk/ram_disk_controller.cpp @@ -9,7 +9,7 @@ #include #include -namespace devices::storage::ram_disk +namespace kernel::devices::storage::ram_disk { ram_disk_controller::ram_disk_controller(kapi::boot_modules::boot_module_registry const * registry) : m_boot_module_registry(registry) @@ -24,4 +24,4 @@ namespace devices::storage::ram_disk m_devices.push_back(kstd::make_shared(module, m_major, minor)); }); } -} // namespace devices::storage::ram_disk \ No newline at end of file +} // namespace kernel::devices::storage::ram_disk \ No newline at end of file diff --git a/kernel/src/devices/storage/ram_disk/ram_disk_device.cpp b/kernel/src/devices/storage/ram_disk/ram_disk_device.cpp index bf329cb..72e8025 100644 --- a/kernel/src/devices/storage/ram_disk/ram_disk_device.cpp +++ b/kernel/src/devices/storage/ram_disk/ram_disk_device.cpp @@ -10,7 +10,7 @@ #include -namespace devices::storage::ram_disk +namespace kernel::devices::storage::ram_disk { namespace { @@ -63,4 +63,4 @@ namespace devices::storage::ram_disk { return m_boot_module.size; } -} // namespace devices::storage::ram_disk \ No newline at end of file +} // namespace kernel::devices::storage::ram_disk \ No newline at end of file diff --git a/kernel/src/devices/storage/storage_controller.cpp b/kernel/src/devices/storage/storage_controller.cpp index e415436..3d13b66 100644 --- a/kernel/src/devices/storage/storage_controller.cpp +++ b/kernel/src/devices/storage/storage_controller.cpp @@ -8,7 +8,7 @@ #include #include -namespace devices::storage +namespace kernel::devices::storage { auto storage_controller::set_ids(size_t major, size_t minors_per_dev) -> void { @@ -41,4 +41,4 @@ namespace devices::storage { return m_devices; } -} // namespace devices::storage \ No newline at end of file +} // namespace kernel::devices::storage \ No newline at end of file diff --git a/kernel/src/devices/storage/storage_management.cpp b/kernel/src/devices/storage/storage_management.cpp index 56216b0..2bc57c4 100644 --- a/kernel/src/devices/storage/storage_management.cpp +++ b/kernel/src/devices/storage/storage_management.cpp @@ -14,7 +14,7 @@ #include #include -namespace devices::storage +namespace kernel::devices::storage { namespace { @@ -82,4 +82,4 @@ namespace devices::storage return device_by_major_minor(START_MAJOR, 0); } -} // namespace devices::storage \ No newline at end of file +} // namespace kernel::devices::storage \ No newline at end of file diff --git a/kernel/src/filesystem/dentry.cpp b/kernel/src/filesystem/dentry.cpp index 76949f2..2f99e91 100644 --- a/kernel/src/filesystem/dentry.cpp +++ b/kernel/src/filesystem/dentry.cpp @@ -10,7 +10,7 @@ #include #include -namespace filesystem +namespace kernel::filesystem { dentry::dentry(kstd::shared_ptr const & parent, kstd::shared_ptr const & node, std::string_view name) : m_name(name) @@ -58,4 +58,4 @@ namespace filesystem { return (m_flags & static_cast(flag)) != 0; } -} // namespace filesystem \ No newline at end of file +} // namespace kernel::filesystem \ No newline at end of file diff --git a/kernel/src/filesystem/devfs/devfs_filesystem.cpp b/kernel/src/filesystem/devfs/devfs_filesystem.cpp index c4cd81a..df977b8 100644 --- a/kernel/src/filesystem/devfs/devfs_filesystem.cpp +++ b/kernel/src/filesystem/devfs/devfs_filesystem.cpp @@ -11,7 +11,7 @@ #include #include -namespace filesystem::devfs +namespace kernel::filesystem::devfs { auto devfs_filesystem::mount(kstd::shared_ptr const &) -> int { @@ -55,4 +55,4 @@ namespace filesystem::devfs [&](auto const & device) { m_inodes.push_back(kstd::make_shared(device)); }); }); } -} // namespace filesystem::devfs \ No newline at end of file +} // namespace kernel::filesystem::devfs \ No newline at end of file diff --git a/kernel/src/filesystem/devfs/devfs_root_inode.cpp b/kernel/src/filesystem/devfs/devfs_root_inode.cpp index 53441b0..a7308dc 100644 --- a/kernel/src/filesystem/devfs/devfs_root_inode.cpp +++ b/kernel/src/filesystem/devfs/devfs_root_inode.cpp @@ -4,7 +4,7 @@ #include -namespace filesystem::devfs +namespace kernel::filesystem::devfs { devfs_root_inode::devfs_root_inode() : inode(inode_kind::directory) @@ -19,4 +19,4 @@ namespace filesystem::devfs { return 0; } -} // namespace filesystem::devfs \ No newline at end of file +} // namespace kernel::filesystem::devfs \ No newline at end of file diff --git a/kernel/src/filesystem/device_inode.cpp b/kernel/src/filesystem/device_inode.cpp index da062fc..d574d8f 100644 --- a/kernel/src/filesystem/device_inode.cpp +++ b/kernel/src/filesystem/device_inode.cpp @@ -12,7 +12,7 @@ #include -namespace filesystem +namespace kernel::filesystem { device_inode::device_inode(kstd::shared_ptr const & device) : inode(inode_kind::device) @@ -53,4 +53,4 @@ namespace filesystem return m_device; } -} // namespace filesystem \ No newline at end of file +} // namespace kernel::filesystem \ No newline at end of file diff --git a/kernel/src/filesystem/ext2/ext2_filesystem.cpp b/kernel/src/filesystem/ext2/ext2_filesystem.cpp index ea6fe0d..036b80e 100644 --- a/kernel/src/filesystem/ext2/ext2_filesystem.cpp +++ b/kernel/src/filesystem/ext2/ext2_filesystem.cpp @@ -13,7 +13,7 @@ #include #include -namespace filesystem::ext2 +namespace kernel::filesystem::ext2 { namespace { @@ -69,4 +69,4 @@ namespace filesystem::ext2 return kstd::make_shared(); } -} // namespace filesystem::ext2 +} // namespace kernel::filesystem::ext2 diff --git a/kernel/src/filesystem/ext2/ext2_inode.cpp b/kernel/src/filesystem/ext2/ext2_inode.cpp index 3cc0fb2..142502e 100644 --- a/kernel/src/filesystem/ext2/ext2_inode.cpp +++ b/kernel/src/filesystem/ext2/ext2_inode.cpp @@ -4,7 +4,7 @@ #include -namespace filesystem::ext2 +namespace kernel::filesystem::ext2 { ext2_inode::ext2_inode() : inode(inode_kind::regular) @@ -21,4 +21,4 @@ namespace filesystem::ext2 // TODO BA-FS26 implement return 0; } -} // namespace filesystem::ext2 \ No newline at end of file +} // namespace kernel::filesystem::ext2 \ No newline at end of file diff --git a/kernel/src/filesystem/file_descriptor_table.cpp b/kernel/src/filesystem/file_descriptor_table.cpp index 6eb3845..287aea2 100644 --- a/kernel/src/filesystem/file_descriptor_table.cpp +++ b/kernel/src/filesystem/file_descriptor_table.cpp @@ -10,7 +10,7 @@ #include #include -namespace filesystem +namespace kernel::filesystem { namespace { @@ -87,4 +87,4 @@ namespace filesystem m_open_files.at(index) = nullptr; } -} // namespace filesystem \ No newline at end of file +} // namespace kernel::filesystem \ No newline at end of file diff --git a/kernel/src/filesystem/filesystem.cpp b/kernel/src/filesystem/filesystem.cpp index 0e33d95..c891d00 100644 --- a/kernel/src/filesystem/filesystem.cpp +++ b/kernel/src/filesystem/filesystem.cpp @@ -5,7 +5,7 @@ #include -namespace filesystem +namespace kernel::filesystem { auto filesystem::mount(kstd::shared_ptr const & device) -> int { @@ -21,4 +21,4 @@ namespace filesystem { return m_root_inode; } -} // namespace filesystem \ No newline at end of file +} // namespace kernel::filesystem \ No newline at end of file diff --git a/kernel/src/filesystem/inode.cpp b/kernel/src/filesystem/inode.cpp index de3282f..1cbead8 100644 --- a/kernel/src/filesystem/inode.cpp +++ b/kernel/src/filesystem/inode.cpp @@ -1,6 +1,6 @@ #include "kernel/filesystem/inode.hpp" -namespace filesystem +namespace kernel::filesystem { inode::inode(inode_kind kind) : m_kind(kind) @@ -20,4 +20,4 @@ namespace filesystem { return m_kind == inode_kind::device; } -} // namespace filesystem \ No newline at end of file +} // namespace kernel::filesystem \ No newline at end of file diff --git a/kernel/src/filesystem/mount.cpp b/kernel/src/filesystem/mount.cpp index afc07fa..f9e709c 100644 --- a/kernel/src/filesystem/mount.cpp +++ b/kernel/src/filesystem/mount.cpp @@ -10,7 +10,7 @@ #include -namespace filesystem +namespace kernel::filesystem { mount::mount(kstd::shared_ptr const & mount_dentry, kstd::shared_ptr const & root_dentry, kstd::shared_ptr const & fs, std::string_view mount_path) @@ -44,4 +44,4 @@ namespace filesystem { return m_mount_path.view(); } -} // namespace filesystem \ No newline at end of file +} // namespace kernel::filesystem \ No newline at end of file diff --git a/kernel/src/filesystem/mount_table.cpp b/kernel/src/filesystem/mount_table.cpp index b9e57d4..737434e 100644 --- a/kernel/src/filesystem/mount_table.cpp +++ b/kernel/src/filesystem/mount_table.cpp @@ -7,7 +7,7 @@ #include #include -namespace filesystem +namespace kernel::filesystem { void mount_table::add_mount(kstd::shared_ptr mount) { @@ -35,4 +35,4 @@ namespace filesystem return mount_with_longest_prefix; } -} // namespace filesystem \ No newline at end of file +} // namespace kernel::filesystem \ No newline at end of file diff --git a/kernel/src/filesystem/open_file_description.cpp b/kernel/src/filesystem/open_file_description.cpp index 93c38ac..8c04225 100644 --- a/kernel/src/filesystem/open_file_description.cpp +++ b/kernel/src/filesystem/open_file_description.cpp @@ -7,7 +7,7 @@ #include -namespace filesystem +namespace kernel::filesystem { open_file_description::open_file_description(kstd::shared_ptr const & inode) : m_inode(inode) @@ -32,4 +32,4 @@ namespace filesystem m_offset += written_bytes; return written_bytes; } -} // namespace filesystem \ No newline at end of file +} // namespace kernel::filesystem \ No newline at end of file diff --git a/kernel/src/filesystem/rootfs/rootfs_filesystem.cpp b/kernel/src/filesystem/rootfs/rootfs_filesystem.cpp index 22502aa..804e211 100644 --- a/kernel/src/filesystem/rootfs/rootfs_filesystem.cpp +++ b/kernel/src/filesystem/rootfs/rootfs_filesystem.cpp @@ -8,7 +8,7 @@ #include -namespace filesystem::rootfs +namespace kernel::filesystem::rootfs { auto rootfs_filesystem::mount(kstd::shared_ptr const &) -> int { @@ -26,4 +26,4 @@ namespace filesystem::rootfs return rfs_inode->lookup_child(name); return nullptr; } -} // namespace filesystem::rootfs +} // namespace kernel::filesystem::rootfs diff --git a/kernel/src/filesystem/rootfs/rootfs_inode.cpp b/kernel/src/filesystem/rootfs/rootfs_inode.cpp index 9bbfbce..f44f06c 100644 --- a/kernel/src/filesystem/rootfs/rootfs_inode.cpp +++ b/kernel/src/filesystem/rootfs/rootfs_inode.cpp @@ -10,7 +10,7 @@ #include #include -namespace filesystem::rootfs +namespace kernel::filesystem::rootfs { rootfs_inode::rootfs_inode() : inode(inode_kind::directory) @@ -36,4 +36,4 @@ namespace filesystem::rootfs auto it = std::ranges::find_if(m_children, [&](auto const & pair) { return pair.first == name; }); return (it != m_children.end()) ? it->second : nullptr; } -} // namespace filesystem::rootfs +} // namespace kernel::filesystem::rootfs diff --git a/kernel/src/filesystem/vfs.cpp b/kernel/src/filesystem/vfs.cpp index 7a90531..2dbdb12 100644 --- a/kernel/src/filesystem/vfs.cpp +++ b/kernel/src/filesystem/vfs.cpp @@ -17,7 +17,7 @@ #include #include -namespace filesystem +namespace kernel::filesystem { namespace { @@ -161,4 +161,4 @@ namespace filesystem return current_dentry; } -} // namespace filesystem \ No newline at end of file +} // namespace kernel::filesystem \ No newline at end of file diff --git a/kernel/src/main.cpp b/kernel/src/main.cpp index bb6d57d..2dd9fd9 100644 --- a/kernel/src/main.cpp +++ b/kernel/src/main.cpp @@ -24,7 +24,7 @@ auto test_device_names() -> void { - auto storage_mgmt = devices::storage::storage_management::get(); + auto storage_mgmt = kernel::devices::storage::storage_management::get(); std::ranges::for_each(storage_mgmt.all_controllers(), [](auto const & controller) { std::ranges::for_each(controller->all_devices(), [](auto const & device) { kstd::println("{}", device->name().view()); }); @@ -34,13 +34,13 @@ auto test_device_names() -> void auto test_file_description_manually() -> void { // setup - auto fd_table = filesystem::file_descriptor_table::get(); - auto storage_mgmt = devices::storage::storage_management::get(); + auto fd_table = kernel::filesystem::file_descriptor_table::get(); + auto storage_mgmt = kernel::devices::storage::storage_management::get(); auto device = storage_mgmt.device_by_major_minor(1, 0); - auto dev_node = kstd::make_shared(device); + auto dev_node = kstd::make_shared(device); - auto ofd = kstd::make_shared(dev_node); + auto ofd = kstd::make_shared(dev_node); auto fd_index = fd_table.add_file(ofd); // use: read two bytes and write two again @@ -66,7 +66,7 @@ auto test_file_description_manually() -> void fd_table.remove_file(fd_index); // use: read four bytes again -> two old bytes two new bytes - auto ofd1 = kstd::make_shared(dev_node); + auto ofd1 = kstd::make_shared(dev_node); fd_index = fd_table.add_file(ofd1); auto fd1 = fd_table.get_file(fd_index); @@ -85,14 +85,14 @@ auto test_device_with_vfs() -> void { // TODO BA-FS26 - auto vfs = filesystem::vfs::get(); + auto vfs = kernel::filesystem::vfs::get(); auto ofd = vfs.open("/dev/ram0"); if (!ofd) { kstd::os::panic("test code failed"); } - auto fd_table = filesystem::file_descriptor_table::get(); + auto fd_table = kernel::filesystem::file_descriptor_table::get(); auto fd = fd_table.add_file(ofd); kstd::vector buffer{2}; auto file = fd_table.get_file(fd); @@ -110,8 +110,8 @@ auto test_file_lookup() -> void { // TODO BA-FS26 implement a more complete test with multiple files and directories and mounts etc. - auto vfs = filesystem::vfs::get(); - auto storage_mgmt = devices::storage::storage_management::get(); + auto vfs = kernel::filesystem::vfs::get(); + auto storage_mgmt = kernel::devices::storage::storage_management::get(); auto ofd1 = vfs.open("/a/b/c"); auto ofd2 = vfs.open("/dev/ram0"); @@ -126,7 +126,7 @@ auto test_file_lookup() -> void kstd::os::panic("test code failed"); } - auto new_filesystem = kstd::make_shared(); + auto new_filesystem = kstd::make_shared(); auto device = storage_mgmt.device_by_major_minor(1, 16); new_filesystem->mount(device); if (vfs.do_mount("/a/b", new_filesystem) != 0) @@ -182,13 +182,13 @@ auto main() -> int kapi::boot_modules::init(); kstd::println("[OS] Boot module registry initialized."); - devices::storage::storage_management::init(); + kernel::devices::storage::storage_management::init(); kstd::println("[OS] Storage management initialized."); - filesystem::file_descriptor_table::init(); + kernel::filesystem::file_descriptor_table::init(); kstd::println("[OS] Global file descriptor table initialized."); - filesystem::vfs::init(); + kernel::filesystem::vfs::init(); kstd::println("[OS] Virtual filesystem initialized."); run_test_code(); -- cgit v1.2.3 From 55e37a219fc953d1675bc2edb8573c6d47df7647 Mon Sep 17 00:00:00 2001 From: "marcel.braun" Date: Mon, 30 Mar 2026 21:23:02 +0200 Subject: Rename ext2 filesystem files --- kernel/src/filesystem/ext2/ext2_filesystem.cpp | 72 -------------------------- kernel/src/filesystem/ext2/ext2_inode.cpp | 24 --------- kernel/src/filesystem/ext2/filesystem.cpp | 72 ++++++++++++++++++++++++++ kernel/src/filesystem/ext2/inode.cpp | 24 +++++++++ kernel/src/filesystem/vfs.cpp | 4 +- kernel/src/main.cpp | 4 +- 6 files changed, 100 insertions(+), 100 deletions(-) delete mode 100644 kernel/src/filesystem/ext2/ext2_filesystem.cpp delete mode 100644 kernel/src/filesystem/ext2/ext2_inode.cpp create mode 100644 kernel/src/filesystem/ext2/filesystem.cpp create mode 100644 kernel/src/filesystem/ext2/inode.cpp (limited to 'kernel/src') diff --git a/kernel/src/filesystem/ext2/ext2_filesystem.cpp b/kernel/src/filesystem/ext2/ext2_filesystem.cpp deleted file mode 100644 index 036b80e..0000000 --- a/kernel/src/filesystem/ext2/ext2_filesystem.cpp +++ /dev/null @@ -1,72 +0,0 @@ -#include "kernel/filesystem/ext2/ext2_filesystem.hpp" - -#include "kernel/devices/block_device_utils.hpp" -#include "kernel/devices/device.hpp" -#include "kernel/filesystem/ext2/ext2_inode.hpp" -#include "kernel/filesystem/ext2/ext2_superblock.hpp" -#include "kernel/filesystem/filesystem.hpp" -#include "kernel/filesystem/inode.hpp" - -#include - -#include -#include -#include - -namespace kernel::filesystem::ext2 -{ - namespace - { - // constexpr size_t SUPERBLOCK_OFFSET = 1024; - // constexpr uint16_t EXT2_MAGIC = 0xEF53; - - // // Mode bits - // constexpr uint16_t S_IFMT = 0xF000; - // constexpr uint16_t S_IFREG = 0x8000; - // constexpr uint16_t S_IFDIR = 0x4000; - - // auto S_ISREG(uint16_t mode) -> bool - // { - // return (mode & S_IFMT) == S_IFREG; - // } - // auto S_ISDIR(uint16_t mode) -> bool - // { - // return (mode & S_IFMT) == S_IFDIR; - // } - - // auto get_block_size(ext2_superblock const & superblock) -> size_t - // { - // return 1024U << superblock.log_block_size; - // } - - // auto get_inode_size(ext2_superblock const & superblock) -> size_t - // { - // return superblock.rev_level == 0 ? 128 : superblock.inode_size; - // } - } // namespace - - auto ext2_filesystem::mount(kstd::shared_ptr const & device) -> int - { - filesystem::mount(device); // TODO BA-FS26 error handling? - // TODO BA-FS26 load proper root inode from ext2 metadata - // m_root_inode = inode{inode_kind::directory}; - - // TODO BA-FS26 implement - m_root_inode = kstd::make_shared(); - // devices::block_device_utils::read(device, nullptr, 0, 0); // TODO BA-FS26 just for testing - return 0; - } - - auto ext2_filesystem::lookup(kstd::shared_ptr const & /*parent*/, std::string_view name) - -> kstd::shared_ptr - { - // TODO BA-FS26 implement ext2 directory traversal and inode loading - if (name == "dev") - { - // TODO BA-FS26 just for testing - return nullptr; - } - - return kstd::make_shared(); - } -} // namespace kernel::filesystem::ext2 diff --git a/kernel/src/filesystem/ext2/ext2_inode.cpp b/kernel/src/filesystem/ext2/ext2_inode.cpp deleted file mode 100644 index 142502e..0000000 --- a/kernel/src/filesystem/ext2/ext2_inode.cpp +++ /dev/null @@ -1,24 +0,0 @@ -#include "kernel/filesystem/ext2/ext2_inode.hpp" - -#include "kernel/filesystem/inode.hpp" - -#include - -namespace kernel::filesystem::ext2 -{ - ext2_inode::ext2_inode() - : inode(inode_kind::regular) - {} - - auto ext2_inode::read(void * /*buffer*/, size_t /*offset*/, size_t /*size*/) const -> size_t - { - // TODO BA-FS26 implement - return 0; - } - - auto ext2_inode::write(void const * /*buffer*/, size_t /*offset*/, size_t /*size*/) -> size_t - { - // TODO BA-FS26 implement - return 0; - } -} // namespace kernel::filesystem::ext2 \ No newline at end of file diff --git a/kernel/src/filesystem/ext2/filesystem.cpp b/kernel/src/filesystem/ext2/filesystem.cpp new file mode 100644 index 0000000..d951158 --- /dev/null +++ b/kernel/src/filesystem/ext2/filesystem.cpp @@ -0,0 +1,72 @@ +#include "kernel/filesystem/ext2/filesystem.hpp" + +#include "kernel/devices/block_device_utils.hpp" +#include "kernel/devices/device.hpp" +#include "kernel/filesystem/ext2/inode.hpp" +#include "kernel/filesystem/ext2/superblock.hpp" +#include "kernel/filesystem/filesystem.hpp" +#include "kernel/filesystem/inode.hpp" + +#include + +#include +#include +#include + +namespace kernel::filesystem::ext2 +{ + namespace + { + // constexpr size_t SUPERBLOCK_OFFSET = 1024; + // constexpr uint16_t EXT2_MAGIC = 0xEF53; + + // // Mode bits + // constexpr uint16_t S_IFMT = 0xF000; + // constexpr uint16_t S_IFREG = 0x8000; + // constexpr uint16_t S_IFDIR = 0x4000; + + // auto S_ISREG(uint16_t mode) -> bool + // { + // return (mode & S_IFMT) == S_IFREG; + // } + // auto S_ISDIR(uint16_t mode) -> bool + // { + // return (mode & S_IFMT) == S_IFDIR; + // } + + // auto get_block_size(superblock const & superblock) -> size_t + // { + // return 1024U << superblock.log_block_size; + // } + + // auto get_inode_size(superblock const & superblock) -> size_t + // { + // return superblock.rev_level == 0 ? 128 : superblock.inode_size; + // } + } // namespace + + auto filesystem::mount(kstd::shared_ptr const & device) -> int + { + kernel::filesystem::filesystem::mount(device); // TODO BA-FS26 error handling? + // TODO BA-FS26 load proper root inode from ext2 metadata + // m_root_inode = inode{inode_kind::directory}; + + // TODO BA-FS26 implement + m_root_inode = kstd::make_shared(); + // devices::block_device_utils::read(device, nullptr, 0, 0); // TODO BA-FS26 just for testing + return 0; + } + + auto filesystem::lookup(kstd::shared_ptr const & /*parent*/, std::string_view name) + -> kstd::shared_ptr + { + // TODO BA-FS26 implement ext2 directory traversal and inode loading + if (name == "dev") + { + // TODO BA-FS26 just for testing + return nullptr; + } + + return kstd::make_shared(); + } +} // namespace kernel::filesystem::ext2 diff --git a/kernel/src/filesystem/ext2/inode.cpp b/kernel/src/filesystem/ext2/inode.cpp new file mode 100644 index 0000000..b75969a --- /dev/null +++ b/kernel/src/filesystem/ext2/inode.cpp @@ -0,0 +1,24 @@ +#include "kernel/filesystem/ext2/inode.hpp" + +#include "kernel/filesystem/inode.hpp" + +#include + +namespace kernel::filesystem::ext2 +{ + inode::inode() + : kernel::filesystem::inode(inode_kind::regular) + {} + + auto inode::read(void * /*buffer*/, size_t /*offset*/, size_t /*size*/) const -> size_t + { + // TODO BA-FS26 implement + return 0; + } + + auto inode::write(void const * /*buffer*/, size_t /*offset*/, size_t /*size*/) -> size_t + { + // TODO BA-FS26 implement + return 0; + } +} // namespace kernel::filesystem::ext2 \ No newline at end of file diff --git a/kernel/src/filesystem/vfs.cpp b/kernel/src/filesystem/vfs.cpp index 2dbdb12..69740c3 100644 --- a/kernel/src/filesystem/vfs.cpp +++ b/kernel/src/filesystem/vfs.cpp @@ -5,7 +5,7 @@ #include "kernel/devices/storage/storage_management.hpp" #include "kernel/filesystem/dentry.hpp" #include "kernel/filesystem/devfs/devfs_filesystem.hpp" -#include "kernel/filesystem/ext2/ext2_filesystem.hpp" +#include "kernel/filesystem/ext2/filesystem.hpp" #include "kernel/filesystem/filesystem.hpp" #include "kernel/filesystem/mount.hpp" #include "kernel/filesystem/open_file_description.hpp" @@ -47,7 +47,7 @@ namespace kernel::filesystem if (auto boot_device = storage_mgmt.determine_boot_device()) { // TODO BA-FS26 detect fs type from boot device and load corresponding fs, for now just assume ext2 - auto boot_root_fs = kstd::make_shared(); + auto boot_root_fs = kstd::make_shared(); boot_root_fs->mount(boot_device); do_mount_internal("/", root_fs_root_dentry, boot_root_fs); } diff --git a/kernel/src/main.cpp b/kernel/src/main.cpp index 2dd9fd9..ff73985 100644 --- a/kernel/src/main.cpp +++ b/kernel/src/main.cpp @@ -7,7 +7,7 @@ #include "kernel/devices/storage/storage_management.hpp" #include "kernel/filesystem/device_inode.hpp" -#include "kernel/filesystem/ext2/ext2_filesystem.hpp" +#include "kernel/filesystem/ext2/filesystem.hpp" #include "kernel/filesystem/file_descriptor_table.hpp" #include "kernel/filesystem/open_file_description.hpp" #include "kernel/filesystem/vfs.hpp" @@ -126,7 +126,7 @@ auto test_file_lookup() -> void kstd::os::panic("test code failed"); } - auto new_filesystem = kstd::make_shared(); + auto new_filesystem = kstd::make_shared(); auto device = storage_mgmt.device_by_major_minor(1, 16); new_filesystem->mount(device); if (vfs.do_mount("/a/b", new_filesystem) != 0) -- cgit v1.2.3 From 0b5084780e4a89dcaccbda5823495c9cdd62b006 Mon Sep 17 00:00:00 2001 From: "marcel.braun" Date: Mon, 30 Mar 2026 20:52:25 +0200 Subject: Rename devfs filesystem files --- kernel/src/filesystem/devfs/devfs_filesystem.cpp | 58 ------------------------ kernel/src/filesystem/devfs/devfs_root_inode.cpp | 22 --------- kernel/src/filesystem/devfs/filesystem.cpp | 58 ++++++++++++++++++++++++ kernel/src/filesystem/devfs/inode.cpp | 22 +++++++++ kernel/src/filesystem/vfs.cpp | 4 +- 5 files changed, 82 insertions(+), 82 deletions(-) delete mode 100644 kernel/src/filesystem/devfs/devfs_filesystem.cpp delete mode 100644 kernel/src/filesystem/devfs/devfs_root_inode.cpp create mode 100644 kernel/src/filesystem/devfs/filesystem.cpp create mode 100644 kernel/src/filesystem/devfs/inode.cpp (limited to 'kernel/src') diff --git a/kernel/src/filesystem/devfs/devfs_filesystem.cpp b/kernel/src/filesystem/devfs/devfs_filesystem.cpp deleted file mode 100644 index df977b8..0000000 --- a/kernel/src/filesystem/devfs/devfs_filesystem.cpp +++ /dev/null @@ -1,58 +0,0 @@ -#include "kernel/filesystem/devfs/devfs_filesystem.hpp" - -#include "kernel/devices/device.hpp" -#include "kernel/devices/storage/storage_management.hpp" -#include "kernel/filesystem/devfs/devfs_root_inode.hpp" -#include "kernel/filesystem/device_inode.hpp" -#include "kernel/filesystem/inode.hpp" - -#include - -#include -#include - -namespace kernel::filesystem::devfs -{ - auto devfs_filesystem::mount(kstd::shared_ptr const &) -> int - { - m_root_inode = kstd::make_shared(); - build_device_inode_table(); - - return 0; - } - - auto devfs_filesystem::lookup(kstd::shared_ptr const & parent, std::string_view name) - -> kstd::shared_ptr - { - if (!parent || !parent->is_directory()) - { - return nullptr; - } - - if (parent.get() != m_root_inode.get()) - { - return nullptr; - } - - auto it = std::ranges::find_if(m_inodes, [&](auto const & dev_node) { - auto device_inode_ptr = static_cast(dev_node.get()); - if (!device_inode_ptr) - { - return false; - } - return device_inode_ptr->device()->name() == name; - }); - return (it != m_inodes.end()) ? *it : nullptr; - } - - auto devfs_filesystem::build_device_inode_table() -> void - { - m_inodes.clear(); - - auto storage_mgmt = devices::storage::storage_management::get(); - std::ranges::for_each(storage_mgmt.all_controllers(), [&](auto const & controller) { - std::ranges::for_each(controller->all_devices(), - [&](auto const & device) { m_inodes.push_back(kstd::make_shared(device)); }); - }); - } -} // namespace kernel::filesystem::devfs \ No newline at end of file diff --git a/kernel/src/filesystem/devfs/devfs_root_inode.cpp b/kernel/src/filesystem/devfs/devfs_root_inode.cpp deleted file mode 100644 index a7308dc..0000000 --- a/kernel/src/filesystem/devfs/devfs_root_inode.cpp +++ /dev/null @@ -1,22 +0,0 @@ -#include "kernel/filesystem/devfs/devfs_root_inode.hpp" - -#include "kernel/filesystem/inode.hpp" - -#include - -namespace kernel::filesystem::devfs -{ - devfs_root_inode::devfs_root_inode() - : inode(inode_kind::directory) - {} - - auto devfs_root_inode::read(void * /*buffer*/, size_t /*offset*/, size_t /*size*/) const -> size_t - { - return 0; - } - - auto devfs_root_inode::write(void const * /*buffer*/, size_t /*offset*/, size_t /*size*/) -> size_t - { - return 0; - } -} // namespace kernel::filesystem::devfs \ No newline at end of file diff --git a/kernel/src/filesystem/devfs/filesystem.cpp b/kernel/src/filesystem/devfs/filesystem.cpp new file mode 100644 index 0000000..e7d0e13 --- /dev/null +++ b/kernel/src/filesystem/devfs/filesystem.cpp @@ -0,0 +1,58 @@ +#include "kernel/filesystem/devfs/filesystem.hpp" + +#include "kernel/devices/device.hpp" +#include "kernel/devices/storage/storage_management.hpp" +#include "kernel/filesystem/devfs/inode.hpp" +#include "kernel/filesystem/device_inode.hpp" +#include "kernel/filesystem/inode.hpp" + +#include + +#include +#include + +namespace kernel::filesystem::devfs +{ + auto filesystem::mount(kstd::shared_ptr const &) -> int + { + m_root_inode = kstd::make_shared(); + build_device_inode_table(); + + return 0; + } + + auto filesystem::lookup(kstd::shared_ptr const & parent, std::string_view name) + -> kstd::shared_ptr + { + if (!parent || !parent->is_directory()) + { + return nullptr; + } + + if (parent.get() != m_root_inode.get()) + { + return nullptr; + } + + auto it = std::ranges::find_if(m_inodes, [&](auto const & dev_node) { + auto device_inode_ptr = static_cast(dev_node.get()); + if (!device_inode_ptr) + { + return false; + } + return device_inode_ptr->device()->name() == name; + }); + return (it != m_inodes.end()) ? *it : nullptr; + } + + auto filesystem::build_device_inode_table() -> void + { + m_inodes.clear(); + + auto storage_mgmt = devices::storage::storage_management::get(); + std::ranges::for_each(storage_mgmt.all_controllers(), [&](auto const & controller) { + std::ranges::for_each(controller->all_devices(), + [&](auto const & device) { m_inodes.push_back(kstd::make_shared(device)); }); + }); + } +} // namespace kernel::filesystem::devfs \ No newline at end of file diff --git a/kernel/src/filesystem/devfs/inode.cpp b/kernel/src/filesystem/devfs/inode.cpp new file mode 100644 index 0000000..52cf6fa --- /dev/null +++ b/kernel/src/filesystem/devfs/inode.cpp @@ -0,0 +1,22 @@ +#include "kernel/filesystem/devfs/inode.hpp" + +#include "kernel/filesystem/inode.hpp" + +#include + +namespace kernel::filesystem::devfs +{ + inode::inode() + : kernel::filesystem::inode(inode_kind::directory) + {} + + auto inode::read(void * /*buffer*/, size_t /*offset*/, size_t /*size*/) const -> size_t + { + return 0; + } + + auto inode::write(void const * /*buffer*/, size_t /*offset*/, size_t /*size*/) -> size_t + { + return 0; + } +} // namespace kernel::filesystem::devfs \ No newline at end of file diff --git a/kernel/src/filesystem/vfs.cpp b/kernel/src/filesystem/vfs.cpp index 69740c3..fdad36c 100644 --- a/kernel/src/filesystem/vfs.cpp +++ b/kernel/src/filesystem/vfs.cpp @@ -4,7 +4,7 @@ #include "kernel/devices/storage/storage_management.hpp" #include "kernel/filesystem/dentry.hpp" -#include "kernel/filesystem/devfs/devfs_filesystem.hpp" +#include "kernel/filesystem/devfs/filesystem.hpp" #include "kernel/filesystem/ext2/filesystem.hpp" #include "kernel/filesystem/filesystem.hpp" #include "kernel/filesystem/mount.hpp" @@ -52,7 +52,7 @@ namespace kernel::filesystem do_mount_internal("/", root_fs_root_dentry, boot_root_fs); } - auto device_fs = kstd::make_shared(); + auto device_fs = kstd::make_shared(); device_fs->mount(nullptr); do_mount_internal("/dev", root_fs_root_dentry, device_fs); } -- cgit v1.2.3 From 81ab0ba35d724dd465ed870e87047b3bf74cea13 Mon Sep 17 00:00:00 2001 From: "marcel.braun" Date: Mon, 30 Mar 2026 21:01:18 +0200 Subject: Rename rootfs filesystem files --- kernel/src/filesystem/rootfs/filesystem.cpp | 29 ++++++++++++++++ kernel/src/filesystem/rootfs/inode.cpp | 39 ++++++++++++++++++++++ kernel/src/filesystem/rootfs/rootfs_filesystem.cpp | 29 ---------------- kernel/src/filesystem/rootfs/rootfs_inode.cpp | 39 ---------------------- kernel/src/filesystem/vfs.cpp | 4 +-- 5 files changed, 70 insertions(+), 70 deletions(-) create mode 100644 kernel/src/filesystem/rootfs/filesystem.cpp create mode 100644 kernel/src/filesystem/rootfs/inode.cpp delete mode 100644 kernel/src/filesystem/rootfs/rootfs_filesystem.cpp delete mode 100644 kernel/src/filesystem/rootfs/rootfs_inode.cpp (limited to 'kernel/src') diff --git a/kernel/src/filesystem/rootfs/filesystem.cpp b/kernel/src/filesystem/rootfs/filesystem.cpp new file mode 100644 index 0000000..0133612 --- /dev/null +++ b/kernel/src/filesystem/rootfs/filesystem.cpp @@ -0,0 +1,29 @@ +#include "kernel/filesystem/rootfs/filesystem.hpp" + +#include "kernel/devices/device.hpp" +#include "kernel/filesystem/inode.hpp" +#include "kernel/filesystem/rootfs/inode.hpp" + +#include + +#include + +namespace kernel::filesystem::rootfs +{ + auto filesystem::mount(kstd::shared_ptr const &) -> int + { + auto rfs_inode = kstd::make_shared(); + rfs_inode->add_child("dev"); + m_root_inode = rfs_inode; + + return 0; + } + + auto filesystem::lookup(kstd::shared_ptr const & parent, std::string_view name) + -> kstd::shared_ptr + { + if (auto * rfs_inode = static_cast(parent.get())) + return rfs_inode->lookup_child(name); + return nullptr; + } +} // namespace kernel::filesystem::rootfs diff --git a/kernel/src/filesystem/rootfs/inode.cpp b/kernel/src/filesystem/rootfs/inode.cpp new file mode 100644 index 0000000..3ca9c02 --- /dev/null +++ b/kernel/src/filesystem/rootfs/inode.cpp @@ -0,0 +1,39 @@ +#include "kernel/filesystem/inode.hpp" + +#include "kernel/filesystem/rootfs/inode.hpp" + +#include +#include + +#include +#include +#include +#include + +namespace kernel::filesystem::rootfs +{ + inode::inode() + : kernel::filesystem::inode(inode_kind::directory) + {} + + auto inode::read(void * /*buffer*/, size_t /*offset*/, size_t /*size*/) const -> size_t + { + return 0; + } + + auto inode::write(void const * /*buffer*/, size_t /*offset*/, size_t /*size*/) -> size_t + { + return 0; + } + + auto inode::add_child(std::string_view name) -> void + { + m_children.push_back(std::make_pair(kstd::string{name}, kstd::make_shared())); + } + + auto inode::lookup_child(std::string_view name) -> kstd::shared_ptr + { + auto it = std::ranges::find_if(m_children, [&](auto const & pair) { return pair.first == name; }); + return (it != m_children.end()) ? it->second : nullptr; + } +} // namespace kernel::filesystem::rootfs diff --git a/kernel/src/filesystem/rootfs/rootfs_filesystem.cpp b/kernel/src/filesystem/rootfs/rootfs_filesystem.cpp deleted file mode 100644 index 804e211..0000000 --- a/kernel/src/filesystem/rootfs/rootfs_filesystem.cpp +++ /dev/null @@ -1,29 +0,0 @@ -#include "kernel/filesystem/rootfs/rootfs_filesystem.hpp" - -#include "kernel/devices/device.hpp" -#include "kernel/filesystem/inode.hpp" -#include "kernel/filesystem/rootfs/rootfs_inode.hpp" - -#include - -#include - -namespace kernel::filesystem::rootfs -{ - auto rootfs_filesystem::mount(kstd::shared_ptr const &) -> int - { - auto rfs_inode = kstd::make_shared(); - rfs_inode->add_child("dev"); - m_root_inode = rfs_inode; - - return 0; - } - - auto rootfs_filesystem::lookup(kstd::shared_ptr const & parent, std::string_view name) - -> kstd::shared_ptr - { - if (auto * rfs_inode = static_cast(parent.get())) - return rfs_inode->lookup_child(name); - return nullptr; - } -} // namespace kernel::filesystem::rootfs diff --git a/kernel/src/filesystem/rootfs/rootfs_inode.cpp b/kernel/src/filesystem/rootfs/rootfs_inode.cpp deleted file mode 100644 index f44f06c..0000000 --- a/kernel/src/filesystem/rootfs/rootfs_inode.cpp +++ /dev/null @@ -1,39 +0,0 @@ -#include "kernel/filesystem/rootfs/rootfs_inode.hpp" - -#include "kernel/filesystem/inode.hpp" - -#include -#include - -#include -#include -#include -#include - -namespace kernel::filesystem::rootfs -{ - rootfs_inode::rootfs_inode() - : inode(inode_kind::directory) - {} - - auto rootfs_inode::read(void * /*buffer*/, size_t /*offset*/, size_t /*size*/) const -> size_t - { - return 0; - } - - auto rootfs_inode::write(void const * /*buffer*/, size_t /*offset*/, size_t /*size*/) -> size_t - { - return 0; - } - - auto rootfs_inode::add_child(std::string_view name) -> void - { - m_children.push_back(std::make_pair(kstd::string{name}, kstd::make_shared())); - } - - auto rootfs_inode::lookup_child(std::string_view name) -> kstd::shared_ptr - { - auto it = std::ranges::find_if(m_children, [&](auto const & pair) { return pair.first == name; }); - return (it != m_children.end()) ? it->second : nullptr; - } -} // namespace kernel::filesystem::rootfs diff --git a/kernel/src/filesystem/vfs.cpp b/kernel/src/filesystem/vfs.cpp index fdad36c..bee68e6 100644 --- a/kernel/src/filesystem/vfs.cpp +++ b/kernel/src/filesystem/vfs.cpp @@ -9,7 +9,7 @@ #include "kernel/filesystem/filesystem.hpp" #include "kernel/filesystem/mount.hpp" #include "kernel/filesystem/open_file_description.hpp" -#include "kernel/filesystem/rootfs/rootfs_filesystem.hpp" +#include "kernel/filesystem/rootfs/filesystem.hpp" #include @@ -37,7 +37,7 @@ namespace kernel::filesystem auto vfs::init_internal() -> void { - auto root_fs = kstd::make_shared(); + auto root_fs = kstd::make_shared(); root_fs->mount(nullptr); auto root_fs_root_dentry = kstd::make_shared(nullptr, root_fs->root_inode()); -- cgit v1.2.3 From 846135ba5cdfa545124b97c74182f5eada9a403a Mon Sep 17 00:00:00 2001 From: "marcel.braun" Date: Mon, 30 Mar 2026 21:20:25 +0200 Subject: Rename ram_disk and storage files --- kernel/src/devices/storage/controller.cpp | 44 +++++++++++ kernel/src/devices/storage/management.cpp | 85 ++++++++++++++++++++++ kernel/src/devices/storage/ram_disk/controller.cpp | 27 +++++++ kernel/src/devices/storage/ram_disk/device.cpp | 65 +++++++++++++++++ .../storage/ram_disk/ram_disk_controller.cpp | 27 ------- .../devices/storage/ram_disk/ram_disk_device.cpp | 66 ----------------- kernel/src/devices/storage/storage_controller.cpp | 44 ----------- kernel/src/devices/storage/storage_management.cpp | 85 ---------------------- kernel/src/filesystem/devfs/filesystem.cpp | 4 +- kernel/src/filesystem/vfs.cpp | 4 +- kernel/src/main.cpp | 10 +-- 11 files changed, 230 insertions(+), 231 deletions(-) create mode 100644 kernel/src/devices/storage/controller.cpp create mode 100644 kernel/src/devices/storage/management.cpp create mode 100644 kernel/src/devices/storage/ram_disk/controller.cpp create mode 100644 kernel/src/devices/storage/ram_disk/device.cpp delete mode 100644 kernel/src/devices/storage/ram_disk/ram_disk_controller.cpp delete mode 100644 kernel/src/devices/storage/ram_disk/ram_disk_device.cpp delete mode 100644 kernel/src/devices/storage/storage_controller.cpp delete mode 100644 kernel/src/devices/storage/storage_management.cpp (limited to 'kernel/src') diff --git a/kernel/src/devices/storage/controller.cpp b/kernel/src/devices/storage/controller.cpp new file mode 100644 index 0000000..46c45e4 --- /dev/null +++ b/kernel/src/devices/storage/controller.cpp @@ -0,0 +1,44 @@ +#include "kernel/devices/storage/controller.hpp" + +#include "kernel/devices/device.hpp" + +#include +#include + +#include +#include + +namespace kernel::devices::storage +{ + auto controller::set_ids(size_t major, size_t minors_per_dev) -> void + { + m_major = major; + m_minors_per_device = minors_per_dev; + } + + auto controller::major() const -> size_t + { + return m_major; + } + + auto controller::device_by_minor(size_t minor) const -> kstd::shared_ptr + { + auto it = std::ranges::find_if(m_devices, [minor](auto const & device) { return device->minor() == minor; }); + + if (it != m_devices.end()) + { + return *it; + } + return nullptr; + } + + auto controller::devices_count() const -> size_t + { + return m_devices.size(); + } + + auto controller::all_devices() const -> kstd::vector> const & + { + return m_devices; + } +} // namespace kernel::devices::storage \ No newline at end of file diff --git a/kernel/src/devices/storage/management.cpp b/kernel/src/devices/storage/management.cpp new file mode 100644 index 0000000..62c0ce4 --- /dev/null +++ b/kernel/src/devices/storage/management.cpp @@ -0,0 +1,85 @@ +#include "kernel/devices/storage/management.hpp" + +#include "kapi/boot_modules.hpp" +#include "kapi/system.hpp" + +#include "kernel/devices/device.hpp" +#include "kernel/devices/storage/controller.hpp" +#include "kernel/devices/storage/ram_disk/controller.hpp" + +#include +#include + +#include +#include +#include + +namespace kernel::devices::storage +{ + namespace + { + constexpr size_t static MINORS_PER_DEVICE = 16; + constexpr size_t static START_MAJOR = 1; + constinit size_t static next_free_major = START_MAJOR; + + constinit auto static active_storage_management = std::optional{}; + } // namespace + + auto management::init() -> void + { + if (active_storage_management) + { + kapi::system::panic("[DEVICES] Storage management has already been initialized."); + } + active_storage_management.emplace(management{}); + + auto current_ram_disk_controller = + kstd::make_shared(&kapi::boot_modules::get_boot_module_registry()); + active_storage_management->add_controller(current_ram_disk_controller); + + std::ranges::for_each(active_storage_management->m_controllers, [](auto controller) { controller->probe(); }); + } + + auto management::get() -> management & + { + if (!active_storage_management) + { + kapi::system::panic("[DEVICES] Storage management has not been initialized."); + } + + return *active_storage_management; + } + + auto management::add_controller(kstd::shared_ptr const & controller) -> void + { + controller->set_ids(next_free_major++, MINORS_PER_DEVICE); + m_controllers.push_back(controller); + } + + auto management::all_controllers() const -> kstd::vector> const & + { + return m_controllers; + } + + auto management::device_by_major_minor(size_t major, size_t minor) -> kstd::shared_ptr + { + kstd::shared_ptr found = nullptr; + + std::ranges::find_if(m_controllers, [&](auto const & controller) { + if (controller != nullptr && controller->major() == major) + { + found = controller->device_by_minor(minor); + return found != nullptr; + } + return false; + }); + + return found; + } + + auto management::determine_boot_device() -> kstd::shared_ptr + { + return device_by_major_minor(START_MAJOR, 0); + } + +} // namespace kernel::devices::storage \ No newline at end of file diff --git a/kernel/src/devices/storage/ram_disk/controller.cpp b/kernel/src/devices/storage/ram_disk/controller.cpp new file mode 100644 index 0000000..040e61f --- /dev/null +++ b/kernel/src/devices/storage/ram_disk/controller.cpp @@ -0,0 +1,27 @@ +#include "kernel/devices/storage/ram_disk/controller.hpp" + +#include "kapi/boot_module/boot_module_registry.hpp" + +#include "kernel/devices/storage/ram_disk/device.hpp" + +#include + +#include +#include + +namespace kernel::devices::storage::ram_disk +{ + controller::controller(kapi::boot_modules::boot_module_registry const * registry) + : m_boot_module_registry(registry) + {} + + auto controller::probe() -> void + { + size_t current_device_index = 0; + + std::ranges::for_each(*m_boot_module_registry, [this, ¤t_device_index](auto const & module) { + auto const minor = current_device_index++ * m_minors_per_device; + m_devices.push_back(kstd::make_shared(module, m_major, minor)); + }); + } +} // namespace kernel::devices::storage::ram_disk \ No newline at end of file diff --git a/kernel/src/devices/storage/ram_disk/device.cpp b/kernel/src/devices/storage/ram_disk/device.cpp new file mode 100644 index 0000000..5116c93 --- /dev/null +++ b/kernel/src/devices/storage/ram_disk/device.cpp @@ -0,0 +1,65 @@ +#include "kapi/boot_module/boot_module.hpp" +#include "kapi/system.hpp" + +#include "kernel/devices/block_device.hpp" +#include "kernel/devices/storage/ram_disk/device.hpp" + +#include +#include + +#include + +namespace kernel::devices::storage::ram_disk +{ + namespace + { + constexpr size_t RAM_DISK_BLOCK_SIZE = 512uz; + } // namespace + + device::device(kapi::boot_modules::boot_module const & module, size_t major, size_t minor) + : block_device(major, minor, "ram" + kstd::to_string(minor), RAM_DISK_BLOCK_SIZE) + , m_boot_module(module) + {} + + auto device::read_block(size_t block_index, void * buffer) const -> void + { + if (buffer == nullptr) + { + kapi::system::panic("[RAM DISK DEVICE] read_block called with null buffer."); + } + + auto const info = calculate_transfer(block_index); + + if (info.to_transfer > 0) + { + auto const src = static_cast(m_boot_module.start_address) + info.offset; + kstd::libc::memcpy(buffer, src, info.to_transfer); + } + + if (info.remainder > 0) + { + kstd::libc::memset(static_cast(buffer) + info.to_transfer, 0, info.remainder); + } + } + + auto device::write_block(size_t block_index, void const * buffer) -> void + { + if (buffer == nullptr) + { + kapi::system::panic("[RAM DISK DEVICE] write_block called with null buffer."); + } + + auto const info = calculate_transfer(block_index); + + if (info.to_transfer > 0) + { + auto const dest = static_cast(m_boot_module.start_address) + info.offset; + kstd::libc::memcpy(dest, buffer, info.to_transfer); + } + } + + auto device::size() const -> size_t + { + return m_boot_module.size; + } +} // namespace kernel::devices::storage::ram_disk \ No newline at end of file diff --git a/kernel/src/devices/storage/ram_disk/ram_disk_controller.cpp b/kernel/src/devices/storage/ram_disk/ram_disk_controller.cpp deleted file mode 100644 index 26eb10b..0000000 --- a/kernel/src/devices/storage/ram_disk/ram_disk_controller.cpp +++ /dev/null @@ -1,27 +0,0 @@ -#include "kernel/devices/storage/ram_disk/ram_disk_controller.hpp" - -#include "kapi/boot_module/boot_module_registry.hpp" - -#include "kernel/devices/storage/ram_disk/ram_disk_device.hpp" - -#include - -#include -#include - -namespace kernel::devices::storage::ram_disk -{ - 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 - { - size_t current_device_index = 0; - - std::ranges::for_each(*m_boot_module_registry, [this, ¤t_device_index](auto const & module) { - auto const minor = current_device_index++ * m_minors_per_device; - m_devices.push_back(kstd::make_shared(module, m_major, minor)); - }); - } -} // namespace kernel::devices::storage::ram_disk \ No newline at end of file diff --git a/kernel/src/devices/storage/ram_disk/ram_disk_device.cpp b/kernel/src/devices/storage/ram_disk/ram_disk_device.cpp deleted file mode 100644 index 72e8025..0000000 --- a/kernel/src/devices/storage/ram_disk/ram_disk_device.cpp +++ /dev/null @@ -1,66 +0,0 @@ -#include "kernel/devices/storage/ram_disk/ram_disk_device.hpp" - -#include "kapi/boot_module/boot_module.hpp" -#include "kapi/system.hpp" - -#include "kernel/devices/block_device.hpp" - -#include -#include - -#include - -namespace kernel::devices::storage::ram_disk -{ - namespace - { - constexpr size_t RAM_DISK_BLOCK_SIZE = 512uz; - } // namespace - - ram_disk_device::ram_disk_device(kapi::boot_modules::boot_module const & module, size_t major, size_t minor) - : block_device(major, minor, "ram" + kstd::to_string(minor), RAM_DISK_BLOCK_SIZE) - , m_boot_module(module) - {} - - auto ram_disk_device::read_block(size_t block_index, void * buffer) const -> void - { - if (buffer == nullptr) - { - kapi::system::panic("[RAM DISK DEVICE] read_block called with null buffer."); - } - - auto const info = calculate_transfer(block_index); - - if (info.to_transfer > 0) - { - auto const src = static_cast(m_boot_module.start_address) + info.offset; - kstd::libc::memcpy(buffer, src, info.to_transfer); - } - - if (info.remainder > 0) - { - kstd::libc::memset(static_cast(buffer) + info.to_transfer, 0, info.remainder); - } - } - - auto ram_disk_device::write_block(size_t block_index, void const * buffer) -> void - { - if (buffer == nullptr) - { - kapi::system::panic("[RAM DISK DEVICE] write_block called with null buffer."); - } - - auto const info = calculate_transfer(block_index); - - if (info.to_transfer > 0) - { - auto const dest = static_cast(m_boot_module.start_address) + info.offset; - kstd::libc::memcpy(dest, buffer, info.to_transfer); - } - } - - auto ram_disk_device::size() const -> size_t - { - return m_boot_module.size; - } -} // namespace kernel::devices::storage::ram_disk \ No newline at end of file diff --git a/kernel/src/devices/storage/storage_controller.cpp b/kernel/src/devices/storage/storage_controller.cpp deleted file mode 100644 index 3d13b66..0000000 --- a/kernel/src/devices/storage/storage_controller.cpp +++ /dev/null @@ -1,44 +0,0 @@ -#include "kernel/devices/storage/storage_controller.hpp" - -#include "kernel/devices/device.hpp" - -#include -#include - -#include -#include - -namespace kernel::devices::storage -{ - auto storage_controller::set_ids(size_t major, size_t minors_per_dev) -> void - { - m_major = major; - m_minors_per_device = minors_per_dev; - } - - auto storage_controller::major() const -> size_t - { - return m_major; - } - - auto storage_controller::device_by_minor(size_t minor) const -> kstd::shared_ptr - { - auto it = std::ranges::find_if(m_devices, [minor](auto const & device) { return device->minor() == minor; }); - - if (it != m_devices.end()) - { - return *it; - } - return nullptr; - } - - auto storage_controller::devices_count() const -> size_t - { - return m_devices.size(); - } - - auto storage_controller::all_devices() const -> kstd::vector> const & - { - return m_devices; - } -} // namespace kernel::devices::storage \ No newline at end of file diff --git a/kernel/src/devices/storage/storage_management.cpp b/kernel/src/devices/storage/storage_management.cpp deleted file mode 100644 index 2bc57c4..0000000 --- a/kernel/src/devices/storage/storage_management.cpp +++ /dev/null @@ -1,85 +0,0 @@ -#include "kernel/devices/storage/storage_management.hpp" - -#include "kapi/boot_modules.hpp" -#include "kapi/system.hpp" - -#include "kernel/devices/device.hpp" -#include "kernel/devices/storage/ram_disk/ram_disk_controller.hpp" -#include "kernel/devices/storage/storage_controller.hpp" - -#include -#include - -#include -#include -#include - -namespace kernel::devices::storage -{ - namespace - { - constexpr size_t static MINORS_PER_DEVICE = 16; - constexpr size_t static START_MAJOR = 1; - constinit size_t static next_free_major = START_MAJOR; - - constinit auto static active_storage_management = std::optional{}; - } // namespace - - auto storage_management::init() -> void - { - if (active_storage_management) - { - kapi::system::panic("[DEVICES] Storage management has already been initialized."); - } - active_storage_management.emplace(storage_management{}); - - auto current_ram_disk_controller = - kstd::make_shared(&kapi::boot_modules::get_boot_module_registry()); - active_storage_management->add_controller(current_ram_disk_controller); - - std::ranges::for_each(active_storage_management->m_controllers, [](auto controller) { controller->probe(); }); - } - - auto storage_management::get() -> storage_management & - { - if (!active_storage_management) - { - kapi::system::panic("[DEVICES] Storage management has not been initialized."); - } - - return *active_storage_management; - } - - auto storage_management::add_controller(kstd::shared_ptr const & controller) -> void - { - controller->set_ids(next_free_major++, MINORS_PER_DEVICE); - m_controllers.push_back(controller); - } - - auto storage_management::all_controllers() const -> kstd::vector> const & - { - return m_controllers; - } - - auto storage_management::device_by_major_minor(size_t major, size_t minor) -> kstd::shared_ptr - { - kstd::shared_ptr found = nullptr; - - std::ranges::find_if(m_controllers, [&](auto const & controller) { - if (controller != nullptr && controller->major() == major) - { - found = controller->device_by_minor(minor); - return found != nullptr; - } - return false; - }); - - return found; - } - - auto storage_management::determine_boot_device() -> kstd::shared_ptr - { - return device_by_major_minor(START_MAJOR, 0); - } - -} // namespace kernel::devices::storage \ No newline at end of file diff --git a/kernel/src/filesystem/devfs/filesystem.cpp b/kernel/src/filesystem/devfs/filesystem.cpp index e7d0e13..94c9b05 100644 --- a/kernel/src/filesystem/devfs/filesystem.cpp +++ b/kernel/src/filesystem/devfs/filesystem.cpp @@ -1,7 +1,7 @@ #include "kernel/filesystem/devfs/filesystem.hpp" #include "kernel/devices/device.hpp" -#include "kernel/devices/storage/storage_management.hpp" +#include "kernel/devices/storage/management.hpp" #include "kernel/filesystem/devfs/inode.hpp" #include "kernel/filesystem/device_inode.hpp" #include "kernel/filesystem/inode.hpp" @@ -49,7 +49,7 @@ namespace kernel::filesystem::devfs { m_inodes.clear(); - auto storage_mgmt = devices::storage::storage_management::get(); + auto storage_mgmt = devices::storage::management::get(); std::ranges::for_each(storage_mgmt.all_controllers(), [&](auto const & controller) { std::ranges::for_each(controller->all_devices(), [&](auto const & device) { m_inodes.push_back(kstd::make_shared(device)); }); diff --git a/kernel/src/filesystem/vfs.cpp b/kernel/src/filesystem/vfs.cpp index bee68e6..06214d2 100644 --- a/kernel/src/filesystem/vfs.cpp +++ b/kernel/src/filesystem/vfs.cpp @@ -2,7 +2,7 @@ #include "kapi/system.hpp" -#include "kernel/devices/storage/storage_management.hpp" +#include "kernel/devices/storage/management.hpp" #include "kernel/filesystem/dentry.hpp" #include "kernel/filesystem/devfs/filesystem.hpp" #include "kernel/filesystem/ext2/filesystem.hpp" @@ -43,7 +43,7 @@ namespace kernel::filesystem auto root_fs_root_dentry = kstd::make_shared(nullptr, root_fs->root_inode()); m_mount_table.add_mount(kstd::make_shared(nullptr, root_fs_root_dentry, root_fs, "")); - auto storage_mgmt = devices::storage::storage_management::get(); + auto storage_mgmt = devices::storage::management::get(); if (auto boot_device = storage_mgmt.determine_boot_device()) { // TODO BA-FS26 detect fs type from boot device and load corresponding fs, for now just assume ext2 diff --git a/kernel/src/main.cpp b/kernel/src/main.cpp index ff73985..37b4c5b 100644 --- a/kernel/src/main.cpp +++ b/kernel/src/main.cpp @@ -5,7 +5,7 @@ #include "kapi/memory.hpp" #include "kapi/system.hpp" -#include "kernel/devices/storage/storage_management.hpp" +#include "kernel/devices/storage/management.hpp" #include "kernel/filesystem/device_inode.hpp" #include "kernel/filesystem/ext2/filesystem.hpp" #include "kernel/filesystem/file_descriptor_table.hpp" @@ -24,7 +24,7 @@ auto test_device_names() -> void { - auto storage_mgmt = kernel::devices::storage::storage_management::get(); + auto storage_mgmt = kernel::devices::storage::management::get(); std::ranges::for_each(storage_mgmt.all_controllers(), [](auto const & controller) { std::ranges::for_each(controller->all_devices(), [](auto const & device) { kstd::println("{}", device->name().view()); }); @@ -35,7 +35,7 @@ auto test_file_description_manually() -> void { // setup auto fd_table = kernel::filesystem::file_descriptor_table::get(); - auto storage_mgmt = kernel::devices::storage::storage_management::get(); + auto storage_mgmt = kernel::devices::storage::management::get(); auto device = storage_mgmt.device_by_major_minor(1, 0); auto dev_node = kstd::make_shared(device); @@ -111,7 +111,7 @@ auto test_file_lookup() -> void // TODO BA-FS26 implement a more complete test with multiple files and directories and mounts etc. auto vfs = kernel::filesystem::vfs::get(); - auto storage_mgmt = kernel::devices::storage::storage_management::get(); + auto storage_mgmt = kernel::devices::storage::management::get(); auto ofd1 = vfs.open("/a/b/c"); auto ofd2 = vfs.open("/dev/ram0"); @@ -182,7 +182,7 @@ auto main() -> int kapi::boot_modules::init(); kstd::println("[OS] Boot module registry initialized."); - kernel::devices::storage::storage_management::init(); + kernel::devices::storage::management::init(); kstd::println("[OS] Storage management initialized."); kernel::filesystem::file_descriptor_table::init(); -- cgit v1.2.3