From dc25c86556c36dd23224d88234afc9ecbf780719 Mon Sep 17 00:00:00 2001 From: bunnei Date: Thu, 2 Apr 2020 22:00:41 -0400 Subject: core: device_manager: Add a simple class to manage device RAM. --- src/core/device_memory.h | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 src/core/device_memory.h (limited to 'src/core/device_memory.h') diff --git a/src/core/device_memory.h b/src/core/device_memory.h new file mode 100644 index 000000000..a60a7238a --- /dev/null +++ b/src/core/device_memory.h @@ -0,0 +1,48 @@ +// Copyright 2020 yuzu Emulator Project +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#pragma once + +#include "common/assert.h" +#include "common/common_funcs.h" +#include "core/hle/kernel/physical_memory.h" + +namespace Core { + +class System; + +namespace DramMemoryMap { +constexpr u64 Base = 0x80000000ULL; +constexpr u64 Size = 0x100000000ULL; +constexpr u64 End = Base + Size; +constexpr u64 KernelReserveBase = Base + 0x60000; +constexpr u64 SlabHeapBase = KernelReserveBase + 0x85000; +constexpr u64 SlapHeapSize = 0xa21000; +constexpr u64 SlabHeapEnd = SlabHeapBase + SlapHeapSize; +}; // namespace DramMemoryMap + +class DeviceMemory : NonCopyable { +public: + DeviceMemory(Core::System& system); + ~DeviceMemory(); + + template + PAddr GetPhysicalAddr(T* ptr) { + const auto ptr_addr{reinterpret_cast(ptr)}; + const auto base_addr{reinterpret_cast(base)}; + ASSERT(ptr_addr >= base_addr); + return ptr_addr - base_addr + DramMemoryMap::Base; + } + + PAddr GetPhysicalAddr(VAddr addr); + + u8* GetPointer(PAddr addr); + +private: + u8* base{}; + Kernel::PhysicalMemory physical_memory; + Core::System& system; +}; + +} // namespace Core -- cgit v1.2.3