mirror of
https://github.com/reactos/reactos.git
synced 2025-07-24 17:24:01 +00:00
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:
parent
9d172977d3
commit
34e64ee87b
7 changed files with 55 additions and 36 deletions
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
//
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue