diff options
| author | Ada Christine <adachristine18@gmail.com> | 2021-04-23 01:12:23 +0000 |
|---|---|---|
| committer | Ada Christine <adachristine18@gmail.com> | 2021-04-23 01:12:23 +0000 |
| commit | b90e152c02aad225e83a3e6c1b80d1a0e396bb14 (patch) | |
| tree | 0eb899ca1213df0c677bf8721261d70c60ef68b4 /loader | |
| parent | 73c73b2a8c9c3a6332942a1146fd18d74616e5b2 (diff) | |
less repetition, more flexibility with paging macros
Diffstat (limited to 'loader')
| -rw-r--r-- | loader/loader_efi.c | 15 |
1 files changed, 6 insertions, 9 deletions
diff --git a/loader/loader_efi.c b/loader/loader_efi.c index 552dc06..2beb545 100644 --- a/loader/loader_efi.c +++ b/loader/loader_efi.c @@ -83,18 +83,15 @@ static uint64_t *get_page_table(uint64_t *map, uint64_t virt, int level) for (int i = PAGE_MAP_LEVELS; i > level; i--) { - if (!map[page_table_index(virt, i)]) + if (!map[pte_index(virt, i)]) { uint64_t *next_map = new_page_table(); - map[page_table_index(virt, i)] = - (uint64_t)next_map|PAGE_PR|PAGE_WR; + map[pte_index(virt, i)] = (uint64_t)next_map|PAGE_PR|PAGE_WR; map = next_map; } else { - uint64_t next_map_entry = map[page_table_index(virt, i)]; - next_map_entry &= PAGE_ADDRESS_MASK; - map = (uint64_t *)next_map_entry; + map = (uint64_t *)page_address(map[pte_index(virt, i)], 1); } } @@ -105,7 +102,7 @@ static uint64_t *get_page_entry(uint64_t *map, uint64_t virt) { int level = 1; uint64_t *table = get_page_table(map, virt, level); - return &table[page_table_index(virt, level)]; + return &table[pte_index(virt, level)]; } static void map_page(void *map, @@ -181,9 +178,9 @@ static void create_kernel_maps(struct system_image *image) 2); upper_page_dir[PAGE_TABLE_INDEX_MASK] = - (uint64_t)upper_page_dir|PAGE_PR|PAGE_WR; + (uint64_t)upper_page_dir|DATA_PAGE_TYPE; upper_page_dir[PAGE_TABLE_INDEX_MASK - 1] = - (uint64_t)lower_page_dir|PAGE_PR|PAGE_WR; + (uint64_t)lower_page_dir|DATA_PAGE_TYPE; } |
