diff --git a/xtoskrnl/includes/mm/amd64/pte.hh b/xtoskrnl/includes/mm/amd64/pte.hh index 1c02731..70c7c9d 100644 --- a/xtoskrnl/includes/mm/amd64/pte.hh +++ b/xtoskrnl/includes/mm/amd64/pte.hh @@ -31,6 +31,7 @@ namespace MM STATIC XTAPI PMMPTE GetSystemPteBaseAddress(VOID); STATIC XTAPI PMMPTE GetValidPte(VOID); STATIC XTAPI VOID InitializePageTable(VOID); + STATIC XTAPI VOID InitializePteTemplate(VOID); STATIC XTAPI VOID InitializeSystemPteSpace(VOID); STATIC XTAPI VOID MapP5E(PVOID StartAddress, PVOID EndAddress, diff --git a/xtoskrnl/includes/mm/i686/pte.hh b/xtoskrnl/includes/mm/i686/pte.hh index 0ad0ba5..4576f48 100644 --- a/xtoskrnl/includes/mm/i686/pte.hh +++ b/xtoskrnl/includes/mm/i686/pte.hh @@ -31,6 +31,7 @@ namespace MM STATIC XTAPI PMMPTE GetSystemPteBaseAddress(VOID); STATIC XTAPI PMMPTE GetValidPte(VOID); STATIC XTAPI VOID InitializePageTable(VOID); + STATIC XTAPI VOID InitializePteTemplate(VOID); STATIC XTAPI VOID InitializeSystemPteSpace(VOID); STATIC XTAPI VOID MapPDE(PVOID StartAddress, PVOID EndAddress, diff --git a/xtoskrnl/mm/amd64/pte.cc b/xtoskrnl/mm/amd64/pte.cc index 71fba17..540f40f 100644 --- a/xtoskrnl/mm/amd64/pte.cc +++ b/xtoskrnl/mm/amd64/pte.cc @@ -153,6 +153,20 @@ MM::Pte::InitializePageTable(VOID) MM::Paging::SetPte(MM::Paging::GetPteAddress((PVOID)MemoryLayout->HyperSpaceStart), MM_HYPERSPACE_PAGE_COUNT, 0); } +/** + * Initializes the PTE template. + * + * @return This routine does not return any value. + * + * @since XT 1.0 + */ +XTAPI +VOID +MM::Pte::InitializePteTemplate(VOID) +{ + ValidPte = {MM_PTE_VALID|MM_PTE_EXECUTE_READWRITE|MM_PTE_DIRTY|MM_PTE_ACCESSED}; +} + /** * Maps a range of virtual addresses at the P5E (PML5) level. * diff --git a/xtoskrnl/mm/data.cc b/xtoskrnl/mm/data.cc index d775ba4..ead62f1 100644 --- a/xtoskrnl/mm/data.cc +++ b/xtoskrnl/mm/data.cc @@ -104,4 +104,4 @@ PMMPTE MM::Pte::SystemPtesStart[MaximumPtePoolTypes]; ULONG MM::Pte::TotalSystemFreePtes[MaximumPtePoolTypes]; /* Template PTE entry containing standard flags for a valid, present kernel page */ -MMPTE MM::Pte::ValidPte = {MM_PTE_VALID|MM_PTE_EXECUTE_READWRITE|MM_PTE_DIRTY|MM_PTE_ACCESSED}; +MMPTE MM::Pte::ValidPte; diff --git a/xtoskrnl/mm/i686/pte.cc b/xtoskrnl/mm/i686/pte.cc index 60bc935..e46a64f 100644 --- a/xtoskrnl/mm/i686/pte.cc +++ b/xtoskrnl/mm/i686/pte.cc @@ -112,6 +112,20 @@ MM::Pte::InitializePageTable(VOID) MM::Pte::MapPDE(MemoryLayout->SystemSpaceStart, (PVOID)MM_HIGHEST_SYSTEM_ADDRESS, &TemplatePte); } +/** + * Initializes the PTE template. + * + * @return This routine does not return any value. + * + * @since XT 1.0 + */ +XTAPI +VOID +MM::Pte::InitializePteTemplate(VOID) +{ + ValidPte = {{MM_PTE_VALID|MM_PTE_EXECUTE_READWRITE|MM_PTE_DIRTY|MM_PTE_ACCESSED}}; +} + /** * Maps a range of virtual addresses at the PPE (Page Directory Pointer Entry) level. * diff --git a/xtoskrnl/mm/mmgr.cc b/xtoskrnl/mm/mmgr.cc index bf00683..50fd8ba 100644 --- a/xtoskrnl/mm/mmgr.cc +++ b/xtoskrnl/mm/mmgr.cc @@ -63,6 +63,9 @@ MM::Manager::InitializeMemoryManager(VOID) /* Initialize memory layout */ InitializeMemoryLayout(); + /* Initialize PTE template */ + MM::Pte::InitializePteTemplate(); + /* Initialize page table */ MM::Pte::InitializePageTable();