Implement PML5 self-mapping
This commit is contained in:
parent
c409400cbf
commit
b639bf3077
@ -338,21 +338,20 @@ BlpSelfMapPml(IN PXTBL_PAGE_MAPPING PageMap,
|
|||||||
/* Check page map level */
|
/* Check page map level */
|
||||||
if(PageMap->PageMapLevel == 5)
|
if(PageMap->PageMapLevel == 5)
|
||||||
{
|
{
|
||||||
/* Self-mapping for PML5 is not supported */
|
/* Calculate PML index based on provided self map address for PML5 */
|
||||||
BlDebugPrint(L"PML5 self-mapping not supported yet!\n");
|
PmlIndex = (SelfMapAddress >> MM_P5I_SHIFT) & 0x1FF;
|
||||||
return STATUS_EFI_UNSUPPORTED;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* Calculate PML index based on provided self map address */
|
/* Calculate PML index based on provided self map address for PML4 */
|
||||||
PmlIndex = (SelfMapAddress >> MM_PXI_SHIFT) & 0x1FF;
|
PmlIndex = (SelfMapAddress >> MM_PXI_SHIFT) & 0x1FF;
|
||||||
|
}
|
||||||
|
|
||||||
/* Add self-mapping for PML4 */
|
/* Add self-mapping */
|
||||||
RtlZeroMemory(&PmlBase[PmlIndex], sizeof(HARDWARE_PTE));
|
RtlZeroMemory(&PmlBase[PmlIndex], sizeof(HARDWARE_PTE));
|
||||||
PmlBase[PmlIndex].PageFrameNumber = (UINT_PTR)PageMap->PtePointer / EFI_PAGE_SIZE;
|
PmlBase[PmlIndex].PageFrameNumber = (UINT_PTR)PageMap->PtePointer / EFI_PAGE_SIZE;
|
||||||
PmlBase[PmlIndex].Valid = 1;
|
PmlBase[PmlIndex].Valid = 1;
|
||||||
PmlBase[PmlIndex].Writable = 1;
|
PmlBase[PmlIndex].Writable = 1;
|
||||||
}
|
|
||||||
|
|
||||||
/* Return success */
|
/* Return success */
|
||||||
return STATUS_EFI_SUCCESS;
|
return STATUS_EFI_SUCCESS;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user