diff --git a/sdk/xtdk/amd64/mmtypes.h b/sdk/xtdk/amd64/mmtypes.h index c5313e6..f6c91c1 100644 --- a/sdk/xtdk/amd64/mmtypes.h +++ b/sdk/xtdk/amd64/mmtypes.h @@ -30,6 +30,7 @@ #define MM_PDI_SHIFT 21 #define MM_PPI_SHIFT 30 #define MM_PXI_SHIFT 39 +#define MM_LA57_SHIFT 48 /* Number of PTEs per page */ #define MM_PTE_PER_PAGE 512 diff --git a/xtldr/arch/amd64/memory.c b/xtldr/arch/amd64/memory.c index df9215c..07e3c06 100644 --- a/xtldr/arch/amd64/memory.c +++ b/xtldr/arch/amd64/memory.c @@ -165,11 +165,11 @@ BlMapPage(IN PXTBL_PAGE_MAPPING PageMap, while(NumberOfPages > 0) { /* Calculate the indices in the various Page Tables from the virtual address */ - Pml5Entry = (VirtualAddress & ((ULONGLONG)0x1FF << 48)) >> 48; - Pml4Entry = (VirtualAddress & ((ULONGLONG)0x1FF << 39)) >> 39; - Pml3Entry = (VirtualAddress & ((ULONGLONG)0x1FF << 30)) >> 30; - Pml2Entry = (VirtualAddress & ((ULONGLONG)0x1FF << 21)) >> 21; - Pml1Entry = (VirtualAddress & ((ULONGLONG)0x1FF << 12)) >> 12; + Pml5Entry = (VirtualAddress & ((ULONGLONG)0x1FF << MM_LA57_SHIFT)) >> MM_LA57_SHIFT; + Pml4Entry = (VirtualAddress & ((ULONGLONG)0x1FF << MM_PXI_SHIFT)) >> MM_PXI_SHIFT; + Pml3Entry = (VirtualAddress & ((ULONGLONG)0x1FF << MM_PPI_SHIFT)) >> MM_PPI_SHIFT; + Pml2Entry = (VirtualAddress & ((ULONGLONG)0x1FF << MM_PDI_SHIFT)) >> MM_PDI_SHIFT; + Pml1Entry = (VirtualAddress & ((ULONGLONG)0x1FF << MM_PTI_SHIFT)) >> MM_PTI_SHIFT; /* Check page map level */ if(PageMap->PageMapLevel == 5) @@ -262,7 +262,7 @@ BlpSelfMapPml(IN PXTBL_PAGE_MAPPING PageMap, else { /* Calculate PML index based on provided self map address */ - PmlIndex = (SelfMapAddress >> 39) & 0x1FF; + PmlIndex = (SelfMapAddress >> MM_PXI_SHIFT) & 0x1FF; /* Add self-mapping for PML4 */ ((PHARDWARE_PTE)PageMap->PtePointer)[PmlIndex].PageFrameNumber = (UINT_PTR)PageMap->PtePointer / EFI_PAGE_SIZE; diff --git a/xtldr/arch/i686/memory.c b/xtldr/arch/i686/memory.c index 83a0f27..d34c20a 100644 --- a/xtldr/arch/i686/memory.c +++ b/xtldr/arch/i686/memory.c @@ -260,10 +260,10 @@ BlpSelfMapPml(IN PXTBL_PAGE_MAPPING PageMap, if(PageMap->PageMapLevel == 3) { /* Calculate PML index based on provided self map address */ - PmlIndex = (SelfMapAddress >> 21) & 0x1FF; + PmlIndex = (SelfMapAddress >> MM_PDI_SHIFT) & 0x1FF; /* Get Page Directory */ - Pml = (PHARDWARE_PTE)(((PHARDWARE_PTE)PageMap->PtePointer)[SelfMapAddress >> 30].PageFrameNumber * EFI_PAGE_SIZE); + Pml = (PHARDWARE_PTE)(((PHARDWARE_PTE)PageMap->PtePointer)[SelfMapAddress >> MM_PPI_SHIFT].PageFrameNumber * EFI_PAGE_SIZE); /* Add self-mapping for PML3 (PAE enabled) */ for(Index = 0; Index < 4; Index++) @@ -276,7 +276,7 @@ BlpSelfMapPml(IN PXTBL_PAGE_MAPPING PageMap, else { /* Calculate PML index based on provided self map address */ - PmlIndex = (SelfMapAddress >> 22); + PmlIndex = (SelfMapAddress >> MM_PDI_LEGACY_SHIFT); /* Add self-mapping for PML2 (PAE disabled) */ ((PHARDWARE_LEGACY_PTE)PageMap->PtePointer)[PmlIndex].PageFrameNumber = (UINT_PTR)PageMap->PtePointer / EFI_PAGE_SIZE;