|
|
@ -71,17 +71,22 @@ static void MapPages(PageTable& page_table, VAddr base, u64 size, u8* memory, Pa |
|
|
FlushMode::FlushAndInvalidate); |
|
|
FlushMode::FlushAndInvalidate); |
|
|
|
|
|
|
|
|
VAddr end = base + size; |
|
|
VAddr end = base + size; |
|
|
while (base != end) { |
|
|
|
|
|
ASSERT_MSG(base < page_table.pointers.size(), "out of range mapping at {:016X}", base); |
|
|
|
|
|
|
|
|
ASSERT_MSG(end <= page_table.pointers.size(), "out of range mapping at {:016X}", |
|
|
|
|
|
base + page_table.pointers.size()); |
|
|
|
|
|
|
|
|
|
|
|
std::fill(page_table.attributes.begin() + base, page_table.attributes.begin() + end, type); |
|
|
|
|
|
|
|
|
page_table.attributes[base] = type; |
|
|
|
|
|
|
|
|
if (memory == nullptr) { |
|
|
|
|
|
std::fill(page_table.pointers.begin() + base, page_table.pointers.begin() + end, memory); |
|
|
|
|
|
} else { |
|
|
|
|
|
while (base != end) { |
|
|
page_table.pointers[base] = memory; |
|
|
page_table.pointers[base] = memory; |
|
|
|
|
|
|
|
|
base += 1; |
|
|
base += 1; |
|
|
if (memory != nullptr) |
|
|
|
|
|
memory += PAGE_SIZE; |
|
|
memory += PAGE_SIZE; |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
void MapMemoryRegion(PageTable& page_table, VAddr base, u64 size, u8* target) { |
|
|
void MapMemoryRegion(PageTable& page_table, VAddr base, u64 size, u8* target) { |
|
|
ASSERT_MSG((size & PAGE_MASK) == 0, "non-page aligned size: {:016X}", size); |
|
|
ASSERT_MSG((size & PAGE_MASK) == 0, "non-page aligned size: {:016X}", size); |
|
|
|