aboutsummaryrefslogtreecommitdiff
path: root/kernel/include
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/include')
-rw-r--r--kernel/include/kernel/filesystem/devfs/devfs_filesystem.hpp25
-rw-r--r--kernel/include/kernel/filesystem/devfs/devfs_root_inode.hpp19
-rw-r--r--kernel/include/kernel/filesystem/device_inode.hpp2
-rw-r--r--kernel/include/kernel/filesystem/vfs.hpp13
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;