aboutsummaryrefslogtreecommitdiff
path: root/kernel/filesystem/include
diff options
context:
space:
mode:
authorLukas Oesch <lukasoesch20@gmail.com>2026-03-07 17:04:24 +0100
committerLukas Oesch <lukasoesch20@gmail.com>2026-03-17 16:42:50 +0100
commit9ae5a230b1cd1f842c1a7c64392a0bccdba01a2d (patch)
tree28cb234452bc694521ecd06557cbb79b9ee03b66 /kernel/filesystem/include
parent2f4001cdb1f528d8a0d255d81ac3a8b9aa522fac (diff)
downloadteachos-9ae5a230b1cd1f842c1a7c64392a0bccdba01a2d.tar.xz
teachos-9ae5a230b1cd1f842c1a7c64392a0bccdba01a2d.zip
implement read and write bytes from device
Diffstat (limited to 'kernel/filesystem/include')
-rw-r--r--kernel/filesystem/include/filesystem/device_file.hpp30
-rw-r--r--kernel/filesystem/include/filesystem/open_file_description.hpp2
2 files changed, 32 insertions, 0 deletions
diff --git a/kernel/filesystem/include/filesystem/device_file.hpp b/kernel/filesystem/include/filesystem/device_file.hpp
new file mode 100644
index 0000000..08d81f6
--- /dev/null
+++ b/kernel/filesystem/include/filesystem/device_file.hpp
@@ -0,0 +1,30 @@
+#ifndef TEACH_OS_KERNEL_FILESYSTEM_DEVICE_FILE_HPP
+#define TEACH_OS_KERNEL_FILESYSTEM_DEVICE_FILE_HPP
+
+#include "devices/block_device.hpp"
+#include "devices/device.hpp"
+#include "filesystem/file.hpp"
+
+#include <cstddef>
+
+namespace filesystem
+{
+ struct device_file : file
+ {
+ device_file(devices::device * device);
+
+ auto open() -> void override;
+
+ 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;
+
+ 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);
+ auto process_blocks(size_t offset, size_t size, void * buffer, block_op op) const -> size_t;
+
+ devices::device * m_device;
+ };
+} // namespace filesystem
+
+#endif
diff --git a/kernel/filesystem/include/filesystem/open_file_description.hpp b/kernel/filesystem/include/filesystem/open_file_description.hpp
index e4febbd..3241ea4 100644
--- a/kernel/filesystem/include/filesystem/open_file_description.hpp
+++ b/kernel/filesystem/include/filesystem/open_file_description.hpp
@@ -9,6 +9,8 @@ namespace filesystem
{
struct open_file_description
{
+ open_file_description(file * file);
+
~open_file_description() = default;
auto read(void * buffer, size_t size) -> size_t;