diff options
Diffstat (limited to 'src/kernel/arch/amd64/32/paging.c')
-rw-r--r-- | src/kernel/arch/amd64/32/paging.c | 24 |
1 files changed, 13 insertions, 11 deletions
diff --git a/src/kernel/arch/amd64/32/paging.c b/src/kernel/arch/amd64/32/paging.c index f33168d..16c3526 100644 --- a/src/kernel/arch/amd64/32/paging.c +++ b/src/kernel/arch/amd64/32/paging.c @@ -8,7 +8,7 @@ __attribute__((aligned(4096))) static pe_generic_t pdpte_low[512]; // 0-512gb __attribute__((aligned(4096))) -static pe_generic_t pde_low[512]; // 0-1gb +static pe_generic_t pde_low[4][512]; // 4 * 0-1gb void pml4_identity_init(void) { memset32(pml4_identity, 0, sizeof pml4_identity); @@ -21,18 +21,20 @@ void pml4_identity_init(void) { .address = ((uintptr_t)pdpte_low) >> 12, }; - pdpte_low[0] = (pe_generic_t) { - .present = 1, - .writeable = 1, - .address = ((uintptr_t)pde_low) >> 12, - }; - - for (int i = 0; i < 512; i++) { - pde_low[i] = (pe_generic_t) { + for (int i = 0; i < 4; i++) { + pdpte_low[i] = (pe_generic_t) { .present = 1, .writeable = 1, - .large = 1, - .address = (i * 2 * 1024 * 1024) >> 12, + .address = ((uintptr_t)&pde_low[i]) >> 12, }; + + for (int j = 0; j < 512; j++) { + pde_low[i][j] = (pe_generic_t) { + .present = 1, + .writeable = 1, + .large = 1, + .address = (i * 512 + j) << 9, + }; + } } } |