diff options
Diffstat (limited to 'src/common')
-rw-r--r-- | src/common/common_types.h | 7 | ||||
-rw-r--r-- | src/common/page_table.cpp | 2 | ||||
-rw-r--r-- | src/common/page_table.h | 6 |
3 files changed, 10 insertions, 5 deletions
diff --git a/src/common/common_types.h b/src/common/common_types.h index 6b1766dca..4cec89fbd 100644 --- a/src/common/common_types.h +++ b/src/common/common_types.h @@ -40,10 +40,9 @@ using s64 = std::int64_t; ///< 64-bit signed int using f32 = float; ///< 32-bit floating point using f64 = double; ///< 64-bit floating point -// TODO: It would be nice to eventually replace these with strong types that prevent accidental -// conversion between each other. -using VAddr = u64; ///< Represents a pointer in the userspace virtual address space. -using PAddr = u64; ///< Represents a pointer in the ARM11 physical address space. +using VAddr = u64; ///< Represents a pointer in the userspace virtual address space. +using PAddr = u64; ///< Represents a pointer in the ARM11 physical address space. +using GPUVAddr = u64; ///< Represents a pointer in the GPU virtual address space. using u128 = std::array<std::uint64_t, 2>; static_assert(sizeof(u128) == 16, "u128 must be 128 bits wide"); diff --git a/src/common/page_table.cpp b/src/common/page_table.cpp index 8eba1c3f1..69b7abc54 100644 --- a/src/common/page_table.cpp +++ b/src/common/page_table.cpp @@ -16,6 +16,7 @@ void PageTable::Resize(std::size_t address_space_width_in_bits) { pointers.resize(num_page_table_entries); attributes.resize(num_page_table_entries); + backing_addr.resize(num_page_table_entries); // The default is a 39-bit address space, which causes an initial 1GB allocation size. If the // vector size is subsequently decreased (via resize), the vector might not automatically @@ -24,6 +25,7 @@ void PageTable::Resize(std::size_t address_space_width_in_bits) { pointers.shrink_to_fit(); attributes.shrink_to_fit(); + backing_addr.shrink_to_fit(); } } // namespace Common diff --git a/src/common/page_table.h b/src/common/page_table.h index 8339f2890..8b8ff0bb8 100644 --- a/src/common/page_table.h +++ b/src/common/page_table.h @@ -21,6 +21,8 @@ enum class PageType : u8 { RasterizerCachedMemory, /// Page is mapped to a I/O region. Writing and reading to this page is handled by functions. Special, + /// Page is allocated for use. + Allocated, }; struct SpecialRegion { @@ -66,7 +68,7 @@ struct PageTable { * Contains MMIO handlers that back memory regions whose entries in the `attribute` vector is * of type `Special`. */ - boost::icl::interval_map<VAddr, std::set<SpecialRegion>> special_regions; + boost::icl::interval_map<u64, std::set<SpecialRegion>> special_regions; /** * Vector of fine grained page attributes. If it is set to any value other than `Memory`, then @@ -74,6 +76,8 @@ struct PageTable { */ std::vector<PageType> attributes; + std::vector<u64> backing_addr; + const std::size_t page_size_in_bits{}; }; |