#include "kernel/devices/block_device.hpp" #include "kapi/devices/device.hpp" #include "kapi/system.hpp" #include #include namespace kernel::devices { block_device::block_device(size_t major, size_t minor, kstd::string const & name, size_t block_size) : kapi::devices::device(major, minor, name) , m_block_size(block_size) { if (m_block_size == 0) { kapi::system::panic("[DEVICES] block_device constructed with zero block size."); } } auto block_device::calculate_transfer(size_t block_index) const -> transfer_info { size_t const offset = block_index * m_block_size; size_t const limit = size(); size_t const available = (offset < limit) ? (limit - offset) : 0; size_t const to_transfer = (available < m_block_size) ? available : m_block_size; return {offset, to_transfer, m_block_size - to_transfer}; } auto block_device::block_size() const -> size_t { return m_block_size; } auto block_device::capacity() const -> size_t { return size(); } } // namespace kernel::devices