summaryrefslogtreecommitdiff
path: root/src/common
diff options
context:
space:
mode:
Diffstat (limited to 'src/common')
-rw-r--r--src/common/common_types.h7
-rw-r--r--src/common/page_table.cpp2
-rw-r--r--src/common/page_table.h6
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
40using f32 = float; ///< 32-bit floating point 40using f32 = float; ///< 32-bit floating point
41using f64 = double; ///< 64-bit floating point 41using f64 = double; ///< 64-bit floating point
42 42
43// TODO: It would be nice to eventually replace these with strong types that prevent accidental 43using VAddr = u64; ///< Represents a pointer in the userspace virtual address space.
44// conversion between each other. 44using PAddr = u64; ///< Represents a pointer in the ARM11 physical address space.
45using VAddr = u64; ///< Represents a pointer in the userspace virtual address space. 45using GPUVAddr = u64; ///< Represents a pointer in the GPU virtual address space.
46using PAddr = u64; ///< Represents a pointer in the ARM11 physical address space.
47 46
48using u128 = std::array<std::uint64_t, 2>; 47using u128 = std::array<std::uint64_t, 2>;
49static_assert(sizeof(u128) == 16, "u128 must be 128 bits wide"); 48static_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
26struct SpecialRegion { 28struct 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