From de2973ac42bedea5c17e87f49cc5f3993bb4e515 Mon Sep 17 00:00:00 2001 From: Aiken Harris Date: Sat, 16 Aug 2025 20:28:05 +0200 Subject: [PATCH] Implement page map info initialization --- xtoskrnl/mm/amd64/init.c | 26 +++++++++++++++++++++++++- xtoskrnl/mm/i686/init.c | 28 +++++++++++++++++++++++++++- 2 files changed, 52 insertions(+), 2 deletions(-) diff --git a/xtoskrnl/mm/amd64/init.c b/xtoskrnl/mm/amd64/init.c index 88e27d7..0b930ef 100644 --- a/xtoskrnl/mm/amd64/init.c +++ b/xtoskrnl/mm/amd64/init.c @@ -20,7 +20,31 @@ XTAPI VOID MmInitializePageMapSupport(VOID) { - UNIMPLEMENTED; + /* Check if XPA is enabled */ + if(MmpGetExtendedPhysicalAddressingStatus()) + { + /* Set PML5 page map information */ + MmpPageMapInfo.Xpa = TRUE; + + /* Set PML5 base addresses */ + MmpPageMapInfo.PteBase = MM_PTE_LA57_BASE; + MmpPageMapInfo.PdeBase = MM_PDE_LA57_BASE; + MmpPageMapInfo.PpeBase = MM_PPE_LA57_BASE; + MmpPageMapInfo.PxeBase = MM_PXE_LA57_BASE; + MmpPageMapInfo.P5eBase = MM_P5E_LA57_BASE; + } + else + { + /* Set PML4 page map information */ + MmpPageMapInfo.Xpa = FALSE; + + /* Set PML4 base addresses */ + MmpPageMapInfo.PteBase = MM_PTE_BASE; + MmpPageMapInfo.PdeBase = MM_PDE_BASE; + MmpPageMapInfo.PpeBase = MM_PPE_BASE; + MmpPageMapInfo.PxeBase = MM_PXE_BASE; + MmpPageMapInfo.P5eBase = 0x0; + } } /** diff --git a/xtoskrnl/mm/i686/init.c b/xtoskrnl/mm/i686/init.c index fe4887e..8a8a9ce 100644 --- a/xtoskrnl/mm/i686/init.c +++ b/xtoskrnl/mm/i686/init.c @@ -20,7 +20,33 @@ XTAPI VOID MmInitializePageMapSupport(VOID) { - UNIMPLEMENTED; + /* Check if XPA is enabled */ + if(MmpGetExtendedPhysicalAddressingStatus()) + { + /* Set PML3 page map information */ + MmpPageMapInfo.Xpa = TRUE; + + /* Set PML3 base addresses */ + MmpPageMapInfo.PteBase = MM_PTE_BASE; + MmpPageMapInfo.PdeBase = MM_PDE_BASE; + + /* Set PML3 shift values */ + MmpPageMapInfo.PdiShift = MM_PDI_SHIFT; + MmpPageMapInfo.PteShift = MM_PTE_SHIFT; + } + else + { + /* Set PML2 page map information */ + MmpPageMapInfo.Xpa = FALSE; + + /* Set PML2 base addresses */ + MmpPageMapInfo.PteBase = MM_PTE_BASE; + MmpPageMapInfo.PdeBase = MM_PDE_LEGACY_BASE; + + /* Set PML2 shift values */ + MmpPageMapInfo.PdiShift = MM_PDI_LEGACY_SHIFT; + MmpPageMapInfo.PteShift = MM_PTE_LEGACY_SHIFT; + } } /**