From b0c939bf1314ce508276c786ee26b944bb93aadd Mon Sep 17 00:00:00 2001 From: Hartmut Birr Date: Sat, 16 Jul 2005 13:01:18 +0000 Subject: [PATCH] Used the kernel base address from the loader structure instead MmSystemRangeStart. MmSystemRangeStart isn't the base address with the 3GB switch. svn path=/trunk/; revision=16597 --- reactos/hal/halx86/generic/halinit.c | 2 +- reactos/hal/halx86/include/halp.h | 2 +- reactos/hal/halx86/mp/apic.c | 4 +++- reactos/hal/halx86/mp/halinit_mp.c | 9 +++++++-- reactos/hal/halx86/up/halinit_up.c | 2 +- reactos/hal/halx86/xbox/halinit_xbox.c | 2 +- 6 files changed, 14 insertions(+), 7 deletions(-) diff --git a/reactos/hal/halx86/generic/halinit.c b/reactos/hal/halx86/generic/halinit.c index 64c85798174..dfebdd72719 100644 --- a/reactos/hal/halx86/generic/halinit.c +++ b/reactos/hal/halx86/generic/halinit.c @@ -38,7 +38,7 @@ HalInitSystem (ULONG BootPhase, if (BootPhase == 0) { RtlZeroMemory(&HalpHooks, sizeof(HALP_HOOKS)); - HalpInitPhase0(); + HalpInitPhase0(LoaderBlock); } else if (BootPhase == 1) { diff --git a/reactos/hal/halx86/include/halp.h b/reactos/hal/halx86/include/halp.h index 4aa39b2d8cf..2e5c168d83d 100644 --- a/reactos/hal/halx86/include/halp.h +++ b/reactos/hal/halx86/include/halp.h @@ -38,7 +38,7 @@ VOID HalpInitDma (VOID); PVOID HalpMapPhysMemory(ULONG PhysAddr, ULONG Size); /* Non-generic initialization */ -VOID HalpInitPhase0 (VOID); +VOID HalpInitPhase0 (PLOADER_PARAMETER_BLOCK LoaderBlock); /* DMA Page Register Structure 080 DMA RESERVED diff --git a/reactos/hal/halx86/mp/apic.c b/reactos/hal/halx86/mp/apic.c index 3f6b14e0cde..21e9ef4651e 100644 --- a/reactos/hal/halx86/mp/apic.c +++ b/reactos/hal/halx86/mp/apic.c @@ -83,6 +83,8 @@ CHAR *APstart, *APend; WRITE_PORT_UCHAR((PUCHAR)0x71, value); \ }) +extern ULONG_PTR KernelBase; + /* FUNCTIONS *********************************************************************/ extern ULONG Read8254Timer(VOID); @@ -1035,7 +1037,7 @@ HaliStartApplicationProcessor(ULONG Cpu, ULONG Stack) /* Write the page directory page */ Ke386GetPageTableDirectory(Common->PageDirectory); /* Write the kernel entry point */ - Common->NtProcessStartup = (ULONG_PTR)RtlImageNtHeader(MmSystemRangeStart)->OptionalHeader.AddressOfEntryPoint + (ULONG_PTR)MmSystemRangeStart; + Common->NtProcessStartup = (ULONG_PTR)RtlImageNtHeader((PVOID)KernelBase)->OptionalHeader.AddressOfEntryPoint + KernelBase; /* Write the state of the mae mode */ Common->PaeModeEnabled = Ke386GetCr4() & X86_CR4_PAE ? 1 : 0; diff --git a/reactos/hal/halx86/mp/halinit_mp.c b/reactos/hal/halx86/mp/halinit_mp.c index 87871bbedeb..a7b6bbda77b 100644 --- a/reactos/hal/halx86/mp/halinit_mp.c +++ b/reactos/hal/halx86/mp/halinit_mp.c @@ -18,10 +18,11 @@ /* FUNCTIONS ***************************************************************/ extern BOOLEAN HaliFindSmpConfig(VOID); +ULONG_PTR KernelBase; /***************************************************************************/ VOID -HalpInitPhase0(VOID) +HalpInitPhase0(PLOADER_PARAMETER_BLOCK LoaderBlock) { static BOOLEAN MPSInitialized = FALSE; @@ -29,7 +30,7 @@ HalpInitPhase0(VOID) /* Only initialize MP system once. Once called the first time, each subsequent call is part of the initialization sequence - for an application processor. */ + for an application processor. */ DPRINT("HalpInitPhase0()\n"); @@ -45,6 +46,10 @@ HalpInitPhase0(VOID) { KEBUGCHECK(0); } + + /* store the kernel base for later use */ + KernelBase = ((PLOADER_MODULE)LoaderBlock->ModsAddr)[0].ModStart; + } /* EOF */ diff --git a/reactos/hal/halx86/up/halinit_up.c b/reactos/hal/halx86/up/halinit_up.c index 3ad08c1fbd9..f5dfc25eaba 100644 --- a/reactos/hal/halx86/up/halinit_up.c +++ b/reactos/hal/halx86/up/halinit_up.c @@ -18,7 +18,7 @@ /* FUNCTIONS ***************************************************************/ VOID -HalpInitPhase0(VOID) +HalpInitPhase0(PLOADER_PARAMETER_BLOCK LoaderBlock) { HalpInitPICs(); diff --git a/reactos/hal/halx86/xbox/halinit_xbox.c b/reactos/hal/halx86/xbox/halinit_xbox.c index e7720e294e1..34d9b86c08a 100644 --- a/reactos/hal/halx86/xbox/halinit_xbox.c +++ b/reactos/hal/halx86/xbox/halinit_xbox.c @@ -22,7 +22,7 @@ /* FUNCTIONS ***************************************************************/ VOID -HalpInitPhase0(VOID) +HalpInitPhase0(PLOADER_PARAMETER_BLOCK LoaderBlock) { HalpHooks.InitPciBus = HalpXboxInitPciBus;