summaryrefslogtreecommitdiff
path: root/src/kernel/arch/amd64/32/paging.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/kernel/arch/amd64/32/paging.c')
-rw-r--r--src/kernel/arch/amd64/32/paging.c24
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,
+ };
+ }
}
}