From 3ca6d04f6b93ad08bb326f05ee74e9ab369bad72 Mon Sep 17 00:00:00 2001 From: Aiken Harris Date: Sat, 16 Aug 2025 00:22:21 +0200 Subject: [PATCH] Add definitions for 5-level paging and refactor constants --- sdk/xtdk/amd64/mmtypes.h | 19 +++++++++++++------ xtldr/modules/xtos_o/amd64/memory.c | 2 +- xtldr/modules/xtos_o/i686/memory.c | 2 +- 3 files changed, 15 insertions(+), 8 deletions(-) diff --git a/sdk/xtdk/amd64/mmtypes.h b/sdk/xtdk/amd64/mmtypes.h index c5f8ac7..7febe4c 100644 --- a/sdk/xtdk/amd64/mmtypes.h +++ b/sdk/xtdk/amd64/mmtypes.h @@ -18,11 +18,18 @@ #define MM_PAGE_SHIFT 12L #define MM_PAGE_SIZE 4096 -/* Page directory and page base addresses */ -#define MM_PTE_BASE 0xFFFFF68000000000UI64 -#define MM_PDE_BASE 0xFFFFF6FB40000000UI64 -#define MM_PPE_BASE 0xFFFFF6FB7DA00000UI64 -#define MM_PXE_BASE 0xFFFFF6FB7DBED000UI64 +/* Page directory and page base addresses for 4-level paging */ +#define MM_PTE_BASE 0xFFFFF68000000000ULL +#define MM_PDE_BASE 0xFFFFF6FB40000000ULL +#define MM_PPE_BASE 0xFFFFF6FB7DA00000ULL +#define MM_PXE_BASE 0xFFFFF6FB7DBED000ULL + +/* Page directory and page base addresses for 5-level paging */ +#define MM_PTE_LA57_BASE 0xFFFFF68000000000ULL +#define MM_PDE_LA57_BASE 0xFFFFF78000000000ULL +#define MM_PPE_LA57_BASE 0xFFFFF78800000000ULL +#define MM_PXE_LA57_BASE 0xFFFFF78840000000ULL +#define MM_P5E_LA57_BASE 0xFFFFF78840200000ULL /* PTE shift values */ #define MM_PTE_SHIFT 3 @@ -54,7 +61,7 @@ #define MM_HARDWARE_VA_START 0xFFFFFFFFFFC00000ULL /* Maximum physical address used by HAL allocations */ -#define MM_MAXIMUM_PHYSICAL_ADDRESS 0x00000000FFFFFFFF +#define MM_MAXIMUM_PHYSICAL_ADDRESS 0x00000000FFFFFFFFULL /* Page size enumeration list */ typedef enum _PAGE_SIZE diff --git a/xtldr/modules/xtos_o/amd64/memory.c b/xtldr/modules/xtos_o/amd64/memory.c index 36d9890..91349c8 100644 --- a/xtldr/modules/xtos_o/amd64/memory.c +++ b/xtldr/modules/xtos_o/amd64/memory.c @@ -185,7 +185,7 @@ XtEnablePaging(IN PXTBL_PAGE_MAPPING PageMap) EFI_STATUS Status; /* Build page map */ - Status = XtLdrProtocol->Memory.BuildPageMap(PageMap, 0xFFFFF6FB7DBED000); + Status = XtLdrProtocol->Memory.BuildPageMap(PageMap, (PageMap->PageMapLevel > 4) ? MM_P5E_LA57_BASE : MM_PXE_BASE); if(Status != STATUS_EFI_SUCCESS) { /* Failed to build page map */ diff --git a/xtldr/modules/xtos_o/i686/memory.c b/xtldr/modules/xtos_o/i686/memory.c index 50f4194..f4fa319 100644 --- a/xtldr/modules/xtos_o/i686/memory.c +++ b/xtldr/modules/xtos_o/i686/memory.c @@ -126,7 +126,7 @@ XtEnablePaging(IN PXTBL_PAGE_MAPPING PageMap) EFI_STATUS Status; /* Build page map */ - Status = XtLdrProtocol->Memory.BuildPageMap(PageMap, 0xC0000000); + Status = XtLdrProtocol->Memory.BuildPageMap(PageMap, MM_PTE_BASE); if(Status != STATUS_EFI_SUCCESS) { /* Failed to build page map */