Split PTE implementation per architecture
This commit is contained in:
@@ -24,53 +24,6 @@ MM::Pte::GetPtesPerPage(VOID)
|
||||
return MM_PAGE_SIZE / MM::Paging::GetPteSize();
|
||||
}
|
||||
|
||||
/**
|
||||
* Maps a range of virtual addresses at the P5E (PML5) level.
|
||||
*
|
||||
* @param StartAddress
|
||||
* The beginning of the virtual address range to map.
|
||||
*
|
||||
* @param EndAddress
|
||||
* The end of the virtual address range to map.
|
||||
*
|
||||
* @param TemplateP5e
|
||||
* A template P5E to use for creating new entries.
|
||||
*
|
||||
* @return This routine does not return any value.
|
||||
*
|
||||
* @since XT 1.0
|
||||
*/
|
||||
XTAPI
|
||||
VOID
|
||||
MM::Pte::MapP5E(PVOID StartAddress,
|
||||
PVOID EndAddress,
|
||||
PMMP5E TemplateP5e)
|
||||
{
|
||||
PMMP5E EndSpace, PointerP5e;
|
||||
|
||||
/* Get P5E addresses */
|
||||
PointerP5e = MM::Paging::GetP5eAddress(StartAddress);
|
||||
EndSpace = MM::Paging::GetP5eAddress(EndAddress);
|
||||
|
||||
/* Iterate over all P5Es */
|
||||
while(PointerP5e <= EndSpace)
|
||||
{
|
||||
/* Check if P5E is already mapped */
|
||||
if(!MM::Paging::PteValid(PointerP5e))
|
||||
{
|
||||
/* Map P5E */
|
||||
MM::Paging::SetPte(TemplateP5e, MM::Pfn::AllocateBootstrapPages(1), 0);
|
||||
*PointerP5e = *TemplateP5e;
|
||||
|
||||
/* Clear the page table */
|
||||
RtlZeroMemory(MM::Paging::GetPteVirtualAddress(PointerP5e), MM_PAGE_SIZE);
|
||||
}
|
||||
|
||||
/* Get next table entry */
|
||||
PointerP5e = MM::Paging::GetNextPte(PointerP5e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Maps a range of virtual addresses at the PDE (Page Directory Entry) level.
|
||||
*
|
||||
@@ -211,50 +164,3 @@ MM::Pte::MapPTE(PVOID StartAddress,
|
||||
PointerPte = MM::Paging::GetNextPte(PointerPte);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Maps a range of virtual addresses at the PXE (PML4) level.
|
||||
*
|
||||
* @param StartAddress
|
||||
* The beginning of the virtual address range to map.
|
||||
*
|
||||
* @param EndAddress
|
||||
* The end of the virtual address range to map.
|
||||
*
|
||||
* @param TemplatePxe
|
||||
* A template PXE to use for creating new entries.
|
||||
*
|
||||
* @return This routine does not return any value.
|
||||
*
|
||||
* @since XT 1.0
|
||||
*/
|
||||
XTAPI
|
||||
VOID
|
||||
MM::Pte::MapPXE(PVOID StartAddress,
|
||||
PVOID EndAddress,
|
||||
PMMPXE TemplatePxe)
|
||||
{
|
||||
PMMPXE EndSpace, PointerPxe;
|
||||
|
||||
/* Get PXE addresses */
|
||||
PointerPxe = MM::Paging::GetPxeAddress(StartAddress);
|
||||
EndSpace = MM::Paging::GetPxeAddress(EndAddress);
|
||||
|
||||
/* Iterate over all PTEs */
|
||||
while(PointerPxe <= EndSpace)
|
||||
{
|
||||
/* Check if PTE is already mapped */
|
||||
if(!MM::Paging::PteValid(PointerPxe))
|
||||
{
|
||||
/* Map PTE */
|
||||
MM::Paging::SetPte(TemplatePxe, MM::Pfn::AllocateBootstrapPages(1), 0);
|
||||
*PointerPxe = *TemplatePxe;
|
||||
|
||||
/* Clear the page table */
|
||||
RtlZeroMemory(MM::Paging::GetPteVirtualAddress(PointerPxe), MM_PAGE_SIZE);
|
||||
}
|
||||
|
||||
/* Get next table entry */
|
||||
PointerPxe = MM::Paging::GetNextPte(PointerPxe);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user