diff --git a/kernel/include/kernel/Storage/ATA/AHCI/Device.h b/kernel/include/kernel/Storage/ATA/AHCI/Device.h index 0281e38e..a3d37810 100644 --- a/kernel/include/kernel/Storage/ATA/AHCI/Device.h +++ b/kernel/include/kernel/Storage/ATA/AHCI/Device.h @@ -1,8 +1,9 @@ #pragma once -#include +#include #include #include +#include namespace Kernel { @@ -34,6 +35,8 @@ namespace Kernel BAN::ErrorOr block_until_command_completed(uint32_t command_slot); private: + Mutex m_mutex; + BAN::RefPtr m_controller; volatile HBAPortMemorySpace* const m_port; diff --git a/kernel/kernel/Storage/ATA/AHCI/Device.cpp b/kernel/kernel/Storage/ATA/AHCI/Device.cpp index d65fd5ab..41b44183 100644 --- a/kernel/kernel/Storage/ATA/AHCI/Device.cpp +++ b/kernel/kernel/Storage/ATA/AHCI/Device.cpp @@ -1,3 +1,4 @@ +#include #include #include #include @@ -182,6 +183,8 @@ namespace Kernel BAN::ErrorOr AHCIDevice::read_sectors_impl(uint64_t lba, uint64_t sector_count, BAN::ByteSpan buffer) { + LockGuard _(m_mutex); + ASSERT(buffer.size() >= sector_count * sector_size()); const size_t sectors_per_page = PAGE_SIZE / sector_size(); for (uint64_t sector_off = 0; sector_off < sector_count; sector_off += sectors_per_page) @@ -197,6 +200,8 @@ namespace Kernel BAN::ErrorOr AHCIDevice::write_sectors_impl(uint64_t lba, uint64_t sector_count, BAN::ConstByteSpan buffer) { + LockGuard _(m_mutex); + ASSERT(buffer.size() >= sector_count * sector_size()); const size_t sectors_per_page = PAGE_SIZE / sector_size(); for (uint64_t sector_off = 0; sector_off < sector_count; sector_off += sectors_per_page)