We now define KUSER_SHARED_DATA per architecture, since the address isn't portable. Now SharedUserData works on ARM.

Implemented KeAcquireInSTackQueuedSpinLock, KeAcquireInStackQueuedSpinLockRaiseToSYnc and KeReleaseInStackQueuedSpinLock based on x86 UP versions.
On ARM, the PCR is fully exposed, so some APIs are always-inlined direct-memory-access (unlike x86 which has the fs selector, and undocumented parts of the PCR). This means we can define several macros -- fixed the headers to allow this, by defining the previous stuff for x86 only.
Setup registry data in the ARM loader block.
The ARM port boots all the way through ExpInitializeExecutive until reaching MmInit1. The boot-registry is correctly loaded and parsed, as are NLS files!

svn path=/trunk/; revision=32379
This commit is contained in:
ReactOS Portable Systems Group 2008-02-15 19:01:45 +00:00
parent 9d172977d3
commit 34e64ee87b
7 changed files with 55 additions and 36 deletions

View file

@ -28,7 +28,7 @@ extern ARM_TRANSLATION_TABLE ArmTranslationTable;
extern ARM_COARSE_PAGE_TABLE BootTranslationTable, KernelTranslationTable; extern ARM_COARSE_PAGE_TABLE BootTranslationTable, KernelTranslationTable;
extern ROS_KERNEL_ENTRY_POINT KernelEntryPoint; extern ROS_KERNEL_ENTRY_POINT KernelEntryPoint;
extern ULONG_PTR KernelBase; extern ULONG_PTR KernelBase;
extern ULONG_PTR AnsiData, OemData, UnicodeData; extern ULONG_PTR AnsiData, OemData, UnicodeData, RegistryData;
ULONG SizeBits[] = ULONG SizeBits[] =
{ {
@ -290,8 +290,9 @@ ArmPrepareForReactOS(IN BOOLEAN Setup)
// //
// //
// TODO: Setup registry data // Setup registry data
// //
ArmLoaderBlock->RegistryBase = (PVOID)((ULONG_PTR)RegistryData | KSEG0_BASE);
// //
// TODO: Setup ARC Hardware tree data // TODO: Setup ARC Hardware tree data

View file

@ -16,7 +16,7 @@ LdrPEGetExportByName(
); );
extern BOOLEAN FrLdrLoadDriver(PCHAR szFileName, INT nPos); extern BOOLEAN FrLdrLoadDriver(PCHAR szFileName, INT nPos);
PVOID AnsiData, OemData, UnicodeData; PVOID AnsiData, OemData, UnicodeData, RegistryData;
/* MODULE MANAGEMENT **********************************************************/ /* MODULE MANAGEMENT **********************************************************/
PLOADER_MODULE PLOADER_MODULE
@ -110,6 +110,11 @@ FrLdrLoadModule(FILE *ModuleImage,
{ {
UnicodeData = (PVOID)NextModuleBase; UnicodeData = (PVOID)NextModuleBase;
} }
else if (!(_stricmp(NameBuffer, "system")) ||
!(_stricmp(NameBuffer, "system.hiv")))
{
RegistryData = (PVOID)NextModuleBase;
}
/* Load the file image */ /* Load the file image */
FsReadFile(ModuleImage, LocalModuleSize, NULL, (PVOID)NextModuleBase); FsReadFile(ModuleImage, LocalModuleSize, NULL, (PVOID)NextModuleBase);

View file

@ -753,33 +753,39 @@ KeAcquireSpinLockRaiseToSynch(
} }
/*
* @implemented
*/
VOID VOID
FASTCALL FASTCALL
KeAcquireInStackQueuedSpinLock( KeAcquireInStackQueuedSpinLock(IN PKSPIN_LOCK SpinLock,
IN PKSPIN_LOCK SpinLock, IN PKLOCK_QUEUE_HANDLE LockHandle)
IN PKLOCK_QUEUE_HANDLE LockHandle
)
{ {
UNIMPLEMENTED; /* Simply raise to dispatch */
LockHandle->OldIrql = KeSwapIrql(DISPATCH_LEVEL);
} }
/*
* @implemented
*/
VOID VOID
FASTCALL FASTCALL
KeAcquireInStackQueuedSpinLockRaiseToSynch( KeAcquireInStackQueuedSpinLockRaiseToSynch(IN PKSPIN_LOCK SpinLock,
IN PKSPIN_LOCK SpinLock, IN PKLOCK_QUEUE_HANDLE LockHandle)
IN PKLOCK_QUEUE_HANDLE LockHandle
)
{ {
UNIMPLEMENTED; /* Simply raise to synch */
LockHandle->OldIrql = KeSwapIrql(SYNCH_LEVEL);
} }
/*
* @implemented
*/
VOID VOID
FASTCALL FASTCALL
KeReleaseInStackQueuedSpinLock( KeReleaseInStackQueuedSpinLock(IN PKLOCK_QUEUE_HANDLE LockHandle)
IN PKLOCK_QUEUE_HANDLE LockHandle
)
{ {
UNIMPLEMENTED; /* Simply lower IRQL back */
KeSwapIrql(LockHandle->OldIrql);
} }
VOID VOID

View file

@ -5460,6 +5460,20 @@ KeGetCurrentProcessorNumber(VOID)
#endif #endif
} }
NTHALAPI
KIRQL
DDKAPI
KeGetCurrentIrql(
VOID);
NTKERNELAPI
PRKTHREAD
NTAPI
KeGetCurrentThread(
VOID);
#define KI_USER_SHARED_DATA 0xffdf0000
#elif defined(__x86_64__) #elif defined(__x86_64__)
typedef struct _KFLOATING_SAVE { typedef struct _KFLOATING_SAVE {
@ -5580,6 +5594,8 @@ KeGetCurrentProcessorNumber(VOID)
#define PAGE_SIZE 0x1000 #define PAGE_SIZE 0x1000
#define PAGE_SHIFT 12L #define PAGE_SHIFT 12L
#define SharedUserData ((KUSER_SHARED_DATA * CONST) KI_USER_SHARED_DATA)
extern NTKERNELAPI PVOID MmHighestUserAddress; extern NTKERNELAPI PVOID MmHighestUserAddress;
extern NTKERNELAPI PVOID MmSystemRangeStart; extern NTKERNELAPI PVOID MmSystemRangeStart;
extern NTKERNELAPI ULONG_PTR MmUserProbeAddress; extern NTKERNELAPI ULONG_PTR MmUserProbeAddress;
@ -5593,8 +5609,6 @@ extern NTKERNELAPI ULONG_PTR MmUserProbeAddress;
#define MM_KSEG0_BASE MM_SYSTEM_RANGE_START #define MM_KSEG0_BASE MM_SYSTEM_RANGE_START
#define MM_SYSTEM_SPACE_END 0xFFFFFFFF #define MM_SYSTEM_SPACE_END 0xFFFFFFFF
#define KI_USER_SHARED_DATA 0xffdf0000
#define SharedUserData ((KUSER_SHARED_DATA * CONST) KI_USER_SHARED_DATA)
#define EFLAG_SIGN 0x8000 #define EFLAG_SIGN 0x8000
#define EFLAG_ZERO 0x4000 #define EFLAG_ZERO 0x4000
@ -5651,11 +5665,7 @@ typedef struct _PCIBUSDATA
PVOID Reserved[4]; PVOID Reserved[4];
} PCIBUSDATA, *PPCIBUSDATA; } PCIBUSDATA, *PPCIBUSDATA;
NTHALAPI
KIRQL
DDKAPI
KeGetCurrentIrql(
VOID);
#if !defined(__INTERLOCKED_DECLARED) #if !defined(__INTERLOCKED_DECLARED)
#define __INTERLOCKED_DECLARED #define __INTERLOCKED_DECLARED
@ -9087,12 +9097,6 @@ VOID
NTAPI NTAPI
KeFlushWriteBuffer(VOID); KeFlushWriteBuffer(VOID);
NTKERNELAPI
PRKTHREAD
NTAPI
KeGetCurrentThread(
VOID);
NTKERNELAPI NTKERNELAPI
ULONG ULONG
NTAPI NTAPI

