diff options
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/kernel/drivers/storage/ram_disk.cpp | 21 |
1 files changed, 8 insertions, 13 deletions
diff --git a/kernel/kernel/drivers/storage/ram_disk.cpp b/kernel/kernel/drivers/storage/ram_disk.cpp index b1b0d2b3..778feeeb 100644 --- a/kernel/kernel/drivers/storage/ram_disk.cpp +++ b/kernel/kernel/drivers/storage/ram_disk.cpp @@ -6,6 +6,7 @@ #include <kapi/boot_modules.hpp> #include <kapi/devices.hpp> #include <kapi/filesystem.hpp> +#include <kapi/memory.hpp> #include <kstd/cstring.hpp> #include <kstd/format.hpp> @@ -29,8 +30,6 @@ namespace kernel::drivers::storage namespace { - constexpr auto default_block_size = 512_B; - struct descriptor final : kapi::devices::driver_descriptor { public: @@ -57,27 +56,23 @@ namespace kernel::drivers::storage [[nodiscard]] auto read_block(std::size_t block_index, std::span<std::byte> buffer) -> kstd::result<kstd::units::bytes> override { - auto info = devices::block_device_utils::calculate_transfer(*this, block_index); + auto const info = devices::block_device_utils::calculate_transfer(*this, block_index); + auto const transfer_size = std::min(info.to_transfer, kstd::units::bytes{buffer.size()}); - if (info.to_transfer > 0_B) + if (transfer_size > 0_B) { auto source = static_cast<std::byte const *>(m_module.start_address) + info.offset; - kstd::libc::memcpy(buffer.data(), source, info.to_transfer.value); + kstd::libc::memcpy(buffer.first(transfer_size.value).data(), source, transfer_size.value); } - if (info.remainder > 0_B) - { - kstd::libc::memset(buffer.data() + info.to_transfer, 0, info.remainder.value); - } - - return info.to_transfer; + return transfer_size; } auto write_block(std::size_t block_index, std::span<std::byte const> buffer) -> kstd::result<kstd::units::bytes> override { auto const info = devices::block_device_utils::calculate_transfer(*this, block_index); - auto transfer_size = std::min(info.to_transfer, kstd::units::bytes{buffer.size()}); + auto const transfer_size = std::min(info.to_transfer, kstd::units::bytes{buffer.size()}); if (transfer_size > 0_B) { @@ -90,7 +85,7 @@ namespace kernel::drivers::storage [[nodiscard]] auto block_size() const -> kstd::units::bytes override { - return default_block_size; + return kapi::memory::page_size; } [[nodiscard]] auto capacity() const -> kstd::units::bytes override |
