Implement architecture-specific user probe address retrieval
This commit is contained in:
@@ -110,6 +110,10 @@
|
||||
/* Highest system address */
|
||||
#define MM_HIGHEST_SYSTEM_ADDRESS 0xFFFFFFFFFFFFFFFFULL
|
||||
|
||||
/* User probe address */
|
||||
#define MM_USER_PROBE_ADDRESS 0x00007FFFFFFF0000ULL
|
||||
#define MM_USER_PROBE_LA57_ADDRESS 0x00FFFFFFFFFF0000ULL
|
||||
|
||||
/* Trampoline code address */
|
||||
#define MM_TRAMPOLINE_ADDRESS 0x80000
|
||||
|
||||
|
||||
@@ -108,6 +108,9 @@
|
||||
/* Highest system address */
|
||||
#define MM_HIGHEST_SYSTEM_ADDRESS 0xFFFFFFFF
|
||||
|
||||
/* User probe address */
|
||||
#define MM_USER_PROBE_ADDRESS 0x7FFF0000
|
||||
|
||||
/* Trampoline code address */
|
||||
#define MM_TRAMPOLINE_ADDRESS 0x80000
|
||||
|
||||
|
||||
@@ -52,6 +52,7 @@ namespace MM
|
||||
XTAPI PMMPXE GetPxeAddress(IN PVOID Address);
|
||||
XTAPI ULONG GetPxeOffset(IN PVOID Address);
|
||||
VIRTUAL XTAPI PVOID GetPxeVirtualAddress(IN PMMPXE PxePointer) = 0;
|
||||
VIRTUAL ULONG_PTR GetUserProbeAddress(VOID) = 0;
|
||||
XTAPI BOOLEAN GetXpaStatus();
|
||||
VIRTUAL XTAPI VOID InitializePageMapInfo(VOID) = 0;
|
||||
XTAPI BOOLEAN PteValid(IN PMMPTE PtePointer);
|
||||
@@ -80,6 +81,7 @@ namespace MM
|
||||
XTAPI PVOID GetPpeVirtualAddress(IN PMMPPE PpePointer);
|
||||
XTAPI PVOID GetPteVirtualAddress(IN PMMPTE PtePointer);
|
||||
XTAPI PVOID GetPxeVirtualAddress(IN PMMPXE PxePointer);
|
||||
XTAPI ULONG_PTR GetUserProbeAddress(VOID);
|
||||
XTAPI VOID InitializePageMapInfo(VOID);
|
||||
};
|
||||
|
||||
@@ -90,6 +92,7 @@ namespace MM
|
||||
XTAPI PVOID GetPpeVirtualAddress(IN PMMPPE PpePointer);
|
||||
XTAPI PVOID GetPteVirtualAddress(IN PMMPTE PtePointer);
|
||||
XTAPI PVOID GetPxeVirtualAddress(IN PMMPXE PxePointer);
|
||||
XTAPI ULONG_PTR GetUserProbeAddress(VOID);
|
||||
XTAPI VOID InitializePageMapInfo(VOID);
|
||||
};
|
||||
}
|
||||
|
||||
@@ -49,6 +49,7 @@ namespace MM
|
||||
STATIC XTAPI PVOID GetPteVirtualAddress(IN PMMPTE PtePointer);
|
||||
STATIC XTAPI PMMPXE GetPxeAddress(IN PVOID Address);
|
||||
STATIC XTAPI PVOID GetPxeVirtualAddress(IN PMMPXE PxePointer);
|
||||
STATIC XTAPI ULONG_PTR GetUserProbeAddress(VOID);
|
||||
STATIC XTAPI BOOLEAN GetXpaStatus(VOID);
|
||||
STATIC XTAPI VOID InitializePageMapSupport(VOID);
|
||||
STATIC XTAPI XTSTATUS MapVirtualAddress(IN PVOID VirtualAddress,
|
||||
|
||||
@@ -46,6 +46,7 @@ namespace MM
|
||||
VIRTUAL XTAPI ULONG GetPteSoftwarePrototype(IN PMMPTE PtePointer) = 0;
|
||||
VIRTUAL XTAPI ULONG GetPteSoftwareTransition(IN PMMPTE PtePointer) = 0;
|
||||
VIRTUAL XTAPI PVOID GetPteVirtualAddress(IN PMMPTE PtePointer) = 0;
|
||||
XTAPI ULONG_PTR GetUserProbeAddress(VOID);
|
||||
XTAPI BOOLEAN GetXpaStatus();
|
||||
VIRTUAL XTAPI VOID InitializePageMapInfo(VOID) = 0;
|
||||
VIRTUAL XTAPI BOOLEAN PteValid(IN PMMPTE PtePointer) = 0;
|
||||
|
||||
@@ -45,6 +45,7 @@ namespace MM
|
||||
STATIC XTAPI ULONG GetPteSoftwarePrototype(IN PMMPTE PtePointer);
|
||||
STATIC XTAPI ULONG GetPteSoftwareTransition(IN PMMPTE PtePointer);
|
||||
STATIC XTAPI PVOID GetPteVirtualAddress(IN PMMPTE PtePointer);
|
||||
STATIC XTAPI ULONG_PTR GetUserProbeAddress(VOID);
|
||||
STATIC XTAPI BOOLEAN GetXpaStatus(VOID);
|
||||
STATIC XTAPI VOID InitializePageMapSupport(VOID);
|
||||
STATIC XTAPI XTSTATUS MapVirtualAddress(IN PVOID VirtualAddress,
|
||||
|
||||
@@ -755,6 +755,21 @@ MM::PageMapBasic::GetPxeVirtualAddress(IN PMMPXE PxePointer)
|
||||
return (PVOID)(((LONGLONG)PxePointer << 52) >> 16);
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the maximum valid memory address accessible to user-mode applications.
|
||||
*
|
||||
* @return This routine returns the user-mode probe address boundary.
|
||||
*
|
||||
* @since XT 1.0
|
||||
*/
|
||||
XTAPI
|
||||
ULONG_PTR
|
||||
MM::PageMapBasic::GetUserProbeAddress(VOID)
|
||||
{
|
||||
/* Return user probe address */
|
||||
return MM_USER_PROBE_ADDRESS;
|
||||
}
|
||||
|
||||
/**
|
||||
* Initializes page map information for basic paging (PML4).
|
||||
*
|
||||
@@ -852,6 +867,21 @@ MM::PageMapXpa::GetPxeVirtualAddress(IN PMMPXE PxePointer)
|
||||
return (PVOID)(((LONGLONG)PxePointer << 43) >> 7);
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the maximum valid memory address accessible to user-mode applications.
|
||||
*
|
||||
* @return This routine returns the user-mode probe address boundary.
|
||||
*
|
||||
* @since XT 1.0
|
||||
*/
|
||||
XTAPI
|
||||
ULONG_PTR
|
||||
MM::PageMapXpa::GetUserProbeAddress(VOID)
|
||||
{
|
||||
/* Return user probe address */
|
||||
return MM_USER_PROBE_LA57_ADDRESS;
|
||||
}
|
||||
|
||||
/**
|
||||
* Initializes page map information for XPA paging (PML5).
|
||||
*
|
||||
|
||||
@@ -173,6 +173,21 @@ MM::PageMap::GetPteOffset(IN PVOID Address)
|
||||
return ((((ULONG_PTR)(Address)) >> MM_PTI_SHIFT) & (PageMapInfo.Xpa ? 0x1FF : 0x3FF));
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the maximum valid memory address accessible to user-mode applications.
|
||||
*
|
||||
* @return This routine returns the user-mode probe address boundary.
|
||||
*
|
||||
* @since XT 1.0
|
||||
*/
|
||||
XTAPI
|
||||
ULONG_PTR
|
||||
MM::PageMap::GetUserProbeAddress(VOID)
|
||||
{
|
||||
/* Return user probe address */
|
||||
return MM_USER_PROBE_ADDRESS;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the status of Extended Paging Address (XPA) mode.
|
||||
*
|
||||
|
||||
@@ -470,6 +470,21 @@ MM::Paging::GetPteVirtualAddress(IN PMMPTE PtePointer)
|
||||
return PmlRoutines->GetPteVirtualAddress(PtePointer);
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the maximum valid memory address accessible to user-mode applications.
|
||||
*
|
||||
* @return This routine returns the user-mode probe address boundary.
|
||||
*
|
||||
* @since XT 1.0
|
||||
*/
|
||||
XTAPI
|
||||
ULONG_PTR
|
||||
MM::Paging::GetUserProbeAddress(VOID)
|
||||
{
|
||||
/* Return user probe address */
|
||||
return PmlRoutines->GetUserProbeAddress();
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets current status of eXtended Physical Addressing (XPA).
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user