summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar bunnei2020-04-08 23:37:24 -0400
committerGravatar bunnei2020-04-17 00:59:35 -0400
commita8292f6cd9f8b4088ee85b59a87e5bf0ce387cf0 (patch)
treeff88e12685101a4f451b5bb56894ff4e7128d0ce /src
parentkernel: svc: Updates for new VMM. (diff)
downloadyuzu-a8292f6cd9f8b4088ee85b59a87e5bf0ce387cf0.tar.gz
yuzu-a8292f6cd9f8b4088ee85b59a87e5bf0ce387cf0.tar.xz
yuzu-a8292f6cd9f8b4088ee85b59a87e5bf0ce387cf0.zip
kernel: memory: page_table: Simplify GetPhysicalAddr impl.
Diffstat (limited to 'src')
-rw-r--r--src/core/device_memory.cpp7
-rw-r--r--src/core/device_memory.h10
-rw-r--r--src/core/hle/kernel/memory/page_table.cpp4
-rw-r--r--src/core/hle/kernel/memory/page_table.h4
4 files changed, 6 insertions, 19 deletions
diff --git a/src/core/device_memory.cpp b/src/core/device_memory.cpp
index 61429a6ac..51097ced3 100644
--- a/src/core/device_memory.cpp
+++ b/src/core/device_memory.cpp
@@ -12,11 +12,4 @@ DeviceMemory::DeviceMemory(System& system) : buffer{DramMemoryMap::Size}, system
12 12
13DeviceMemory::~DeviceMemory() = default; 13DeviceMemory::~DeviceMemory() = default;
14 14
15PAddr DeviceMemory::GetPhysicalAddr(VAddr addr) {
16 const u8* const base{system.Memory().GetPointer(addr)};
17 ASSERT(base);
18 const uintptr_t offset{static_cast<uintptr_t>(base - GetPointer(DramMemoryMap::Base))};
19 return DramMemoryMap::Base + offset;
20}
21
22} // namespace Core 15} // namespace Core
diff --git a/src/core/device_memory.h b/src/core/device_memory.h
index 44458c2b5..cc7bda070 100644
--- a/src/core/device_memory.h
+++ b/src/core/device_memory.h
@@ -28,15 +28,11 @@ public:
28 ~DeviceMemory(); 28 ~DeviceMemory();
29 29
30 template <typename T> 30 template <typename T>
31 PAddr GetPhysicalAddr(T* ptr) { 31 constexpr PAddr GetPhysicalAddr(T* ptr) {
32 const auto ptr_addr{reinterpret_cast<uintptr_t>(ptr)}; 32 return (reinterpret_cast<uintptr_t>(ptr) - reinterpret_cast<uintptr_t>(buffer.data())) +
33 const auto base_addr{reinterpret_cast<uintptr_t>(buffer.data())}; 33 DramMemoryMap::Base;
34 ASSERT(ptr_addr >= base_addr);
35 return ptr_addr - base_addr + DramMemoryMap::Base;
36 } 34 }
37 35
38 PAddr GetPhysicalAddr(VAddr addr);
39
40 constexpr u8* GetPointer(PAddr addr) { 36 constexpr u8* GetPointer(PAddr addr) {
41 return buffer.data() + (addr - DramMemoryMap::Base); 37 return buffer.data() + (addr - DramMemoryMap::Base);
42 } 38 }
diff --git a/src/core/hle/kernel/memory/page_table.cpp b/src/core/hle/kernel/memory/page_table.cpp
index 93e7253e2..941ecda21 100644
--- a/src/core/hle/kernel/memory/page_table.cpp
+++ b/src/core/hle/kernel/memory/page_table.cpp
@@ -936,10 +936,6 @@ ResultVal<VAddr> PageTable::AllocateAndMapMemory(std::size_t needed_num_pages, s
936 return MakeResult<VAddr>(addr); 936 return MakeResult<VAddr>(addr);
937} 937}
938 938
939PAddr PageTable::GetPhysicalAddr(VAddr addr) {
940 return system.DeviceMemory().GetPhysicalAddr(addr);
941}
942
943ResultCode PageTable::InitializeMemoryLayout(VAddr start, VAddr end) { 939ResultCode PageTable::InitializeMemoryLayout(VAddr start, VAddr end) {
944 block_manager = std::make_unique<MemoryBlockManager>(start, end); 940 block_manager = std::make_unique<MemoryBlockManager>(start, end);
945 941
diff --git a/src/core/hle/kernel/memory/page_table.h b/src/core/hle/kernel/memory/page_table.h
index 6c3a3c275..80384ab0f 100644
--- a/src/core/hle/kernel/memory/page_table.h
+++ b/src/core/hle/kernel/memory/page_table.h
@@ -53,7 +53,6 @@ public:
53 bool is_map_only, VAddr region_start, 53 bool is_map_only, VAddr region_start,
54 std::size_t region_num_pages, MemoryState state, 54 std::size_t region_num_pages, MemoryState state,
55 MemoryPermission perm, PAddr map_addr = 0); 55 MemoryPermission perm, PAddr map_addr = 0);
56 PAddr GetPhysicalAddr(VAddr addr);
57 56
58 Common::PageTable& PageTableImpl() { 57 Common::PageTable& PageTableImpl() {
59 return page_table_impl; 58 return page_table_impl;
@@ -211,6 +210,9 @@ public:
211 constexpr bool IsInsideASLRRegion(VAddr address, std::size_t size) const { 210 constexpr bool IsInsideASLRRegion(VAddr address, std::size_t size) const {
212 return !IsOutsideASLRRegion(address, size); 211 return !IsOutsideASLRRegion(address, size);
213 } 212 }
213 constexpr PAddr GetPhysicalAddr(VAddr addr) {
214 return page_table_impl.backing_addr[addr >> Memory::PageBits] + addr;
215 }
214 216
215private: 217private:
216 constexpr bool Contains(VAddr addr) const { 218 constexpr bool Contains(VAddr addr) const {