diff options
Diffstat (limited to 'src/core')
| -rw-r--r-- | src/core/device_memory.cpp | 38 | ||||
| -rw-r--r-- | src/core/device_memory.h | 13 | 
2 files changed, 12 insertions, 39 deletions
| diff --git a/src/core/device_memory.cpp b/src/core/device_memory.cpp index 1e4187546..61429a6ac 100644 --- a/src/core/device_memory.cpp +++ b/src/core/device_memory.cpp @@ -2,49 +2,21 @@  // Licensed under GPLv2 or any later version  // Refer to the license.txt file included. -#ifdef _WIN32 -#include <windows.h> -#endif - -#include "common/assert.h"  #include "core/core.h"  #include "core/device_memory.h"  #include "core/memory.h"  namespace Core { -constexpr u64 DramSize{4ULL * 1024 * 1024 * 1024}; - -DeviceMemory::DeviceMemory(System& system) : system{system} { -#ifdef _WIN32 -    base = static_cast<u8*>( -        VirtualAlloc(nullptr,                                    // System selects address -                     DramSize,                                   // Size of allocation -                     MEM_RESERVE | MEM_COMMIT | MEM_WRITE_WATCH, // Allocate reserved pages -                     PAGE_READWRITE));                           // Protection = no access -#else -    physical_memory.resize(DramSize); -    base = physical_memory.data(); -#endif -} +DeviceMemory::DeviceMemory(System& system) : buffer{DramMemoryMap::Size}, system{system} {} -DeviceMemory::~DeviceMemory() { -#ifdef _WIN32 -    ASSERT(VirtualFree(base, DramSize, MEM_RELEASE)); -#endif -} +DeviceMemory::~DeviceMemory() = default;  PAddr DeviceMemory::GetPhysicalAddr(VAddr addr) { -    u8* pointer{system.Memory().GetPointer(addr)}; -    ASSERT(pointer); -    const uintptr_t offset{static_cast<uintptr_t>(pointer - GetPointer(DramMemoryMap::Base))}; +    const u8* const base{system.Memory().GetPointer(addr)}; +    ASSERT(base); +    const uintptr_t offset{static_cast<uintptr_t>(base - GetPointer(DramMemoryMap::Base))};      return DramMemoryMap::Base + offset;  } -u8* DeviceMemory::GetPointer(PAddr addr) { -    ASSERT(addr >= DramMemoryMap::Base); -    ASSERT(addr < DramMemoryMap::Base + DramSize); -    return base + (addr - DramMemoryMap::Base); -} -  } // namespace Core diff --git a/src/core/device_memory.h b/src/core/device_memory.h index a60a7238a..44458c2b5 100644 --- a/src/core/device_memory.h +++ b/src/core/device_memory.h @@ -6,7 +6,7 @@  #include "common/assert.h"  #include "common/common_funcs.h" -#include "core/hle/kernel/physical_memory.h" +#include "common/virtual_buffer.h"  namespace Core { @@ -24,24 +24,25 @@ constexpr u64 SlabHeapEnd = SlabHeapBase + SlapHeapSize;  class DeviceMemory : NonCopyable {  public: -    DeviceMemory(Core::System& system); +    explicit DeviceMemory(Core::System& system);      ~DeviceMemory();      template <typename T>      PAddr GetPhysicalAddr(T* ptr) {          const auto ptr_addr{reinterpret_cast<uintptr_t>(ptr)}; -        const auto base_addr{reinterpret_cast<uintptr_t>(base)}; +        const auto base_addr{reinterpret_cast<uintptr_t>(buffer.data())};          ASSERT(ptr_addr >= base_addr);          return ptr_addr - base_addr + DramMemoryMap::Base;      }      PAddr GetPhysicalAddr(VAddr addr); -    u8* GetPointer(PAddr addr); +    constexpr u8* GetPointer(PAddr addr) { +        return buffer.data() + (addr - DramMemoryMap::Base); +    }  private: -    u8* base{}; -    Kernel::PhysicalMemory physical_memory; +    Common::VirtualBuffer<u8> buffer;      Core::System& system;  }; | 
