aboutsummaryrefslogtreecommitdiff
path: root/kernel/devices/include/devices/block_device.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/devices/include/devices/block_device.hpp')
-rw-r--r--kernel/devices/include/devices/block_device.hpp33
1 files changed, 33 insertions, 0 deletions
diff --git a/kernel/devices/include/devices/block_device.hpp b/kernel/devices/include/devices/block_device.hpp
new file mode 100644
index 00000000..d1e42491
--- /dev/null
+++ b/kernel/devices/include/devices/block_device.hpp
@@ -0,0 +1,33 @@
+#ifndef TEACH_OS_KERNEL_DEVICES_BLOCK_DEVICE_HPP
+#define TEACH_OS_KERNEL_DEVICES_BLOCK_DEVICE_HPP
+
+#include "devices/temp_device.hpp"
+
+#include <cstddef>
+
+namespace devices
+{
+ struct block_device : device
+ {
+ block_device(size_t major, size_t minor, size_t block_size);
+ virtual ~block_device() = default;
+
+ virtual auto read_block(size_t block_index, void * buffer) const -> void = 0;
+ virtual auto write_block(size_t block_index, void const * buffer) -> void = 0;
+
+ protected:
+ struct transfer_info
+ {
+ size_t offset;
+ size_t to_transfer;
+ size_t remainder;
+ };
+
+ virtual auto size() const -> size_t = 0;
+ auto calculate_transfer(size_t block_index) const -> transfer_info;
+
+ size_t m_block_size;
+ };
+} // namespace devices
+
+#endif \ No newline at end of file