View file

@ -55,11 +55,6 @@ Author:
// //
#define THREAD_ALERT_INCREMENT 2 #define THREAD_ALERT_INCREMENT 2
//
// User Shared Data in Kernel-Mode
//
#define KI_USER_SHARED_DATA 0xffdf0000
// //
// Physical memory offset of KUSER_SHARED_DATA // Physical memory offset of KUSER_SHARED_DATA
// //

View file

@ -18,6 +18,7 @@
// FIXME: mmtypes.h? // FIXME: mmtypes.h?
// //
#define KIPCR 0xFFFFF000 #define KIPCR 0xFFFFF000
#define KI_USER_SHARED_DATA 0xFFFFE000
#define USPCR 0x7FFF0000 #define USPCR 0x7FFF0000
#define PCR ((volatile KPCR * const)USPCR) #define PCR ((volatile KPCR * const)USPCR)
#define USERPCR ((volatile KPCR * const)KIPCR) #define USERPCR ((volatile KPCR * const)KIPCR)
@ -30,7 +31,12 @@
// //
// Just read it from the PCR // Just read it from the PCR
// //
#define KeGetCurrentProcessorNumber() ((ULONG)(PCR->Number)) #define KeGetCurrentProcessorNumber() PCR->Number
#define KeGetCurrentIrql() PCR->CurrentIrql
#define _KeGetCurrentThread() PCR->CurrentThread
#define _KeGetPreviousMode() PCR->CurrentThread->PreviousMode
#define _KeIsExecutingDpc() (PCR->DpcRoutineActive != 0)
#define KeGetDcacheFillSize() PCR->DcacheFillSize
// //
// Stub // Stub

View file

@ -1526,6 +1526,7 @@ KiComputeNewPriority(IN PKTHREAD Thread,
return Priority; return Priority;
} }
#ifndef _M_ARM
PRKTHREAD PRKTHREAD
FORCEINLINE FORCEINLINE
KeGetCurrentThread(VOID) KeGetCurrentThread(VOID)
@ -1546,6 +1547,7 @@ KeGetPreviousMode(VOID)
/* Return the current mode */ /* Return the current mode */
return KeGetCurrentThread()->PreviousMode; return KeGetCurrentThread()->PreviousMode;
} }
#endif
VOID VOID
FORCEINLINE FORCEINLINE