From 90820d94b942cc3ecf62818e401e271217255b03 Mon Sep 17 00:00:00 2001 From: Ada Christine Date: Tue, 23 Mar 2021 13:00:34 +0000 Subject: loop to map pages --- loader/loader_efi.c | 49 +++++++++++++------------------------------------ 1 file changed, 13 insertions(+), 36 deletions(-) (limited to 'loader') diff --git a/loader/loader_efi.c b/loader/loader_efi.c index 42eacc2..e531521 100644 --- a/loader/loader_efi.c +++ b/loader/loader_efi.c @@ -74,44 +74,21 @@ static void map_page(void *map, { uint64_t *this_map = (uint64_t *)map; uint64_t next_map; - - if (!this_map[page_table_index(virt, 4)]) - { - next_map = new_page_table(); - this_map[page_table_index(virt, 4)] = next_map | 3; - this_map = (uint64_t *)next_map; - } - else - { - next_map = this_map[page_table_index(virt, 4)]; - next_map &= PAGE_TABLE_ADDRESS_MASK; - this_map = (uint64_t *)next_map; - } - if (!this_map[page_table_index(virt, 3)]) - { - next_map = new_page_table(); - this_map[page_table_index(virt, 3)] = next_map | 3; - this_map = (uint64_t *)next_map; - } - else - { - next_map = this_map[page_table_index(virt, 3)]; - next_map &= PAGE_TABLE_ADDRESS_MASK; - this_map = (uint64_t *)next_map; - } - - if (!this_map[page_table_index(virt, 2)]) - { - next_map = new_page_table(); - this_map[page_table_index(virt, 2)] = next_map | 3; - this_map = (uint64_t *)next_map; - } - else + for (int level = 4; level > 1; level--) { - next_map = this_map[page_table_index(virt, 2)]; - next_map &= PAGE_TABLE_ADDRESS_MASK; - this_map = (uint64_t *)next_map; + if (!this_map[page_table_index(virt, level)]) + { + next_map = new_page_table(); + this_map[page_table_index(virt, level)] = next_map | 3; + this_map = (uint64_t *)next_map; + } + else + { + next_map = this_map[page_table_index(virt, level)]; + next_map &= PAGE_TABLE_ADDRESS_MASK; + this_map = (uint64_t *)next_map; + } } this_map[page_table_index(virt, 1)] = phys | type; -- cgit v1.3.1-1-g115d