From 1a16d055dfbeee20a402379d6d4f3e96f8715648 Mon Sep 17 00:00:00 2001 From: bunnei Date: Fri, 18 Feb 2022 23:42:27 -0800 Subject: core: hle: kernel: KPageTable: Improve Un/MapPhysicalMemory. - Improves the implementations of MapPhysicalMemory and UnmapPhysicalMemory to more closely reflect latest HOS. --- src/common/page_table.h | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) (limited to 'src/common/page_table.h') diff --git a/src/common/page_table.h b/src/common/page_table.h index 8267e8b4d..fe254d7ae 100644 --- a/src/common/page_table.h +++ b/src/common/page_table.h @@ -27,6 +27,16 @@ enum class PageType : u8 { * mimics the way a real CPU page table works. */ struct PageTable { + struct TraversalEntry { + u64 phys_addr{}; + std::size_t block_size{}; + }; + + struct TraversalContext { + u64 next_page{}; + u64 next_offset{}; + }; + /// Number of bits reserved for attribute tagging. /// This can be at most the guaranteed alignment of the pointers in the page table. static constexpr int ATTRIBUTE_BITS = 2; @@ -89,6 +99,10 @@ struct PageTable { PageTable(PageTable&&) noexcept = default; PageTable& operator=(PageTable&&) noexcept = default; + bool BeginTraversal(TraversalEntry* out_entry, TraversalContext* out_context, + u64 address) const; + bool ContinueTraversal(TraversalEntry* out_entry, TraversalContext* context) const; + /** * Resizes the page table to be able to accommodate enough pages within * a given address space. @@ -96,9 +110,9 @@ struct PageTable { * @param address_space_width_in_bits The address size width in bits. * @param page_size_in_bits The page size in bits. */ - void Resize(size_t address_space_width_in_bits, size_t page_size_in_bits); + void Resize(std::size_t address_space_width_in_bits, std::size_t page_size_in_bits); - size_t GetAddressSpaceBits() const { + std::size_t GetAddressSpaceBits() const { return current_address_space_width_in_bits; } @@ -110,9 +124,11 @@ struct PageTable { VirtualBuffer backing_addr; - size_t current_address_space_width_in_bits; + std::size_t current_address_space_width_in_bits{}; + + u8* fastmem_arena{}; - u8* fastmem_arena; + std::size_t page_size{}; }; } // namespace Common -- cgit v1.2.3 From 92b2e92620a04af6d1ce2d35f55905b3a8b805fc Mon Sep 17 00:00:00 2001 From: bunnei Date: Sat, 19 Feb 2022 00:14:27 -0800 Subject: fixup! core: hle: kernel: KPageTable: Improve Un/MapPhysicalMemory. --- src/common/page_table.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/common/page_table.h') diff --git a/src/common/page_table.h b/src/common/page_table.h index fe254d7ae..82d91e9f3 100644 --- a/src/common/page_table.h +++ b/src/common/page_table.h @@ -99,9 +99,9 @@ struct PageTable { PageTable(PageTable&&) noexcept = default; PageTable& operator=(PageTable&&) noexcept = default; - bool BeginTraversal(TraversalEntry* out_entry, TraversalContext* out_context, + bool BeginTraversal(TraversalEntry& out_entry, TraversalContext& out_context, u64 address) const; - bool ContinueTraversal(TraversalEntry* out_entry, TraversalContext* context) const; + bool ContinueTraversal(TraversalEntry& out_entry, TraversalContext& context) const; /** * Resizes the page table to be able to accommodate enough pages within -- cgit v1.2.3