diff options
Diffstat (limited to 'kernel/devices')
| -rw-r--r-- | kernel/devices/include/devices/block_device.hpp | 22 | ||||
| -rw-r--r-- | kernel/devices/include/devices/device.hpp | 9 | ||||
| -rw-r--r-- | kernel/devices/src/block_device.cpp | 19 |
3 files changed, 49 insertions, 1 deletions
diff --git a/kernel/devices/include/devices/block_device.hpp b/kernel/devices/include/devices/block_device.hpp index 78a2606..9bca53f 100644 --- a/kernel/devices/include/devices/block_device.hpp +++ b/kernel/devices/include/devices/block_device.hpp @@ -46,6 +46,28 @@ namespace devices */ virtual auto write_block(size_t block_index, void const * buffer) -> void = 0; + /** + * @brief Return logical block size in bytes. + * @return One logical block size in bytes. + */ + auto block_size() const -> size_t; + + /** + * @brief Return device capacity in bytes. + * @return Total number of addressable bytes. + */ + auto capacity() const -> size_t; + + /** + * @brief Override to identify block devices. + * @return true if this device is a block device, false otherwise. + */ + + auto is_block_device() const -> bool override + { + return true; + } + protected: /** * @brief Information describing the transfer window for one block index. diff --git a/kernel/devices/include/devices/device.hpp b/kernel/devices/include/devices/device.hpp index cbf77c2..7f9f9e1 100644 --- a/kernel/devices/include/devices/device.hpp +++ b/kernel/devices/include/devices/device.hpp @@ -34,6 +34,15 @@ namespace devices */ auto minor() const -> size_t; + /** + * @brief Check if the device is a block device. + * @return true if this device is a block device, false otherwise. + */ + virtual auto is_block_device() const -> bool + { + return false; + } + private: size_t m_major; size_t m_minor; diff --git a/kernel/devices/src/block_device.cpp b/kernel/devices/src/block_device.cpp index dd63638..2f0c2ca 100644 --- a/kernel/devices/src/block_device.cpp +++ b/kernel/devices/src/block_device.cpp @@ -1,5 +1,7 @@ #include "devices/block_device.hpp" +#include "kapi/system.hpp" + #include "devices/device.hpp" #include <cstddef> @@ -9,7 +11,12 @@ namespace devices block_device::block_device(size_t major, size_t minor, size_t block_size) : device(major, minor) , 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 { @@ -21,4 +28,14 @@ namespace devices 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 devices
\ No newline at end of file |
