diff --git a/reactos/boot/freeldr/freeldr/arch/arm/loader.c b/reactos/boot/freeldr/freeldr/arch/arm/loader.c index cb7380b1212..1d1a97be655 100644 --- a/reactos/boot/freeldr/freeldr/arch/arm/loader.c +++ b/reactos/boot/freeldr/freeldr/arch/arm/loader.c @@ -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 diff --git a/reactos/boot/freeldr/freeldr/reactos/imageldr.c b/reactos/boot/freeldr/freeldr/reactos/imageldr.c index 97a0017f22c..c6a1c24605a 100644 --- a/reactos/boot/freeldr/freeldr/reactos/imageldr.c +++ b/reactos/boot/freeldr/freeldr/reactos/imageldr.c @@ -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); diff --git a/reactos/hal/halarm/generic/hal.c b/reactos/hal/halarm/generic/hal.c index 06adcb7d211..30d76869a25 100644 --- a/reactos/hal/halarm/generic/hal.c +++ b/reactos/hal/halarm/generic/hal.c @@ -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 diff --git a/reactos/include/ddk/winddk.h b/reactos/include/ddk/winddk.h index 9b1aabff050..92be1a8a424 100644 --- a/reactos/include/ddk/winddk.h +++ b/reactos/include/ddk/winddk.h @@ -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 diff --git a/reactos/include/ndk/ketypes.h b/reactos/include/ndk/ketypes.h index dea06dbf69b..ea91b01da36 100644 --- a/reactos/include/ndk/ketypes.h +++ b/reactos/include/ndk/ketypes.h @@ -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 // diff --git a/reactos/include/reactos/armddk.h b/reactos/include/reactos/armddk.h index 165120761c5..a5b2d3321be 100644 --- a/reactos/include/reactos/armddk.h +++ b/reactos/include/reactos/armddk.h @@ -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 diff --git a/reactos/ntoskrnl/include/internal/ke_x.h b/reactos/ntoskrnl/include/internal/ke_x.h index 044724ceae6..65984ff0609 100644 --- a/reactos/ntoskrnl/include/internal/ke_x.h +++ b/reactos/ntoskrnl/include/internal/ke_x.h @@ -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