diff options
| author | Fernando Sahmkow <fsahmkow27@gmail.com> | 2023-12-30 09:37:16 +0100 |
|---|---|---|
| committer | Liam <byteslice@airmail.cc> | 2024-01-18 21:12:30 -0500 |
| commit | 0797d63a369e65d452736b30c6b3a1bf19a200f2 (patch) | |
| tree | 34c983ea5d60c58f0511f993090b70aebe778582 /src/core/device_memory_manager.h | |
| parent | 43de47538a8a5c1ce7a2f114f87844b55682f5c1 (diff) | |
SMMU: Add continuity tracking optimization.
Diffstat (limited to 'src/core/device_memory_manager.h')
| -rw-r--r-- | src/core/device_memory_manager.h | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/src/core/device_memory_manager.h b/src/core/device_memory_manager.h index 0273b78dbb..0f6599cfe3 100644 --- a/src/core/device_memory_manager.h +++ b/src/core/device_memory_manager.h @@ -13,7 +13,6 @@ #include "common/scratch_buffer.h" #include "common/virtual_buffer.h" - namespace Core { class DeviceMemory; @@ -40,9 +39,17 @@ public: void AllocateFixed(DAddr start, size_t size); void Free(DAddr start, size_t size); - void Map(DAddr address, VAddr virtual_address, size_t size, size_t process_id); + void Map(DAddr address, VAddr virtual_address, size_t size, size_t process_id, + bool track = false); + void Unmap(DAddr address, size_t size); + void TrackContinuityImpl(DAddr address, VAddr virtual_address, size_t size, size_t process_id); + void TrackContinuity(DAddr address, VAddr virtual_address, size_t size, size_t process_id) { + std::scoped_lock lk(mapping_guard); + TrackContinuityImpl(address, virtual_address, size, process_id); + } + // Write / Read template <typename T> T* GetPointer(DAddr address); @@ -86,13 +93,8 @@ public: template <typename T> T Read(DAddr address) const; - const u8* GetSpan(const DAddr src_addr, const std::size_t size) const { - return nullptr; - } - - u8* GetSpan(const DAddr src_addr, const std::size_t size) { - return nullptr; - } + u8* GetSpan(const DAddr src_addr, const std::size_t size); + const u8* GetSpan(const DAddr src_addr, const std::size_t size) const; void ReadBlock(DAddr address, void* dest_pointer, size_t size); void ReadBlockUnsafe(DAddr address, void* dest_pointer, size_t size); @@ -144,6 +146,7 @@ private: DeviceInterface* interface; Common::VirtualBuffer<u32> compressed_physical_ptr; Common::VirtualBuffer<u32> compressed_device_addr; + Common::VirtualBuffer<u32> continuity_tracker; // Process memory interfaces |
