From c710ec4688d03f18c9de4387b0045cf3c0f63d35 Mon Sep 17 00:00:00 2001 From: Aiken Harris Date: Thu, 4 Dec 2025 23:07:59 +0100 Subject: [PATCH] Refactor XPA detection API --- xtoskrnl/includes/mm/amd64/paging.hh | 4 ++-- xtoskrnl/includes/mm/i686/paging.hh | 4 ++-- xtoskrnl/mm/paging.cc | 28 ++++++++++++++-------------- 3 files changed, 18 insertions(+), 18 deletions(-) diff --git a/xtoskrnl/includes/mm/amd64/paging.hh b/xtoskrnl/includes/mm/amd64/paging.hh index 613c70c..91dcfff 100644 --- a/xtoskrnl/includes/mm/amd64/paging.hh +++ b/xtoskrnl/includes/mm/amd64/paging.hh @@ -26,13 +26,11 @@ namespace MM STATIC XTAPI VOID ClearPte(IN PMMPTE PtePointer); STATIC XTAPI VOID FlushTlb(VOID); STATIC XTAPI ULONG_PTR GetEmptyPteList(VOID); - STATIC XTAPI BOOLEAN GetExtendedPhysicalAddressingStatus(VOID); STATIC XTAPI ULONG_PTR GetNextEntry(IN PMMPTE Pte); STATIC XTAPI PMMPTE GetNextPte(IN PMMPTE Pte); STATIC XTAPI BOOLEAN GetOneEntry(IN PMMPTE Pte); STATIC XTAPI PMMPDE GetP5eAddress(IN PVOID Address); STATIC XTAPI PVOID GetP5eVirtualAddress(IN PMMP5E P5ePointer); - STATIC XTAPI USHORT GetPageMapLevel(); STATIC XTAPI PFN_NUMBER GetPageFrameNumber(IN PMMPTE Pte); STATIC XTAPI PMMPDE GetPdeAddress(IN PVOID Address); STATIC XTAPI PVOID GetPdeVirtualAddress(IN PMMPDE PdePointer); @@ -43,6 +41,7 @@ namespace MM STATIC XTAPI PVOID GetPteVirtualAddress(IN PMMPTE PtePointer); STATIC XTAPI PMMPXE GetPxeAddress(IN PVOID Address); STATIC XTAPI PVOID GetPxeVirtualAddress(IN PMMPXE PxePointer); + STATIC XTAPI BOOLEAN GetXpaStatus(VOID); STATIC XTAPI VOID InitializePageMapSupport(VOID); STATIC XTAPI BOOLEAN PteValid(IN PMMPTE PtePointer); STATIC XTAPI VOID SetNextEntry(IN PMMPTE Pte, @@ -59,6 +58,7 @@ namespace MM IN ULONG Size); private: + STATIC XTAPI BOOLEAN GetExtendedPhysicalAddressingStatus(VOID); STATIC XTAPI PPAGEMAP GetPageMapBasicRoutines(VOID); STATIC XTAPI PPAGEMAP GetPageMapXpaRoutines(VOID); }; diff --git a/xtoskrnl/includes/mm/i686/paging.hh b/xtoskrnl/includes/mm/i686/paging.hh index 97c099e..819cfa6 100644 --- a/xtoskrnl/includes/mm/i686/paging.hh +++ b/xtoskrnl/includes/mm/i686/paging.hh @@ -26,11 +26,9 @@ namespace MM STATIC XTAPI VOID ClearPte(IN PMMPTE PtePointer); STATIC XTAPI VOID FlushTlb(VOID); STATIC XTAPI ULONG_PTR GetEmptyPteList(VOID); - STATIC XTAPI BOOLEAN GetExtendedPhysicalAddressingStatus(VOID); STATIC XTAPI ULONG_PTR GetNextEntry(IN PMMPTE Pte); STATIC XTAPI PMMPTE GetNextPte(IN PMMPTE Pte); STATIC XTAPI BOOLEAN GetOneEntry(IN PMMPTE Pte); - STATIC XTAPI USHORT GetPageMapLevel(); STATIC XTAPI PFN_NUMBER GetPageFrameNumber(IN PMMPTE Pte); STATIC XTAPI PMMPDE GetPdeAddress(IN PVOID Address); STATIC XTAPI PVOID GetPdeVirtualAddress(IN PMMPDE PdePointer); @@ -39,6 +37,7 @@ namespace MM STATIC XTAPI PMMPTE GetPteAddress(IN PVOID Address); STATIC XTAPI ULONG GetPteSize(VOID); STATIC XTAPI PVOID GetPteVirtualAddress(IN PMMPTE PtePointer); + STATIC XTAPI BOOLEAN GetXpaStatus(VOID); STATIC XTAPI VOID InitializePageMapSupport(VOID); STATIC XTAPI BOOLEAN PteValid(IN PMMPTE PtePointer); STATIC XTAPI VOID SetNextEntry(IN PMMPTE Pte, @@ -55,6 +54,7 @@ namespace MM IN ULONG Size); private: + STATIC XTAPI BOOLEAN GetExtendedPhysicalAddressingStatus(VOID); STATIC XTAPI PPAGEMAP GetPageMapBasicRoutines(VOID); STATIC XTAPI PPAGEMAP GetPageMapXpaRoutines(VOID); }; diff --git a/xtoskrnl/mm/paging.cc b/xtoskrnl/mm/paging.cc index 225d758..5c5316f 100644 --- a/xtoskrnl/mm/paging.cc +++ b/xtoskrnl/mm/paging.cc @@ -204,20 +204,6 @@ MM::Paging::GetPageMapBasicRoutines(VOID) return &PageMapBasicRoutines; } -/** - * Gets the current paging mode level. - * - * @return This routine returns 5 if 5-level paging (XPA) is enabled, otherwise 4 for 4-level paging. - * - * @since XT 1.0 - */ -XTAPI -USHORT -MM::Paging::GetPageMapLevel() -{ - return PmlRoutines->GetXpaStatus() ? 5 : 4; -} - /** * Gets the page map routines for eXtended Physical Addressing (XPA) mode. * @@ -358,6 +344,20 @@ MM::Paging::GetPteVirtualAddress(IN PMMPTE PtePointer) return PmlRoutines->GetPteVirtualAddress(PtePointer); } +/** + * Gets current status of eXtended Physical Addressing (XPA). + * + * @return This routine returns TRUE if PAE or LA57 (XPA) is enabled, or FALSE otherwise. + * + * @since XT 1.0 + */ +XTAPI +BOOLEAN +MM::Paging::GetXpaStatus() +{ + return PmlRoutines->GetXpaStatus(); +} + /** * Detects if eXtended Physical Addressing (XPA) is enabled and initializes page map support. *