diff options
| author | 2020-04-08 23:37:24 -0400 | |
|---|---|---|
| committer | 2020-04-17 00:59:35 -0400 | |
| commit | a8292f6cd9f8b4088ee85b59a87e5bf0ce387cf0 (patch) | |
| tree | ff88e12685101a4f451b5bb56894ff4e7128d0ce /src | |
| parent | kernel: svc: Updates for new VMM. (diff) | |
| download | yuzu-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.cpp | 7 | ||||
| -rw-r--r-- | src/core/device_memory.h | 10 | ||||
| -rw-r--r-- | src/core/hle/kernel/memory/page_table.cpp | 4 | ||||
| -rw-r--r-- | src/core/hle/kernel/memory/page_table.h | 4 |
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 | ||
| 13 | DeviceMemory::~DeviceMemory() = default; | 13 | DeviceMemory::~DeviceMemory() = default; |
| 14 | 14 | ||
| 15 | PAddr 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 | ||
| 939 | PAddr PageTable::GetPhysicalAddr(VAddr addr) { | ||
| 940 | return system.DeviceMemory().GetPhysicalAddr(addr); | ||
| 941 | } | ||
| 942 | |||
| 943 | ResultCode PageTable::InitializeMemoryLayout(VAddr start, VAddr end) { | 939 | ResultCode 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 | ||
| 215 | private: | 217 | private: |
| 216 | constexpr bool Contains(VAddr addr) const { | 218 | constexpr bool Contains(VAddr addr) const { |