Initialize system PTE pools and implement reservation routines
This commit is contained in:
@@ -18,6 +18,11 @@ namespace MM
|
||||
class Pte
|
||||
{
|
||||
private:
|
||||
STATIC MMPTE FirstSystemFreePte[MaximumPtePoolTypes];
|
||||
STATIC PMMPTE SystemPteBase;
|
||||
STATIC PMMPTE SystemPtesEnd[MaximumPtePoolTypes];
|
||||
STATIC PMMPTE SystemPtesStart[MaximumPtePoolTypes];
|
||||
STATIC ULONG TotalSystemFreePtes[MaximumPtePoolTypes];
|
||||
STATIC MMPTE ValidPte;
|
||||
|
||||
public:
|
||||
@@ -25,6 +30,7 @@ namespace MM
|
||||
STATIC XTAPI ULONG GetPtesPerPage(VOID);
|
||||
STATIC XTAPI PMMPTE GetSystemPteBaseAddress(VOID);
|
||||
STATIC XTAPI VOID InitializePageTable(VOID);
|
||||
STATIC XTAPI VOID InitializeSystemPteSpace(VOID);
|
||||
STATIC XTAPI VOID MapP5E(PVOID StartAddress,
|
||||
PVOID EndAddress,
|
||||
PMMP5E TemplateP5e);
|
||||
@@ -40,6 +46,19 @@ namespace MM
|
||||
STATIC XTAPI VOID MapPXE(PVOID StartAddress,
|
||||
PVOID EndAddress,
|
||||
PMMPXE TemplatePxe);
|
||||
STATIC XTAPI PMMPTE ReserveSystemPtes(IN ULONG NumberOfPtes,
|
||||
IN MMSYSTEM_PTE_POOL_TYPE SystemPtePoolType,
|
||||
IN ULONG Alignment);
|
||||
|
||||
private:
|
||||
STATIC XTAPI BOOLEAN FindFreeCluster(IN ULONG NumberOfPtes,
|
||||
IN MMSYSTEM_PTE_POOL_TYPE SystemPtePoolType,
|
||||
OUT PMMPTE *FoundCluster,
|
||||
OUT PMMPTE *PreviousClusterNode);
|
||||
STATIC XTAPI ULONG GetClusterSize(IN PMMPTE Pte);
|
||||
STATIC XTAPI VOID InitializeSystemPtePool(IN PMMPTE StartingPte,
|
||||
IN ULONG NumberOfPtes,
|
||||
IN MMSYSTEM_PTE_POOL_TYPE PoolType);
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -18,6 +18,11 @@ namespace MM
|
||||
class Pte
|
||||
{
|
||||
private:
|
||||
STATIC MMPTE FirstSystemFreePte[MaximumPtePoolTypes];
|
||||
STATIC PMMPTE SystemPteBase;
|
||||
STATIC PMMPTE SystemPtesEnd[MaximumPtePoolTypes];
|
||||
STATIC PMMPTE SystemPtesStart[MaximumPtePoolTypes];
|
||||
STATIC ULONG TotalSystemFreePtes[MaximumPtePoolTypes];
|
||||
STATIC MMPTE ValidPte;
|
||||
|
||||
public:
|
||||
@@ -25,6 +30,7 @@ namespace MM
|
||||
STATIC XTAPI ULONG GetPtesPerPage(VOID);
|
||||
STATIC XTAPI PMMPTE GetSystemPteBaseAddress(VOID);
|
||||
STATIC XTAPI VOID InitializePageTable(VOID);
|
||||
STATIC XTAPI VOID InitializeSystemPteSpace(VOID);
|
||||
STATIC XTAPI VOID MapPDE(PVOID StartAddress,
|
||||
PVOID EndAddress,
|
||||
PMMPDE TemplatePde);
|
||||
@@ -34,6 +40,19 @@ namespace MM
|
||||
STATIC XTAPI VOID MapPTE(PVOID StartAddress,
|
||||
PVOID EndAddress,
|
||||
PMMPTE TemplatePte);
|
||||
STATIC XTAPI PMMPTE ReserveSystemPtes(IN ULONG NumberOfPtes,
|
||||
IN MMSYSTEM_PTE_POOL_TYPE SystemPtePoolType,
|
||||
IN ULONG Alignment);
|
||||
|
||||
private:
|
||||
STATIC XTAPI BOOLEAN FindFreeCluster(IN ULONG NumberOfPtes,
|
||||
IN MMSYSTEM_PTE_POOL_TYPE SystemPtePoolType,
|
||||
OUT PMMPTE *FoundCluster,
|
||||
OUT PMMPTE *PreviousClusterNode);
|
||||
STATIC XTAPI ULONG GetClusterSize(IN PMMPTE Pte);
|
||||
STATIC XTAPI VOID InitializeSystemPtePool(IN PMMPTE StartingPte,
|
||||
IN ULONG NumberOfPtes,
|
||||
IN MMSYSTEM_PTE_POOL_TYPE PoolType);
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user