diff options
| author | Fabian Imhof <fabian.imhof@ost.ch> | 2024-10-22 07:40:35 +0000 |
|---|---|---|
| committer | Fabian Imhof <fabian.imhof@ost.ch> | 2024-10-22 07:40:35 +0000 |
| commit | 5a2892f65abe13c32bb07de697826f374c1d2b1d (patch) | |
| tree | f0bd3f00be82cce9265a2d6fc0aa0f360177eb91 /arch/x86_64/src/memory/paging | |
| parent | 7d1d7c5f63791506049cc188740cc4956fc8d14c (diff) | |
| download | teachos-5a2892f65abe13c32bb07de697826f374c1d2b1d.tar.xz teachos-5a2892f65abe13c32bb07de697826f374c1d2b1d.zip | |
change table level 4 address
Diffstat (limited to 'arch/x86_64/src/memory/paging')
| -rw-r--r-- | arch/x86_64/src/memory/paging/page_mapper.cpp | 15 |
1 files changed, 4 insertions, 11 deletions
diff --git a/arch/x86_64/src/memory/paging/page_mapper.cpp b/arch/x86_64/src/memory/paging/page_mapper.cpp index 75b17ff..1371868 100644 --- a/arch/x86_64/src/memory/paging/page_mapper.cpp +++ b/arch/x86_64/src/memory/paging/page_mapper.cpp @@ -4,8 +4,9 @@ namespace teachos::arch::memory::paging { namespace { - constexpr size_t PAGE_TABLE_LEVEL_4_ADDRESS = 0xfffffffffffff000; - } + // TODO: Set the address to a sensible location, this is merely a placeholder + constexpr size_t PAGE_TABLE_LEVEL_4_ADDRESS = 0x27AC40; + } // namespace auto create_or_get() -> page_table_handle { @@ -14,19 +15,11 @@ namespace teachos::arch::memory::paging return page_table_handle{active_page, page_table_handle::LEVEL4}; } - auto subtract_level(page_table_handle::level level) -> page_table_handle::level - { - exception_handling::assert(level != page_table_handle::LEVEL1, - "[Page table] Attemptd to decrement enum to value outside of range"); - auto value = static_cast<std::underlying_type<page_table_handle::level>::type>(level); - return static_cast<page_table_handle::level>(--value); - } - auto translate_page(virtual_page page) -> std::optional<allocator::physical_frame> { auto current_handle = create_or_get(); - for (auto level = page_table_handle::LEVEL4; level != page_table_handle::LEVEL1; level = subtract_level(level)) + for (auto level = page_table_handle::LEVEL4; level != page_table_handle::LEVEL1; level--) { auto next_handle = current_handle.next_table(page.get_level_index(level)); // If the next table method failed then it is highly likely that it was a huge page and we therefore have to |
