From 217f3f66f1ecda6304bb2c59613e33d664c6419d Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sun, 12 Apr 2015 09:48:00 +0000 Subject: [PATCH] [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 --- reactos/include/ddk/wdm.h | 2 ++ reactos/include/ndk/arm/ketypes.h | 5 +++++ reactos/include/ndk/arm/mmtypes.h | 5 +++++ reactos/include/reactos/arm/armddk.h | 4 ++-- reactos/include/xdk/arm/ke.h | 2 ++ reactos/ntoskrnl/include/internal/arm/mm.h | 16 ++++++++++------ reactos/ntoskrnl/mm/ARM3/miarm.h | 10 ++++++++++ 7 files changed, 36 insertions(+), 8 deletions(-) diff --git a/reactos/include/ddk/wdm.h b/reactos/include/ddk/wdm.h index e34251c65d7..f99b7f7d981 100644 --- a/reactos/include/ddk/wdm.h +++ b/reactos/include/ddk/wdm.h @@ -8554,6 +8554,8 @@ KeRaiseIrqlToSynchLevel(VOID); #elif defined(_M_ARM) #include + +#define KeMemoryBarrierWithoutFence() _ReadWriteBarrier() #else #error Unknown Architecture #endif diff --git a/reactos/include/ndk/arm/ketypes.h b/reactos/include/ndk/arm/ketypes.h index 9ecdd43fd92..013521eda07 100644 --- a/reactos/include/ndk/arm/ketypes.h +++ b/reactos/include/ndk/arm/ketypes.h @@ -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 // diff --git a/reactos/include/ndk/arm/mmtypes.h b/reactos/include/ndk/arm/mmtypes.h index 75cae06501c..709dcacd78d 100644 --- a/reactos/include/ndk/arm/mmtypes.h +++ b/reactos/include/ndk/arm/mmtypes.h @@ -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 // diff --git a/reactos/include/reactos/arm/armddk.h b/reactos/include/reactos/arm/armddk.h index 716213113c3..a8992f49523 100644 --- a/reactos/include/reactos/arm/armddk.h +++ b/reactos/include/reactos/arm/armddk.h @@ -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 diff --git a/reactos/include/xdk/arm/ke.h b/reactos/include/xdk/arm/ke.h index 372e5658328..e25460210dc 100644 --- a/reactos/include/xdk/arm/ke.h +++ b/reactos/include/xdk/arm/ke.h @@ -1,3 +1,5 @@ $if (_WDMDDK_) #include $endif + +#define KeMemoryBarrierWithoutFence() _ReadWriteBarrier() diff --git a/reactos/ntoskrnl/include/internal/arm/mm.h b/reactos/ntoskrnl/include/internal/arm/mm.h index b73179c6359..0bc642bd4e6 100644 --- a/reactos/ntoskrnl/include/internal/arm/mm.h +++ b/reactos/ntoskrnl/include/internal/arm/mm.h @@ -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 diff --git a/reactos/ntoskrnl/mm/ARM3/miarm.h b/reactos/ntoskrnl/mm/ARM3/miarm.h index 8b62f1c4e4c..45da2a2f88a 100644 --- a/reactos/ntoskrnl/mm/ARM3/miarm.h +++ b/reactos/ntoskrnl/mm/ARM3/miarm.h @@ -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;