diff options
Diffstat (limited to 'kernel/include')
4 files changed, 46 insertions, 13 deletions
diff --git a/kernel/include/kernel/filesystem/devfs/devfs_filesystem.hpp b/kernel/include/kernel/filesystem/devfs/devfs_filesystem.hpp new file mode 100644 index 0000000..5559c2a --- /dev/null +++ b/kernel/include/kernel/filesystem/devfs/devfs_filesystem.hpp @@ -0,0 +1,25 @@ +#ifndef TEACH_OS_KERNEL_FILESYSTEM_DEVFS_DEVFS_FILESYSTEM_HPP +#define TEACH_OS_KERNEL_FILESYSTEM_DEVFS_DEVFS_FILESYSTEM_HPP + +#include "kernel/devices/device.hpp" +#include "kernel/filesystem/filesystem.hpp" +#include "kernel/filesystem/inode.hpp" + +#include <kstd/memory> +#include <kstd/vector> + +#include <string_view> + +namespace filesystem::devfs +{ + struct devfs_filesystem : filesystem + { + auto mount(kstd::shared_ptr<devices::device> const & device) -> int override; + auto lookup(kstd::shared_ptr<inode> const & parent, std::string_view name) -> kstd::shared_ptr<inode> override; + + private: + auto build_device_inode_table() -> void; + }; +} // namespace filesystem::devfs + +#endif
\ No newline at end of file diff --git a/kernel/include/kernel/filesystem/devfs/devfs_root_inode.hpp b/kernel/include/kernel/filesystem/devfs/devfs_root_inode.hpp new file mode 100644 index 0000000..b1d37ab --- /dev/null +++ b/kernel/include/kernel/filesystem/devfs/devfs_root_inode.hpp @@ -0,0 +1,19 @@ +#ifndef TEACH_OS_KERNEL_FILESYSTEM_DEVFS_DEVFS_ROOT_INODE_HPP +#define TEACH_OS_KERNEL_FILESYSTEM_DEVFS_DEVFS_ROOT_INODE_HPP + +#include "kernel/filesystem/inode.hpp" + +#include <cstddef> + +namespace filesystem::devfs +{ + struct devfs_root_inode : inode + { + devfs_root_inode(); + + auto read(void * buffer, size_t offset, size_t size) const -> size_t override; + auto write(void const * buffer, size_t offset, size_t size) -> size_t override; + }; +} // namespace filesystem::devfs + +#endif
\ No newline at end of file diff --git a/kernel/include/kernel/filesystem/device_inode.hpp b/kernel/include/kernel/filesystem/device_inode.hpp index ce0f91c..1cf08d4 100644 --- a/kernel/include/kernel/filesystem/device_inode.hpp +++ b/kernel/include/kernel/filesystem/device_inode.hpp @@ -18,6 +18,8 @@ namespace filesystem auto read(void * buffer, size_t offset, size_t size) const -> size_t override; auto write(void const * buffer, size_t offset, size_t size) -> size_t override; + [[nodiscard]] auto device() const -> kstd::shared_ptr<devices::device> const &; + private: using block_op = void (*)(size_t idx, size_t off, size_t len, size_t done, devices::block_device * device, std::byte * scratch, void * buffer); diff --git a/kernel/include/kernel/filesystem/vfs.hpp b/kernel/include/kernel/filesystem/vfs.hpp index cf268a3..f301b7a 100644 --- a/kernel/include/kernel/filesystem/vfs.hpp +++ b/kernel/include/kernel/filesystem/vfs.hpp @@ -1,17 +1,13 @@ #ifndef TEACH_OS_KERNEL_FILESYSTEM_VFS_HPP #define TEACH_OS_KERNEL_FILESYSTEM_VFS_HPP -#include "kernel/devices/device.hpp" #include "kernel/filesystem/dentry.hpp" #include "kernel/filesystem/filesystem.hpp" -#include "kernel/filesystem/inode.hpp" #include "kernel/filesystem/mount_table.hpp" #include "kernel/filesystem/open_file_description.hpp" #include <kstd/memory> -#include <kstd/vector> -#include <optional> #include <string_view> namespace filesystem @@ -27,18 +23,9 @@ namespace filesystem auto do_mount(std::string_view path, kstd::shared_ptr<filesystem> const & filesystem) -> int; private: - // TODO BA-FS26 remove again and use devtempfs - struct device_node_entry - { - std::string_view name; - kstd::shared_ptr<inode> node; - }; - kstd::vector<std::optional<device_node_entry>> m_device_nodes; // TODO BA-FS26 remove again, use devtempfs - vfs() = default; auto init_internal() -> void; - auto make_device_node(kstd::shared_ptr<devices::device> const & device) -> void; [[nodiscard]] auto resolve_path(std::string_view path) -> kstd::shared_ptr<dentry>; mount_table m_mount_table; |
