mirror of
https://github.com/reactos/reactos.git
synced 2024-08-01 17:11:35 +00:00
- fix InterlockedExchangeAddSizeT
- fix __writecrx instrinsics - fix some mmtypes svn path=/branches/ros-amd64-bringup/; revision=34925
This commit is contained in:
parent
57fe9d163d
commit
98797fa1bf
|
@ -5772,7 +5772,7 @@ InterlockedExchangeAdd(
|
||||||
|
|
||||||
#if defined (_M_AMD64)
|
#if defined (_M_AMD64)
|
||||||
|
|
||||||
#define InterlockedExchangeAddSizeT(a, b) InterlockedExchangeAdd64((LONG *)a, b)
|
#define InterlockedExchangeAddSizeT(a, b) InterlockedExchangeAdd64((LONGLONG *)a, (LONGLONG)b)
|
||||||
#define InterlockedIncrementSizeT(a) InterlockedIncrement64((LONGLONG *)a)
|
#define InterlockedIncrementSizeT(a) InterlockedIncrement64((LONGLONG *)a)
|
||||||
#define InterlockedDecrementSizeT(a) InterlockedDecrement64((LONGLONG *)a)
|
#define InterlockedDecrementSizeT(a) InterlockedDecrement64((LONGLONG *)a)
|
||||||
#define InterlockedAnd _InterlockedAnd
|
#define InterlockedAnd _InterlockedAnd
|
||||||
|
|
|
@ -1,18 +1,20 @@
|
||||||
/*++ NDK Version: 0095
|
/*++ NDK Version: 0095
|
||||||
|
|
||||||
Copyright (c) Alex Ionescu. All rights reserved.
|
Copyright (c) Alex Ionescu. All rights reserved.
|
||||||
|
Copyright (c) Timo Kreuzer All rights reserved.
|
||||||
|
|
||||||
Header Name:
|
Header Name:
|
||||||
|
|
||||||
mmtypes.h (X86)
|
mmtypes.h (AMD64)
|
||||||
|
|
||||||
Abstract:
|
Abstract:
|
||||||
|
|
||||||
i386 Type definitions for the Memory Manager
|
AMD64 Type definitions for the Memory Manager
|
||||||
|
|
||||||
Author:
|
Author:
|
||||||
|
|
||||||
Alex Ionescu (alex.ionescu@reactos.com) 06-Oct-2004
|
Alex Ionescu (alex.ionescu@reactos.com) 06-Oct-2004
|
||||||
|
Timo Kreuzer (timo.kreuzer@reactos.com) 29-Jul-2008
|
||||||
|
|
||||||
--*/
|
--*/
|
||||||
|
|
||||||
|
@ -42,30 +44,27 @@ C_ASSERT(MM_ALLOCATION_GRANULARITY &&
|
||||||
C_ASSERT(MM_ALLOCATION_GRANULARITY >= PAGE_SIZE);
|
C_ASSERT(MM_ALLOCATION_GRANULARITY >= PAGE_SIZE);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//
|
|
||||||
// PAE SEG0 Base?
|
|
||||||
//
|
|
||||||
#define KSEG0_BASE_PAE 0xE0000000
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Page Table Entry Definitions
|
// Page Table Entry Definitions
|
||||||
//
|
//
|
||||||
typedef struct _HARDWARE_PTE_X86
|
typedef struct _HARDWARE_PTE_AMD64
|
||||||
{
|
{
|
||||||
ULONG Valid:1;
|
ULONGLONG Valid:1;
|
||||||
ULONG Write:1;
|
ULONGLONG Write:1;
|
||||||
ULONG Owner:1;
|
ULONGLONG Owner:1;
|
||||||
ULONG WriteThrough:1;
|
ULONGLONG WriteThrough:1;
|
||||||
ULONG CacheDisable:1;
|
ULONGLONG CacheDisable:1;
|
||||||
ULONG Accessed:1;
|
ULONGLONG Accessed:1;
|
||||||
ULONG Dirty:1;
|
ULONGLONG Dirty:1;
|
||||||
ULONG LargePage:1;
|
ULONGLONG LargePage:1;
|
||||||
ULONG Global:1;
|
ULONGLONG Global:1;
|
||||||
ULONG CopyOnWrite:1;
|
ULONGLONG CopyOnWrite:1;
|
||||||
ULONG Prototype: 1;
|
ULONGLONG Prototype: 1;
|
||||||
ULONG reserved: 1;
|
ULONGLONG reserved1: 1;
|
||||||
ULONG PageFrameNumber:20;
|
ULONGLONG PageFrameNumber:40;
|
||||||
} HARDWARE_PTE_X86, *PHARDWARE_PTE_X86;
|
ULONGLONG reserved2:11;
|
||||||
|
ULONGLONG NoExecute:1;
|
||||||
|
} HARDWARE_PTE_AMD64, *PHARDWARE_PTE_AMD64;
|
||||||
|
|
||||||
typedef struct _MMPTE_SOFTWARE
|
typedef struct _MMPTE_SOFTWARE
|
||||||
{
|
{
|
||||||
|
@ -124,46 +123,33 @@ typedef struct _MMPTE_LIST
|
||||||
|
|
||||||
typedef struct _MMPTE_HARDWARE
|
typedef struct _MMPTE_HARDWARE
|
||||||
{
|
{
|
||||||
ULONG Valid:1;
|
ULONGLONG Valid:1;
|
||||||
ULONG Write:1;
|
ULONGLONG Write:1;
|
||||||
ULONG Owner:1;
|
ULONGLONG Owner:1;
|
||||||
ULONG WriteThrough:1;
|
ULONGLONG WriteThrough:1;
|
||||||
ULONG CacheDisable:1;
|
ULONGLONG CacheDisable:1;
|
||||||
ULONG Accessed:1;
|
ULONGLONG Accessed:1;
|
||||||
ULONG Dirty:1;
|
ULONGLONG Dirty:1;
|
||||||
ULONG LargePage:1;
|
ULONGLONG LargePage:1;
|
||||||
ULONG Global:1;
|
ULONGLONG Global:1;
|
||||||
ULONG CopyOnWrite:1;
|
ULONGLONG CopyOnWrite:1;
|
||||||
ULONG Prototype:1;
|
ULONGLONG Prototype: 1;
|
||||||
ULONG reserved:1;
|
ULONGLONG reserved1: 1;
|
||||||
ULONG PageFrameNumber:20;
|
ULONGLONG PageFrameNumber:40;
|
||||||
|
ULONGLONG reserved2:11;
|
||||||
|
ULONGLONG NoExecute:1;
|
||||||
} MMPTE_HARDWARE, *PMMPTE_HARDWARE;
|
} MMPTE_HARDWARE, *PMMPTE_HARDWARE;
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
typedef struct _MMPTE_HARDWARE
|
#error MMPTE_HARDWARE undeclared
|
||||||
{
|
|
||||||
ULONG Valid:1;
|
|
||||||
ULONG Writable:1;
|
|
||||||
ULONG Owner:1;
|
|
||||||
ULONG WriteThrough:1;
|
|
||||||
ULONG CacheDisable:1;
|
|
||||||
ULONG Accessed:1;
|
|
||||||
ULONG Dirty:1;
|
|
||||||
ULONG LargePage:1;
|
|
||||||
ULONG Global:1;
|
|
||||||
ULONG CopyOnWrite:1;
|
|
||||||
ULONG Prototype:1;
|
|
||||||
ULONG Write:1;
|
|
||||||
ULONG PageFrameNumber:20;
|
|
||||||
} MMPTE_HARDWARE, *PMMPTE_HARDWARE;
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//
|
//
|
||||||
// Use the right PTE structure
|
// Use the right PTE structure
|
||||||
//
|
//
|
||||||
#define HARDWARE_PTE HARDWARE_PTE_X86
|
#define HARDWARE_PTE HARDWARE_PTE_AMD64
|
||||||
#define PHARDWARE_PTE PHARDWARE_PTE_X86
|
#define PHARDWARE_PTE PHARDWARE_PTE_AMD64
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -22,12 +22,14 @@ Author:
|
||||||
//
|
//
|
||||||
// Include the right file for this architecture.
|
// Include the right file for this architecture.
|
||||||
//
|
//
|
||||||
#if defined(_M_IX86) || defined(_M_AMD64)
|
#if defined(_M_IX86)
|
||||||
#include <i386/mmtypes.h>
|
#include <i386/mmtypes.h>
|
||||||
#elif defined(_M_PPC)
|
#elif defined(_M_PPC)
|
||||||
#include <powerpc/mmtypes.h>
|
#include <powerpc/mmtypes.h>
|
||||||
#elif defined(_M_ARM)
|
#elif defined(_M_ARM)
|
||||||
#include <arm/mmtypes.h>
|
#include <arm/mmtypes.h>
|
||||||
|
#elif defined(_M_AMD64)
|
||||||
|
#include <amd64/mmtypes.h>
|
||||||
#else
|
#else
|
||||||
#error "Unknown processor"
|
#error "Unknown processor"
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -1078,6 +1078,22 @@ static __inline__ __attribute__((always_inline)) unsigned long __readcr4(void)
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef _M_AMD64
|
||||||
|
static __inline__ __attribute__((always_inline)) void __writecr0(const unsigned long long Data)
|
||||||
|
{
|
||||||
|
__asm__("movq %q[Data], %%cr0" : : [Data] "q" (Data) : "memory");
|
||||||
|
}
|
||||||
|
|
||||||
|
static __inline__ __attribute__((always_inline)) void __writecr3(const unsigned long long Data)
|
||||||
|
{
|
||||||
|
__asm__("movq %q[Data], %%cr3" : : [Data] "q" (Data) : "memory");
|
||||||
|
}
|
||||||
|
|
||||||
|
static __inline__ __attribute__((always_inline)) void __writecr4(const unsigned long long Data)
|
||||||
|
{
|
||||||
|
__asm__("movq %q[Data], %%cr4" : : [Data] "q" (Data) : "memory");
|
||||||
|
}
|
||||||
|
#else
|
||||||
static __inline__ __attribute__((always_inline)) void __writecr0(const unsigned long long Data)
|
static __inline__ __attribute__((always_inline)) void __writecr0(const unsigned long long Data)
|
||||||
{
|
{
|
||||||
__asm__("mov %[Data], %%cr0" : : [Data] "q" ((const unsigned long)(Data & 0xFFFFFFFF)) : "memory");
|
__asm__("mov %[Data], %%cr0" : : [Data] "q" ((const unsigned long)(Data & 0xFFFFFFFF)) : "memory");
|
||||||
|
@ -1092,6 +1108,7 @@ static __inline__ __attribute__((always_inline)) void __writecr4(const unsigned
|
||||||
{
|
{
|
||||||
__asm__("mov %[Data], %%cr4" : : [Data] "q" ((const unsigned long)(Data & 0xFFFFFFFF)) : "memory");
|
__asm__("mov %[Data], %%cr4" : : [Data] "q" ((const unsigned long)(Data & 0xFFFFFFFF)) : "memory");
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static __inline__ __attribute__((always_inline)) void __invlpg(void * const Address)
|
static __inline__ __attribute__((always_inline)) void __invlpg(void * const Address)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue