aboutsummaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'kernel')
-rw-r--r--kernel/filesystem/CMakeLists.txt6
-rw-r--r--kernel/filesystem/include/filesystem/ext2/ext2_filesystem.hpp18
-rw-r--r--kernel/filesystem/include/filesystem/filesystem.hpp23
-rw-r--r--kernel/filesystem/include/filesystem/mount.hpp24
-rw-r--r--kernel/filesystem/src/ext2/ext2_filesystem.cpp16
-rw-r--r--kernel/filesystem/src/filesystem.cpp11
-rw-r--r--kernel/filesystem/src/mount.cpp30
7 files changed, 128 insertions, 0 deletions
diff --git a/kernel/filesystem/CMakeLists.txt b/kernel/filesystem/CMakeLists.txt
index a1c625e..a6b4e49 100644
--- a/kernel/filesystem/CMakeLists.txt
+++ b/kernel/filesystem/CMakeLists.txt
@@ -3,9 +3,12 @@ add_library("kernel::filesystem" ALIAS "kernel_filesystem")
target_sources("kernel_filesystem" PRIVATE
"src/device_file.cpp"
+ "src/ext2/ext2_filesystem.cpp"
"src/file_descriptor_table.cpp"
+ "src/filesystem.cpp"
"src/inode_file.cpp"
"src/inode.cpp"
+ "src/mount.cpp"
"src/open_file_description.cpp"
"src/vfs.cpp"
)
@@ -15,10 +18,13 @@ target_sources("kernel_filesystem" PUBLIC
BASE_DIRS "include"
FILES
"include/filesystem/device_file.hpp"
+ "include/filesystem/ext2/ext2_filesystem.hpp"
"include/filesystem/file_descriptor_table.hpp"
"include/filesystem/file.hpp"
+ "include/filesystem/filesystem.hpp"
"include/filesystem/inode_file.hpp"
"include/filesystem/inode.hpp"
+ "include/filesystem/mount.hpp"
"include/filesystem/open_file_description.hpp"
"include/filesystem/vfs.hpp"
)
diff --git a/kernel/filesystem/include/filesystem/ext2/ext2_filesystem.hpp b/kernel/filesystem/include/filesystem/ext2/ext2_filesystem.hpp
new file mode 100644
index 0000000..0027475
--- /dev/null
+++ b/kernel/filesystem/include/filesystem/ext2/ext2_filesystem.hpp
@@ -0,0 +1,18 @@
+#ifndef TEACH_OS_KERNEL_FILESYSTEM_EXT2_FILESYSTEM_HPP
+#define TEACH_OS_KERNEL_FILESYSTEM_EXT2_FILESYSTEM_HPP
+
+#include "devices/block_device.hpp"
+#include "filesystem/filesystem.hpp"
+
+namespace filesystem::ext2
+{
+ struct ext2_filesystem : filesystem
+ {
+ auto mount(devices::block_device * block_device) -> int override;
+
+ private:
+ devices::block_device * m_block_device{};
+ };
+} // namespace filesystem::ext2
+
+#endif
diff --git a/kernel/filesystem/include/filesystem/filesystem.hpp b/kernel/filesystem/include/filesystem/filesystem.hpp
new file mode 100644
index 0000000..d5704c1
--- /dev/null
+++ b/kernel/filesystem/include/filesystem/filesystem.hpp
@@ -0,0 +1,23 @@
+#ifndef TEACH_OS_KERNEL_FILESYSTEM_FILESYSTEM_HPP
+#define TEACH_OS_KERNEL_FILESYSTEM_FILESYSTEM_HPP
+
+#include "devices/block_device.hpp"
+#include "filesystem/inode.hpp"
+
+namespace filesystem
+{
+ struct filesystem
+ {
+ virtual ~filesystem() = default;
+
+ virtual auto mount(devices::block_device * block_device) -> int = 0;
+
+ auto root_inode() -> inode *;
+
+ protected:
+ inode * m_root_inode{}; // TODO BA-FS26 set during mount?
+ };
+
+} // namespace filesystem
+
+#endif \ No newline at end of file
diff --git a/kernel/filesystem/include/filesystem/mount.hpp b/kernel/filesystem/include/filesystem/mount.hpp
new file mode 100644
index 0000000..793c042
--- /dev/null
+++ b/kernel/filesystem/include/filesystem/mount.hpp
@@ -0,0 +1,24 @@
+#ifndef TEACH_OS_KERNEL_FILESYSTEM_MOUNT_HPP
+#define TEACH_OS_KERNEL_FILESYSTEM_MOUNT_HPP
+
+#include "filesystem/filesystem.hpp"
+
+#include <string_view>
+
+namespace filesystem
+{
+ struct mount
+ {
+ mount() = default; // TODO BA-FS26 remove again when kstd::vector is available and used in vfs
+ mount(std::string_view const & path, filesystem * fs);
+
+ auto path() const -> std::string_view;
+ auto get_filesystem() const -> filesystem *;
+
+ private:
+ std::string_view m_path;
+ filesystem * m_filesystem{};
+ };
+} // namespace filesystem
+
+#endif
diff --git a/kernel/filesystem/src/ext2/ext2_filesystem.cpp b/kernel/filesystem/src/ext2/ext2_filesystem.cpp
new file mode 100644
index 0000000..bdd430d
--- /dev/null
+++ b/kernel/filesystem/src/ext2/ext2_filesystem.cpp
@@ -0,0 +1,16 @@
+#include "filesystem/ext2/ext2_filesystem.hpp"
+
+#include "devices/block_device.hpp"
+
+namespace filesystem::ext2
+{
+ auto ext2_filesystem::mount(devices::block_device * block_device) -> int
+ {
+ if (!block_device)
+ {
+ return -1; // TODO BA-FS26 panic or errorcode?
+ }
+ // TODO BA-FS26 implement
+ return 0;
+ }
+} // namespace filesystem::ext2 \ No newline at end of file
diff --git a/kernel/filesystem/src/filesystem.cpp b/kernel/filesystem/src/filesystem.cpp
new file mode 100644
index 0000000..d6a2f25
--- /dev/null
+++ b/kernel/filesystem/src/filesystem.cpp
@@ -0,0 +1,11 @@
+#include "filesystem/filesystem.hpp"
+
+#include "filesystem/inode.hpp"
+
+namespace filesystem
+{
+ auto filesystem::root_inode() -> inode *
+ {
+ return m_root_inode;
+ }
+} // namespace filesystem \ No newline at end of file
diff --git a/kernel/filesystem/src/mount.cpp b/kernel/filesystem/src/mount.cpp
new file mode 100644
index 0000000..6594598
--- /dev/null
+++ b/kernel/filesystem/src/mount.cpp
@@ -0,0 +1,30 @@
+#include "filesystem/mount.hpp"
+
+#include "kapi/system.hpp"
+
+#include "filesystem/filesystem.hpp"
+
+#include <string_view>
+
+namespace filesystem
+{
+ mount::mount(std::string_view const & path, filesystem * fs)
+ : m_path(path)
+ , m_filesystem(fs)
+ {
+ if (!m_filesystem)
+ {
+ kapi::system::panic("[FILESYSTEM] mount initialized with null filesystem.");
+ }
+ }
+
+ auto mount::path() const -> std::string_view
+ {
+ return m_path;
+ }
+
+ auto mount::get_filesystem() const -> filesystem *
+ {
+ return m_filesystem;
+ }
+} // namespace filesystem \ No newline at end of file