From 6a85c6ede66f723e1415552482e1c6640653efa2 Mon Sep 17 00:00:00 2001 From: dzwdz Date: Mon, 1 Aug 2022 16:33:44 +0200 Subject: amd64: /video/b device, provided by grub --- src/kernel/arch/amd64/32/paging.c | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) (limited to 'src/kernel/arch/amd64/32/paging.c') 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, + }; + } } } -- cgit v1.2.3