diff options
Diffstat (limited to 'kernel/devices/include/devices/block_device.hpp')
| -rw-r--r-- | kernel/devices/include/devices/block_device.hpp | 33 |
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 |
