t's a bit embarrasing that some of this was undone until recently, but we now
[reactos.git] / reactos / ntoskrnl / ke / powerpc / kiinit.c
index cec9806..22fdaed 100644 (file)
 /* INCLUDES *****************************************************************/\r
 \r
 #include <ntoskrnl.h>\r
-#include <reactos/ppcboot.h>\r
 \r
 #define NDEBUG\r
 #include <debug.h>\r
-#include <ppcdebug.h>\r
 #include "ppcmmu/mmu.h"\r
 \r
 /* GLOBALS *******************************************************************/\r
@@ -27,6 +25,9 @@ extern LOADER_MODULE KeLoaderModules[64];
 extern ULONG KeLoaderModuleCount;\r
 extern ULONG_PTR MmFreeLdrLastKernelAddress;\r
 KPRCB PrcbData[MAXIMUM_PROCESSORS];\r
+/* BIOS Memory Map. Not NTLDR-compliant yet */\r
+extern ULONG KeMemoryMapRangeCount;\r
+extern ADDRESS_RANGE KeMemoryMap[64];\r
 \r
 /* FUNCTIONS *****************************************************************/\r
 \r
@@ -124,17 +125,11 @@ KiInitializeKernel(IN PKPROCESS InitProcess,
                    IN PVOID IdleStack,\r
                    IN PKPRCB Prcb,\r
                    IN CCHAR Number,\r
-                   IN PROS_LOADER_PARAMETER_BLOCK LoaderBlock)\r
+                   IN PLOADER_PARAMETER_BLOCK LoaderBlock)\r
 {\r
     ULONG FeatureBits;\r
     LARGE_INTEGER PageDirectory;\r
     PVOID DpcStack;\r
-    boot_infos_t *BootInfo = ((boot_infos_t *)LoaderBlock->ArchExtra);\r
-\r
-#ifdef _M_PPC\r
-    /* Set the machine type in LoaderBlock for HAL */\r
-    KeLoaderBlock->u.PowerPC.MachineType = BootInfo->machineType;\r
-#endif\r
 \r
     /* Detect and set the CPU Type */\r
     KiSetProcessorType();\r
@@ -207,28 +202,44 @@ KiInitializeKernel(IN PKPROCESS InitProcess,
     InitThread->Affinity = 1 << Number;\r
     InitThread->WaitIrql = DISPATCH_LEVEL;\r
     InitProcess->ActiveProcessors = 1 << Number;\r
+    \r
+    /* HACK for MmUpdatePageDir */\r
+    ((PETHREAD)InitThread)->ThreadsProcess = (PEPROCESS)InitProcess;\r
 \r
     /* Set up the thread-related fields in the PRCB */\r
-    //Prcb->CurrentThread = InitThread;\r
+    Prcb->CurrentThread = InitThread;\r
     Prcb->NextThread = NULL;\r
-    //Prcb->IdleThread = InitThread;\r
+    Prcb->IdleThread = InitThread;\r
 \r
+    /* Initialize Kernel Memory Address Space */\r
+    MmInit1(MmFreeLdrFirstKrnlPhysAddr,\r
+            MmFreeLdrLastKrnlPhysAddr,\r
+            MmFreeLdrLastKernelAddress,\r
+            KeMemoryMap,\r
+            KeMemoryMapRangeCount,\r
+            4096);\r
+\r
+    DPRINT1("\n");\r
     /* Initialize the Kernel Executive */\r
-    ExpInitializeExecutive(0, (PLOADER_PARAMETER_BLOCK)LoaderBlock);\r
+    ExpInitializeExecutive(0, LoaderBlock);\r
 \r
+    DPRINT1("\n");\r
     /* Only do this on the boot CPU */\r
     if (!Number)\r
     {\r
+        DPRINT1("\n");\r
         /* Calculate the time reciprocal */\r
         KiTimeIncrementReciprocal =\r
             KiComputeReciprocal(KeMaximumIncrement,\r
                                 &KiTimeIncrementShiftCount);\r
 \r
+        DPRINT1("\n");\r
         /* Update DPC Values in case they got updated by the executive */\r
         Prcb->MaximumDpcQueueDepth = KiMaximumDpcQueueDepth;\r
         Prcb->MinimumDpcRate = KiMinimumDpcRate;\r
         Prcb->AdjustDpcThreshold = KiAdjustDpcThreshold;\r
 \r
+        DPRINT1("\n");\r
         /* Allocate the DPC Stack */\r
         DpcStack = MmCreateKernelStack(FALSE, 0);\r
         if (!DpcStack) KeBugCheckEx(NO_PAGES_AVAILABLE, 1, 0, 0, 0);\r
@@ -238,13 +249,16 @@ KiInitializeKernel(IN PKPROCESS InitProcess,
     /* Free Initial Memory */\r
     // MiFreeInitMemory();\r
 \r
+    DPRINT1("\n");\r
     /* Setup decrementer exception */\r
     KiSetupDecrementerTrap();\r
 \r
+    DPRINT1("\n");\r
     while (1)\r
     {\r
         LARGE_INTEGER Timeout;\r
         Timeout.QuadPart = 0x7fffffffffffffffLL;\r
+        DPRINT1("\n");\r
         KeDelayExecutionThread(KernelMode, FALSE, &Timeout);\r
     }\r
 }\r
@@ -299,7 +313,7 @@ KiSystemStartup(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
 \r
     /* Skip initial setup if this isn't the Boot CPU */\r
     if (Cpu) goto AppCpuInit;\r
-\r
+    \r
     /* Initialize the PCR */\r
     RtlZeroMemory(Pcr, PAGE_SIZE);\r
     KiInitializePcr(Cpu,\r