diff options
author | bunnei <bunneidev@gmail.com> | 2020-04-03 04:00:41 +0200 |
---|---|---|
committer | bunnei <bunneidev@gmail.com> | 2020-04-17 06:59:29 +0200 |
commit | dc25c86556c36dd23224d88234afc9ecbf780719 (patch) | |
tree | 5dbe45bcc17ecad8675e7a4cb03dd34361f01e03 /src/core/device_memory.h | |
parent | dynarmic: Enable strict alignment checks. (diff) | |
download | yuzu-dc25c86556c36dd23224d88234afc9ecbf780719.tar yuzu-dc25c86556c36dd23224d88234afc9ecbf780719.tar.gz yuzu-dc25c86556c36dd23224d88234afc9ecbf780719.tar.bz2 yuzu-dc25c86556c36dd23224d88234afc9ecbf780719.tar.lz yuzu-dc25c86556c36dd23224d88234afc9ecbf780719.tar.xz yuzu-dc25c86556c36dd23224d88234afc9ecbf780719.tar.zst yuzu-dc25c86556c36dd23224d88234afc9ecbf780719.zip |
Diffstat (limited to 'src/core/device_memory.h')
-rw-r--r-- | src/core/device_memory.h | 48 |
1 files changed, 48 insertions, 0 deletions
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 <typename T> + PAddr GetPhysicalAddr(T* ptr) { + const auto ptr_addr{reinterpret_cast<uintptr_t>(ptr)}; + const auto base_addr{reinterpret_cast<uintptr_t>(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 |