[INCLUDE]

- Add missing KeMemoryBarrierWithoutFence, NUMBER_POOL_LOOKASIDE_LISTS, MM_SHARED_USER_DATA_VA, MM_EMPTY_PTE_LIST, MM_EMPTY_LIST, P*E_PER_PAGE, SESSION_POOL_LOOKASIDES, MiPdeToPte for ARM
- Fix KI_USER_SHARED_DATA for ARM based on native DDK

svn path=/trunk/; revision=67168
This commit is contained in:
Timo Kreuzer 2015-04-12 09:48:00 +00:00
parent aec53ac1d0
commit 217f3f66f1
7 changed files with 36 additions and 8 deletions

View file

@ -8554,6 +8554,8 @@ KeRaiseIrqlToSynchLevel(VOID);
#elif defined(_M_ARM)
#include <armddk.h>
#define KeMemoryBarrierWithoutFence() _ReadWriteBarrier()
#else
#error Unknown Architecture
#endif

View file

@ -81,6 +81,11 @@ extern "C" {
//
#define KSEG0_BASE 0x80000000
//
// Number of pool lookaside lists per pool in the PRCB
//
#define NUMBER_POOL_LOOKASIDE_LISTS 32
//
// Trap Frame Definition
//

View file

@ -43,6 +43,11 @@ extern "C" {
//
#define MI_HIGHEST_USER_ADDRESS (PVOID)0x7FFEFFFF
//
// Address of the shared user page
//
#define MM_SHARED_USER_DATA_VA 0x7FFE0000
//
// Sanity checks for Paging Macros
//

View file

@ -29,7 +29,7 @@
// FIXME: mmtypes.h?
//
#define KIP0PCRADDRESS 0xFFDFF000
#define KI_USER_SHARED_DATA 0xFFDF0000
#define KI_USER_SHARED_DATA 0xFFFF9000
#define USPCR 0x7FFF0000
#define PCR ((KPCR * const)KIP0PCRADDRESS)
#define USERPCR ((volatile KPCR * const)USPCR)
@ -246,7 +246,7 @@ extern volatile struct _KSYSTEM_TIME KeTickCount;
#define ASSERT_BREAKPOINT BREAKPOINT_COMMAND_STRING + 1
#define DbgRaiseAssertionFailure() __break(ASSERT_BREAKPOINT)
#define DbgRaiseAssertionFailure() __emit(0xdefc)
#define PCR_MINOR_VERSION 1
#define PCR_MAJOR_VERSION 1

View file

@ -1,3 +1,5 @@
$if (_WDMDDK_)
#include <armddk.h>
$endif
#define KeMemoryBarrierWithoutFence() _ReadWriteBarrier()

View file

@ -16,6 +16,10 @@
#define CPT_SHIFT 10
#define CPT_SIZE (1 << CPT_SHIFT)
/* MMPTE related defines */
#define MM_EMPTY_PTE_LIST ((ULONG)0xFFFFF)
#define MM_EMPTY_LIST ((ULONG_PTR)-1)
//
// Base Addresses
//
@ -86,7 +90,7 @@ typedef struct _PAGE_TABLE_ARM
typedef struct _PAGE_DIRECTORY_ARM
{
union
union
{
HARDWARE_PDE_ARMV6 Pde[4096];
HARDWARE_LARGE_PTE_ARMV6 Pte[4096];
@ -108,8 +112,8 @@ struct _EPROCESS;
PULONG MmGetPageDirectory(VOID);
#define MI_MAKE_LOCAL_PAGE(x) ((x)->u.Hard.NonGlobal = 1)
#define MI_MAKE_DIRTY_PAGE(x)
#define MI_MAKE_ACCESSED_PAGE(x)
#define MI_MAKE_DIRTY_PAGE(x)
#define MI_MAKE_ACCESSED_PAGE(x)
#define MI_MAKE_OWNER_PAGE(x) ((x)->u.Hard.Owner = 1)
#define MI_MAKE_WRITE_PAGE(x) ((x)->u.Hard.ReadOnly = 0)
#define MI_PAGE_DISABLE_CACHE(x) ((x)->u.Hard.Cached = 0)
@ -144,7 +148,7 @@ PULONG MmGetPageDirectory(VOID);
/* Retrives the PDE entry for the given VA */
#define MiGetPdeAddress(x) ((PMMPDE)(PDE_BASE + (((ULONG)(x) >> 20) << 2)))
#define MiAddressToPde(x) MiGetPdeAddress(x)
/* Retrieves the PTE entry for the given VA */
#define MiGetPteAddress(x) ((PMMPTE)(PTE_BASE + (((ULONG)(x) >> 12) << 2)))
#define MiAddressToPte(x) MiGetPteAddress(x)
@ -153,7 +157,7 @@ PULONG MmGetPageDirectory(VOID);
#define MiGetPdeOffset(x) (((ULONG)(x)) >> 20)
#define MiGetPteOffset(x) ((((ULONG)(x)) << 12) >> 24)
#define MiAddressToPteOffset(x) MiGetPteOffset(x)
/* Convert a PTE into a corresponding address */
#define MiPteToAddress(x) ((PVOID)((ULONG)(x) << 10))
#define MiPdeToAddress(x) ((PVOID)((ULONG)(x) << 18))
@ -163,5 +167,5 @@ PULONG MmGetPageDirectory(VOID);
#define PAGE_TO_SECTION_PAGE_TABLE_OFFSET(x) \
((((x)) % (4*1024*1024)) / (4*1024))
#define MM_CACHE_LINE_SIZE 64

View file

@ -84,6 +84,9 @@ C_ASSERT(SYSTEM_PD_SIZE == PAGE_SIZE);
#define MiIsPteOnPdeBoundary(PointerPte) \
((((ULONG_PTR)PointerPte) & (PAGE_SIZE - 1)) == 0)
#elif _M_ARM
#define PPE_PER_PAGE 1
#define PDE_PER_PAGE 4096
#define PTE_PER_PAGE 256
#define PD_COUNT 1
#define PDE_COUNT 4096
#define PTE_COUNT 256
@ -311,6 +314,8 @@ extern const ULONG MmProtectToValue[32];
#define SESSION_POOL_LOOKASIDES 21
#elif defined(_M_IX86)
#define SESSION_POOL_LOOKASIDES 26
#elif defined(_M_ARM)
#define SESSION_POOL_LOOKASIDES 26 // CHECKME
#else
#error Not Defined!
#endif
@ -380,6 +385,11 @@ extern const ULONG MmProtectToValue[32];
#define POOL_BILLED_PROCESS_INVALID 13
#define POOL_HEADER_SIZE_INVALID 32
#ifdef _M_ARM
#define MiPdeToPte(PDE) ((PMMPTE)MiPteToAddress(PDE))
#endif
typedef struct _POOL_DESCRIPTOR
{
POOL_TYPE PoolType;