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 | |||
| 40 | using f32 = float; ///< 32-bit floating point | 40 | using f32 = float; ///< 32-bit floating point |
| 41 | using f64 = double; ///< 64-bit floating point | 41 | using f64 = double; ///< 64-bit floating point |
| 42 | 42 | ||
| 43 | // TODO: It would be nice to eventually replace these with strong types that prevent accidental | 43 | using VAddr = u64; ///< Represents a pointer in the userspace virtual address space. |
| 44 | // conversion between each other. | 44 | using PAddr = u64; ///< Represents a pointer in the ARM11 physical address space. |
| 45 | using VAddr = u64; ///< Represents a pointer in the userspace virtual address space. | 45 | using GPUVAddr = u64; ///< Represents a pointer in the GPU virtual address space. |
| 46 | using PAddr = u64; ///< Represents a pointer in the ARM11 physical address space. | ||
| 47 | 46 | ||
| 48 | using u128 = std::array<std::uint64_t, 2>; | 47 | using u128 = std::array<std::uint64_t, 2>; |
| 49 | static_assert(sizeof(u128) == 16, "u128 must be 128 bits wide"); | 48 | 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) { | |||
| 16 | 16 | ||
| 17 | pointers.resize(num_page_table_entries); | 17 | pointers.resize(num_page_table_entries); |
| 18 | attributes.resize(num_page_table_entries); | 18 | attributes.resize(num_page_table_entries); |
| 19 | backing_addr.resize(num_page_table_entries); | ||
| 19 | 20 | ||
| 20 | // The default is a 39-bit address space, which causes an initial 1GB allocation size. If the | 21 | // The default is a 39-bit address space, which causes an initial 1GB allocation size. If the |
| 21 | // vector size is subsequently decreased (via resize), the vector might not automatically | 22 | // 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) { | |||
| 24 | 25 | ||
| 25 | pointers.shrink_to_fit(); | 26 | pointers.shrink_to_fit(); |
| 26 | attributes.shrink_to_fit(); | 27 | attributes.shrink_to_fit(); |
| 28 | backing_addr.shrink_to_fit(); | ||
| 27 | } | 29 | } |
| 28 | 30 | ||
| 29 | } // namespace Common | 31 | } // 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 { | |||
| 21 | RasterizerCachedMemory, | 21 | RasterizerCachedMemory, |
| 22 | /// Page is mapped to a I/O region. Writing and reading to this page is handled by functions. | 22 | /// Page is mapped to a I/O region. Writing and reading to this page is handled by functions. |
| 23 | Special, | 23 | Special, |
| 24 | /// Page is allocated for use. | ||
| 25 | Allocated, | ||
| 24 | }; | 26 | }; |
| 25 | 27 | ||
| 26 | struct SpecialRegion { | 28 | struct SpecialRegion { |
| @@ -66,7 +68,7 @@ struct PageTable { | |||
| 66 | * Contains MMIO handlers that back memory regions whose entries in the `attribute` vector is | 68 | * Contains MMIO handlers that back memory regions whose entries in the `attribute` vector is |
| 67 | * of type `Special`. | 69 | * of type `Special`. |
| 68 | */ | 70 | */ |
| 69 | boost::icl::interval_map<VAddr, std::set<SpecialRegion>> special_regions; | 71 | boost::icl::interval_map<u64, std::set<SpecialRegion>> special_regions; |
| 70 | 72 | ||
| 71 | /** | 73 | /** |
| 72 | * Vector of fine grained page attributes. If it is set to any value other than `Memory`, then | 74 | * Vector of fine grained page attributes. If it is set to any value other than `Memory`, then |
| @@ -74,6 +76,8 @@ struct PageTable { | |||
| 74 | */ | 76 | */ |
| 75 | std::vector<PageType> attributes; | 77 | std::vector<PageType> attributes; |
| 76 | 78 | ||
| 79 | std::vector<u64> backing_addr; | ||
| 80 | |||
| 77 | const std::size_t page_size_in_bits{}; | 81 | const std::size_t page_size_in_bits{}; |
| 78 | }; | 82 | }; |
| 79 | 83 | ||