diff --git a/kernel/include/kernel/Storage/ATA/ATADevice.h b/kernel/include/kernel/Storage/ATA/ATADevice.h index 9446d40b..02c477db 100644 --- a/kernel/include/kernel/Storage/ATA/ATADevice.h +++ b/kernel/include/kernel/Storage/ATA/ATADevice.h @@ -32,9 +32,6 @@ namespace Kernel virtual dev_t rdev() const override { return m_rdev; } - virtual BAN::ErrorOr read_impl(off_t, BAN::ByteSpan) override; - virtual BAN::ErrorOr write_impl(off_t, BAN::ConstByteSpan) override; - protected: ATABaseDevice(); BAN::ErrorOr initialize(BAN::Span identify_data); diff --git a/kernel/include/kernel/Storage/StorageDevice.h b/kernel/include/kernel/Storage/StorageDevice.h index 37599678..63166f97 100644 --- a/kernel/include/kernel/Storage/StorageDevice.h +++ b/kernel/include/kernel/Storage/StorageDevice.h @@ -40,6 +40,9 @@ namespace Kernel virtual BAN::ErrorOr write_sectors_impl(uint64_t lba, uint64_t sector_count, BAN::ConstByteSpan) = 0; void add_disk_cache(); + virtual BAN::ErrorOr read_impl(off_t, BAN::ByteSpan) override; + virtual BAN::ErrorOr write_impl(off_t, BAN::ConstByteSpan) override; + virtual bool can_read_impl() const override { return true; } virtual bool can_write_impl() const override { return true; } virtual bool has_error_impl() const override { return false; } diff --git a/kernel/kernel/Storage/ATA/ATADevice.cpp b/kernel/kernel/Storage/ATA/ATADevice.cpp index a0f8d5b2..5ca3f652 100644 --- a/kernel/kernel/Storage/ATA/ATADevice.cpp +++ b/kernel/kernel/Storage/ATA/ATADevice.cpp @@ -77,26 +77,6 @@ namespace Kernel return {}; } - BAN::ErrorOr detail::ATABaseDevice::read_impl(off_t offset, BAN::ByteSpan buffer) - { - if (offset % sector_size()) - return BAN::Error::from_errno(EINVAL); - if (buffer.size() % sector_size()) - return BAN::Error::from_errno(EINVAL); - TRY(read_sectors(offset / sector_size(), buffer.size() / sector_size(), buffer)); - return buffer.size(); - } - - BAN::ErrorOr detail::ATABaseDevice::write_impl(off_t offset, BAN::ConstByteSpan buffer) - { - if (offset % sector_size()) - return BAN::Error::from_errno(EINVAL); - if (buffer.size() % sector_size()) - return BAN::Error::from_errno(EINVAL); - TRY(write_sectors(offset / sector_size(), buffer.size() / sector_size(), buffer)); - return buffer.size(); - } - BAN::ErrorOr> ATADevice::create(BAN::RefPtr bus, ATABus::DeviceType type, bool is_secondary, BAN::Span identify_data) { auto* device_ptr = new ATADevice(bus, type, is_secondary); diff --git a/kernel/kernel/Storage/StorageDevice.cpp b/kernel/kernel/Storage/StorageDevice.cpp index 3e1e4d79..f7e0fa66 100644 --- a/kernel/kernel/Storage/StorageDevice.cpp +++ b/kernel/kernel/Storage/StorageDevice.cpp @@ -264,4 +264,24 @@ namespace Kernel return {}; } + BAN::ErrorOr StorageDevice::read_impl(off_t offset, BAN::ByteSpan buffer) + { + if (offset % sector_size()) + return BAN::Error::from_errno(EINVAL); + if (buffer.size() % sector_size()) + return BAN::Error::from_errno(EINVAL); + TRY(read_sectors(offset / sector_size(), buffer.size() / sector_size(), buffer)); + return buffer.size(); + } + + BAN::ErrorOr StorageDevice::write_impl(off_t offset, BAN::ConstByteSpan buffer) + { + if (offset % sector_size()) + return BAN::Error::from_errno(EINVAL); + if (buffer.size() % sector_size()) + return BAN::Error::from_errno(EINVAL); + TRY(write_sectors(offset / sector_size(), buffer.size() / sector_size(), buffer)); + return buffer.size(); + } + }