Refactor memory layout structure
This commit is contained in:
@@ -54,11 +54,11 @@ MM::Manager::InitializeMemoryLayout(VOID)
|
||||
if(MM::Paging::GetXpaStatus())
|
||||
{
|
||||
/* Configure memory layout for 3-level paging, using 36bit address space and providing a 64 GB address space */
|
||||
MemoryLayout.PfnDatabaseAddress = (PMMPFN)0xB0000000;
|
||||
MemoryLayout.PfnDatabase = (PMMPFN)0xB0000000;
|
||||
MemoryLayout.SelfMapAddress = (PVOID)MM_PTE_BASE;
|
||||
|
||||
/* Define the non-paged and paged pool regions */
|
||||
MemoryLayout.NonPagedPoolStart = (PVOID)((ULONG_PTR)MemoryLayout.PfnDatabaseAddress + PfnDatabaseSize * MM_PAGE_SIZE);
|
||||
MemoryLayout.NonPagedPoolStart = (PVOID)((ULONG_PTR)MemoryLayout.PfnDatabase + PfnDatabaseSize * MM_PAGE_SIZE);
|
||||
MemoryLayout.NonPagedPoolEnd = (PVOID)0xEEFFFFFF;
|
||||
MemoryLayout.PagedPoolStart = (PVOID)0xE2000000;
|
||||
MemoryLayout.PagedPoolEnd = (PVOID)(((ULONG_PTR)MemoryLayout.PagedPoolStart + PagedPoolSize) - 1);
|
||||
@@ -66,18 +66,16 @@ MM::Manager::InitializeMemoryLayout(VOID)
|
||||
/* Define hyperspace, system PTE space, and the user space limit */
|
||||
MemoryLayout.HyperSpaceStart = (PVOID)0xC0800000;
|
||||
MemoryLayout.HyperSpaceEnd = (PVOID)0xC0BFFFFF;
|
||||
MemoryLayout.SystemSpaceStart = (PVOID)0xC0C00000;
|
||||
MemoryLayout.SystemSpaceEnd = (PVOID)((ULONG_PTR)MemoryLayout.SystemSpaceStart + (NumberOfSystemPtes + 1) * MM_PAGE_SIZE);
|
||||
MemoryLayout.UserSpaceEnd = (PVOID)0x7FFEFFFF;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Configure memory layout for 2-level paging, using 32bit address space and providing a 4 GB address space */
|
||||
MemoryLayout.PfnDatabaseAddress = (PMMPFN)0xB0000000;
|
||||
MemoryLayout.PfnDatabase = (PMMPFN)0xB0000000;
|
||||
MemoryLayout.SelfMapAddress = (PVOID)MM_PTE_BASE;
|
||||
|
||||
/* Define the non-paged and paged pool regions */
|
||||
MemoryLayout.NonPagedPoolStart = (PVOID)((ULONG_PTR)MemoryLayout.PfnDatabaseAddress + PfnDatabaseSize * MM_PAGE_SIZE);
|
||||
MemoryLayout.NonPagedPoolStart = (PVOID)((ULONG_PTR)MemoryLayout.PfnDatabase + PfnDatabaseSize * MM_PAGE_SIZE);
|
||||
MemoryLayout.NonPagedPoolEnd = (PVOID)0xFFBE0000;
|
||||
MemoryLayout.PagedPoolStart = (PVOID)0xE1000000;
|
||||
MemoryLayout.PagedPoolEnd = (PVOID)(((ULONG_PTR)MemoryLayout.PagedPoolStart + PagedPoolSize) - 1);
|
||||
@@ -85,8 +83,6 @@ MM::Manager::InitializeMemoryLayout(VOID)
|
||||
/* Define hyperspace, system PTE space, and the user space limit */
|
||||
MemoryLayout.HyperSpaceStart = (PVOID)0xC0400000;
|
||||
MemoryLayout.HyperSpaceEnd = (PVOID)0xC07FFFFF;
|
||||
MemoryLayout.SystemSpaceStart = (PVOID)0xC0800000;
|
||||
MemoryLayout.SystemSpaceEnd = (PVOID)((ULONG_PTR)MemoryLayout.SystemSpaceStart + (NumberOfSystemPtes + 1) * MM_PAGE_SIZE);
|
||||
MemoryLayout.UserSpaceEnd = (PVOID)0x7FFEFFFF;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -39,17 +39,17 @@ MM::Pfn::InitializePfnDatabase(VOID)
|
||||
MemoryLayout = MM::Manager::GetMemoryLayout();
|
||||
|
||||
/* Get the PFN database size and calculate the end of the PFN database virtual address space */
|
||||
PfnDatabaseEnd = (PUCHAR)MemoryLayout->PfnDatabaseAddress + (PfnDatabaseSize * MM_PAGE_SIZE) - 1;
|
||||
PfnDatabaseEnd = (PUCHAR)MemoryLayout->PfnDatabase + (PfnDatabaseSize * MM_PAGE_SIZE) - 1;
|
||||
|
||||
/* Get a template PTE for mapping the PFN database pages */
|
||||
ValidPte = MM::Pte::GetValidPte();
|
||||
|
||||
/* Map the Page Directory and Page Directory Pointer tables for the PFN database */
|
||||
MM::Pte::MapPDE(MemoryLayout->PfnDatabaseAddress, PfnDatabaseEnd, ValidPte);
|
||||
MM::Pte::MapPTE(MemoryLayout->PfnDatabaseAddress, PfnDatabaseEnd, ValidPte);
|
||||
MM::Pte::MapPDE(MemoryLayout->PfnDatabase, PfnDatabaseEnd, ValidPte);
|
||||
MM::Pte::MapPTE(MemoryLayout->PfnDatabase, PfnDatabaseEnd, ValidPte);
|
||||
|
||||
/* Zero PFN database virtual space */
|
||||
RTL::Memory::ZeroMemory(MemoryLayout->PfnDatabaseAddress, PfnDatabaseSize * MM_PAGE_SIZE);
|
||||
RTL::Memory::ZeroMemory(MemoryLayout->PfnDatabase, PfnDatabaseSize * MM_PAGE_SIZE);
|
||||
|
||||
/* Initialize the color tables */
|
||||
MM::Colors::InitializeColorTables();
|
||||
|
||||
@@ -98,7 +98,7 @@ MM::Pte::InitializePageTable(VOID)
|
||||
MM::Paging::SetPte(&TemplatePte, 0, MM_PTE_READWRITE | MM_PTE_CACHE_ENABLE);
|
||||
|
||||
/* Map the kernel's PD entries */
|
||||
MM::Pte::MapPDE(MemoryLayout->SystemSpaceStart, (PVOID)MM_HIGHEST_SYSTEM_ADDRESS, &TemplatePte);
|
||||
MM::Pte::MapPDE(MemoryLayout->NonPagedSystemPoolStart, (PVOID)MM_HIGHEST_SYSTEM_ADDRESS, &TemplatePte);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user