Implement architecture-specific user probe address retrieval
This commit is contained in:
@@ -110,6 +110,10 @@
|
|||||||
/* Highest system address */
|
/* Highest system address */
|
||||||
#define MM_HIGHEST_SYSTEM_ADDRESS 0xFFFFFFFFFFFFFFFFULL
|
#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 */
|
/* Trampoline code address */
|
||||||
#define MM_TRAMPOLINE_ADDRESS 0x80000
|
#define MM_TRAMPOLINE_ADDRESS 0x80000
|
||||||
|
|
||||||
|
|||||||
@@ -108,6 +108,9 @@
|
|||||||
/* Highest system address */
|
/* Highest system address */
|
||||||
#define MM_HIGHEST_SYSTEM_ADDRESS 0xFFFFFFFF
|
#define MM_HIGHEST_SYSTEM_ADDRESS 0xFFFFFFFF
|
||||||
|
|
||||||
|
/* User probe address */
|
||||||
|
#define MM_USER_PROBE_ADDRESS 0x7FFF0000
|
||||||
|
|
||||||
/* Trampoline code address */
|
/* Trampoline code address */
|
||||||
#define MM_TRAMPOLINE_ADDRESS 0x80000
|
#define MM_TRAMPOLINE_ADDRESS 0x80000
|
||||||
|
|
||||||
|
|||||||
@@ -52,6 +52,7 @@ namespace MM
|
|||||||
XTAPI PMMPXE GetPxeAddress(IN PVOID Address);
|
XTAPI PMMPXE GetPxeAddress(IN PVOID Address);
|
||||||
XTAPI ULONG GetPxeOffset(IN PVOID Address);
|
XTAPI ULONG GetPxeOffset(IN PVOID Address);
|
||||||
VIRTUAL XTAPI PVOID GetPxeVirtualAddress(IN PMMPXE PxePointer) = 0;
|
VIRTUAL XTAPI PVOID GetPxeVirtualAddress(IN PMMPXE PxePointer) = 0;
|
||||||
|
VIRTUAL ULONG_PTR GetUserProbeAddress(VOID) = 0;
|
||||||
XTAPI BOOLEAN GetXpaStatus();
|
XTAPI BOOLEAN GetXpaStatus();
|
||||||
VIRTUAL XTAPI VOID InitializePageMapInfo(VOID) = 0;
|
VIRTUAL XTAPI VOID InitializePageMapInfo(VOID) = 0;
|
||||||
XTAPI BOOLEAN PteValid(IN PMMPTE PtePointer);
|
XTAPI BOOLEAN PteValid(IN PMMPTE PtePointer);
|
||||||
@@ -80,6 +81,7 @@ namespace MM
|
|||||||
XTAPI PVOID GetPpeVirtualAddress(IN PMMPPE PpePointer);
|
XTAPI PVOID GetPpeVirtualAddress(IN PMMPPE PpePointer);
|
||||||
XTAPI PVOID GetPteVirtualAddress(IN PMMPTE PtePointer);
|
XTAPI PVOID GetPteVirtualAddress(IN PMMPTE PtePointer);
|
||||||
XTAPI PVOID GetPxeVirtualAddress(IN PMMPXE PxePointer);
|
XTAPI PVOID GetPxeVirtualAddress(IN PMMPXE PxePointer);
|
||||||
|
XTAPI ULONG_PTR GetUserProbeAddress(VOID);
|
||||||
XTAPI VOID InitializePageMapInfo(VOID);
|
XTAPI VOID InitializePageMapInfo(VOID);
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -90,6 +92,7 @@ namespace MM
|
|||||||
XTAPI PVOID GetPpeVirtualAddress(IN PMMPPE PpePointer);
|
XTAPI PVOID GetPpeVirtualAddress(IN PMMPPE PpePointer);
|
||||||
XTAPI PVOID GetPteVirtualAddress(IN PMMPTE PtePointer);
|
XTAPI PVOID GetPteVirtualAddress(IN PMMPTE PtePointer);
|
||||||
XTAPI PVOID GetPxeVirtualAddress(IN PMMPXE PxePointer);
|
XTAPI PVOID GetPxeVirtualAddress(IN PMMPXE PxePointer);
|
||||||
|
XTAPI ULONG_PTR GetUserProbeAddress(VOID);
|
||||||
XTAPI VOID InitializePageMapInfo(VOID);
|
XTAPI VOID InitializePageMapInfo(VOID);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -49,6 +49,7 @@ namespace MM
|
|||||||
STATIC XTAPI PVOID GetPteVirtualAddress(IN PMMPTE PtePointer);
|
STATIC XTAPI PVOID GetPteVirtualAddress(IN PMMPTE PtePointer);
|
||||||
STATIC XTAPI PMMPXE GetPxeAddress(IN PVOID Address);
|
STATIC XTAPI PMMPXE GetPxeAddress(IN PVOID Address);
|
||||||
STATIC XTAPI PVOID GetPxeVirtualAddress(IN PMMPXE PxePointer);
|
STATIC XTAPI PVOID GetPxeVirtualAddress(IN PMMPXE PxePointer);
|
||||||
|
STATIC XTAPI ULONG_PTR GetUserProbeAddress(VOID);
|
||||||
STATIC XTAPI BOOLEAN GetXpaStatus(VOID);
|
STATIC XTAPI BOOLEAN GetXpaStatus(VOID);
|
||||||
STATIC XTAPI VOID InitializePageMapSupport(VOID);
|
STATIC XTAPI VOID InitializePageMapSupport(VOID);
|
||||||
STATIC XTAPI XTSTATUS MapVirtualAddress(IN PVOID VirtualAddress,
|
STATIC XTAPI XTSTATUS MapVirtualAddress(IN PVOID VirtualAddress,
|
||||||
|
|||||||
@@ -46,6 +46,7 @@ namespace MM
|
|||||||
VIRTUAL XTAPI ULONG GetPteSoftwarePrototype(IN PMMPTE PtePointer) = 0;
|
VIRTUAL XTAPI ULONG GetPteSoftwarePrototype(IN PMMPTE PtePointer) = 0;
|
||||||
VIRTUAL XTAPI ULONG GetPteSoftwareTransition(IN PMMPTE PtePointer) = 0;
|
VIRTUAL XTAPI ULONG GetPteSoftwareTransition(IN PMMPTE PtePointer) = 0;
|
||||||
VIRTUAL XTAPI PVOID GetPteVirtualAddress(IN PMMPTE PtePointer) = 0;
|
VIRTUAL XTAPI PVOID GetPteVirtualAddress(IN PMMPTE PtePointer) = 0;
|
||||||
|
XTAPI ULONG_PTR GetUserProbeAddress(VOID);
|
||||||
XTAPI BOOLEAN GetXpaStatus();
|
XTAPI BOOLEAN GetXpaStatus();
|
||||||
VIRTUAL XTAPI VOID InitializePageMapInfo(VOID) = 0;
|
VIRTUAL XTAPI VOID InitializePageMapInfo(VOID) = 0;
|
||||||
VIRTUAL XTAPI BOOLEAN PteValid(IN PMMPTE PtePointer) = 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 GetPteSoftwarePrototype(IN PMMPTE PtePointer);
|
||||||
STATIC XTAPI ULONG GetPteSoftwareTransition(IN PMMPTE PtePointer);
|
STATIC XTAPI ULONG GetPteSoftwareTransition(IN PMMPTE PtePointer);
|
||||||
STATIC XTAPI PVOID GetPteVirtualAddress(IN PMMPTE PtePointer);
|
STATIC XTAPI PVOID GetPteVirtualAddress(IN PMMPTE PtePointer);
|
||||||
|
STATIC XTAPI ULONG_PTR GetUserProbeAddress(VOID);
|
||||||
STATIC XTAPI BOOLEAN GetXpaStatus(VOID);
|
STATIC XTAPI BOOLEAN GetXpaStatus(VOID);
|
||||||
STATIC XTAPI VOID InitializePageMapSupport(VOID);
|
STATIC XTAPI VOID InitializePageMapSupport(VOID);
|
||||||
STATIC XTAPI XTSTATUS MapVirtualAddress(IN PVOID VirtualAddress,
|
STATIC XTAPI XTSTATUS MapVirtualAddress(IN PVOID VirtualAddress,
|
||||||
|
|||||||
@@ -755,6 +755,21 @@ MM::PageMapBasic::GetPxeVirtualAddress(IN PMMPXE PxePointer)
|
|||||||
return (PVOID)(((LONGLONG)PxePointer << 52) >> 16);
|
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).
|
* Initializes page map information for basic paging (PML4).
|
||||||
*
|
*
|
||||||
@@ -852,6 +867,21 @@ MM::PageMapXpa::GetPxeVirtualAddress(IN PMMPXE PxePointer)
|
|||||||
return (PVOID)(((LONGLONG)PxePointer << 43) >> 7);
|
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).
|
* 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));
|
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.
|
* Gets the status of Extended Paging Address (XPA) mode.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -470,6 +470,21 @@ MM::Paging::GetPteVirtualAddress(IN PMMPTE PtePointer)
|
|||||||
return PmlRoutines->GetPteVirtualAddress(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).
|
* Gets current status of eXtended Physical Addressing (XPA).
|
||||||
*
|
*
|
||||||
|
|||||||
Reference in New Issue
Block a user