Author: sir_richard
Date: Tue Feb 9 03:08:24 2010
New Revision: 45511
URL:
http://svn.reactos.org/svn/reactos?rev=45511&view=rev
Log:
[ARMDDK]: Use the same KPCR structure on ARM as on x86.
[ARMDDK]: Use the same addresses for KPCR and KUSER_SHARED_DATA on ARM as on x86. On ARM
however, since there are no "segments", the KPCR is also mapped in user-mode,
read-only, to have a static structure that can point to the current TEB.
Modified:
trunk/reactos/include/reactos/arm/armddk.h
Modified: trunk/reactos/include/reactos/arm/armddk.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/include/reactos/arm/armddk…
==============================================================================
--- trunk/reactos/include/reactos/arm/armddk.h [iso-8859-1] (original)
+++ trunk/reactos/include/reactos/arm/armddk.h [iso-8859-1] Tue Feb 9 03:08:24 2010
@@ -28,10 +28,10 @@
//
// FIXME: mmtypes.h?
//
-#define KIPCR 0xFFFFF000
-#define KI_USER_SHARED_DATA 0xFFFFE000
+#define KIP0PCRADDRESS 0xFFDFF000
+#define KI_USER_SHARED_DATA 0xFFDF0000
#define USPCR 0x7FFF0000
-#define PCR ((volatile KPCR * const)KIPCR)
+#define PCR ((KPCR * const)KIP0PCRADDRESS)
#define USERPCR ((volatile KPCR * const)USPCR)
#define KeGetPcr() PCR
#ifndef _WINNT_H
@@ -47,24 +47,12 @@
#define MM_SYSTEM_RANGE_START MmSystemRangeStart
#define MM_USER_PROBE_ADDRESS MmUserProbeAddress
#define MM_LOWEST_USER_ADDRESS (PVOID)0x10000
-#define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xC1400000
+#define MM_LOWEST_SYSTEM_ADDRESS (PVOID)0xC0800000
//
// Maximum IRQs
//
#define MAXIMUM_VECTOR 16
-
-//
-// Just read it from the PCR
-//
-#define KeGetCurrentProcessorNumber() (int)PCR->Number
-#define KeGetCurrentIrql() PCR->CurrentIrql
-#define _KeGetCurrentThread() PCR->CurrentThread
-#define _KeGetPreviousMode() PCR->CurrentThread->PreviousMode
-#define _KeIsExecutingDpc() (PCR->DpcRoutineActive != 0)
-#define KeGetCurrentThread() _KeGetCurrentThread()
-#define KeGetPreviousMode() _KeGetPreviousMode()
-#define KeGetDcacheFillSize() PCR->DcacheFillSize
//
@@ -132,7 +120,6 @@
//
// Processor Control Region
-// On ARM, it's actually readable from user-mode, much like KUSER_SHARED_DATA
//
#ifdef _WINNT_H
typedef
@@ -141,60 +128,36 @@
#endif
typedef struct _KPCR
{
- ULONG MinorVersion;
- ULONG MajorVersion;
- PKINTERRUPT_ROUTINE InterruptRoutine[32];
- PVOID XcodeDispatch;
- ULONG FirstLevelDcacheSize;
- ULONG FirstLevelDcacheFillSize;
- ULONG FirstLevelIcacheSize;
- ULONG FirstLevelIcacheFillSize;
- ULONG SecondLevelDcacheSize;
- ULONG SecondLevelDcacheFillSize;
- ULONG SecondLevelIcacheSize;
- ULONG SecondLevelIcacheFillSize;
+ union
+ {
+ NT_TIB NtTib;
+ struct
+ {
+ struct _EXCEPTION_REGISTRATION_RECORD *Used_ExceptionList; // Unused
+ PVOID Used_StackBase; // Unused
+ PVOID PerfGlobalGroupMask;
+ PVOID TssCopy; // Unused
+ ULONG ContextSwitches;
+ KAFFINITY SetMemberCopy; // Unused
+ PVOID Used_Self;
+ };
+ };
+ struct _KPCR *Self;
struct _KPRCB *Prcb;
- struct _TEB *Teb;
- PVOID TlsArray;
- ULONG DcacheFillSize;
- ULONG IcacheAlignment;
- ULONG IcacheFillSize;
- ULONG ProcessorId;
- ULONG ProfileInterval;
- ULONG ProfileCount;
- ULONG StallExecutionCount;
+ KIRQL Irql;
+ ULONG IRR; // Unused
+ ULONG IrrActive; // Unused
+ ULONG IDR; // Unused
+ PVOID KdVersionBlock;
+ PVOID IDT; // Unused
+ PVOID GDT; // Unused
+ PVOID TSS; // Unused
+ USHORT MajorVersion;
+ USHORT MinorVersion;
+ KAFFINITY SetMember;
ULONG StallScaleFactor;
- CCHAR Number;
- PVOID DataBusError;
- PVOID InstructionBusError;
- ULONG CachePolicy;
- ULONG AlignedCachePolicy;
- UCHAR IrqlMask[32];
- ULONG IrqlTable[32];
- UCHAR CurrentIrql;
- KAFFINITY SetMember;
- struct _KTHREAD *CurrentThread;
- ULONG ReservedVectors;
- KAFFINITY NotMember;
- ULONG SystemReserved[6];
- ULONG DcacheAlignment;
- ULONG HalReserved[64];
- BOOLEAN FirstLevelActive;
- BOOLEAN DpcRoutineActive;
- ULONG CurrentPid;
- BOOLEAN OnInterruptStack;
- PVOID SavedInitialStack;
- PVOID SavedStackLimit;
- PVOID SystemServiceDispatchStart;
- PVOID SystemServiceDispatchEnd;
- PVOID InterruptStack;
- PVOID PanicStack;
- PVOID BadVaddr;
- PVOID InitialStack;
- PVOID StackLimit;
- ULONG QuantumEnd;
- PVOID PerfGlobalGroupMask;
- ULONG ContextSwitches;
+ UCHAR SpareUnused;
+ UCHAR Number;
} KPCR, *PKPCR;
//
@@ -203,7 +166,7 @@
FORCEINLINE
struct _TEB* NtCurrentTeb(VOID)
{
- return (struct _TEB*)USERPCR->Teb;
+ return (struct _TEB*)USERPCR->Used_Self;
}
#ifndef _WINNT_H