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; + } } /**