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 ROS_KERNEL_ENTRY_POINT KernelEntryPoint;
extern ULONG_PTR KernelBase;
extern ULONG_PTR AnsiData, OemData, UnicodeData;
extern ULONG_PTR AnsiData, OemData, UnicodeData, RegistryData;
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

View file

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

View file

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

View file

@ -5459,6 +5459,20 @@ KeGetCurrentProcessorNumber(VOID)
#error Unknown compiler
#endif
}
NTHALAPI
KIRQL
DDKAPI
KeGetCurrentIrql(
VOID);
NTKERNELAPI
PRKTHREAD
NTAPI
KeGetCurrentThread(
VOID);
#define KI_USER_SHARED_DATA 0xffdf0000
#elif defined(__x86_64__)
@ -5580,6 +5594,8 @@ KeGetCurrentProcessorNumber(VOID)
#define PAGE_SIZE 0x1000
#define PAGE_SHIFT 12L
#define SharedUserData ((KUSER_SHARED_DATA * CONST) KI_USER_SHARED_DATA)
extern NTKERNELAPI PVOID MmHighestUserAddress;
extern NTKERNELAPI PVOID MmSystemRangeStart;
extern NTKERNELAPI ULONG_PTR MmUserProbeAddress;
@ -5593,8 +5609,6 @@ extern NTKERNELAPI ULONG_PTR MmUserProbeAddress;
#define MM_KSEG0_BASE MM_SYSTEM_RANGE_START
#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_ZERO 0x4000
@ -5651,11 +5665,7 @@ typedef struct _PCIBUSDATA
PVOID Reserved[4];
} PCIBUSDATA, *PPCIBUSDATA;
NTHALAPI
KIRQL
DDKAPI
KeGetCurrentIrql(
VOID);
#if !defined(__INTERLOCKED_DECLARED)
#define __INTERLOCKED_DECLARED
@ -9087,12 +9097,6 @@ VOID
NTAPI
KeFlushWriteBuffer(VOID);
NTKERNELAPI
PRKTHREAD
NTAPI
KeGetCurrentThread(
VOID);
NTKERNELAPI
ULONG
NTAPI

View file

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

View file

@ -18,6 +18,7 @@
// FIXME: mmtypes.h?
//
#define KIPCR 0xFFFFF000
#define KI_USER_SHARED_DATA 0xFFFFE000
#define USPCR 0x7FFF0000
#define PCR ((volatile KPCR * const)USPCR)
#define USERPCR ((volatile KPCR * const)KIPCR)
@ -30,7 +31,12 @@
//
// 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

View file

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