Merge trunk r45185
[reactos.git] / reactos / ntoskrnl / ke / freeldr.c
index 7e67916..ca15338 100644 (file)
 #if defined(_PPC_)
 #include <ppcmmu/mmu.h>
 #define KERNEL_RVA(x) RVA(x,0x80800000)
-#define KERNEL_DESCRIPTOR_PAGE(x) (((ULONG_PTR)x + KernelBase) >> PAGE_SHIFT)
+#define KERNEL_DESCRIPTOR_PAGE(x) (((ULONG_PTR)(x) + KernelBase) >> PAGE_SHIFT)
 #else
 #define KERNEL_RVA(x) RVA(x,KSEG0_BASE)
-#define KERNEL_DESCRIPTOR_PAGE(x) (((ULONG_PTR)x &~ KSEG0_BASE) >> PAGE_SHIFT)
+#define KERNEL_DESCRIPTOR_PAGE(x) (((ULONG_PTR)(x) & ~KSEG0_BASE) >> PAGE_SHIFT)
 #endif
 
 typedef struct _BIOS_MEMORY_DESCRIPTOR
@@ -29,6 +29,9 @@ typedef struct _BIOS_MEMORY_DESCRIPTOR
 
 /* GLOBALS *******************************************************************/
 
+/* Function pointer for early debug prints */
+ULONG (*FrLdrDbgPrint)(const char *Format, ...);
+
 /* FreeLDR Loader Data */
 PROS_LOADER_PARAMETER_BLOCK KeRosLoaderBlock;
 ADDRESS_RANGE KeMemoryMap[64];
@@ -900,7 +903,7 @@ KiRosBuildArcMemoryList(VOID)
 VOID
 NTAPI
 KiRosFixupComponentTree(IN PCONFIGURATION_COMPONENT_DATA p,
-                        IN ULONG i)
+                        IN ULONG_PTR i)
 {
     PCONFIGURATION_COMPONENT pp;
 
@@ -974,7 +977,7 @@ KiRosFrldrLpbToNtLpb(IN PROS_LOADER_PARAMETER_BLOCK RosLoaderBlock,
     /* Build entries for ReactOS memory ranges, which uses ARC Descriptors */
     KiRosBuildOsMemoryMap();
 
-#if defined(_X86_)
+#if defined(_X86_) || defined(_M_AMD64)
     /* Build entries for the reserved map, which uses ARC Descriptors */
     KiRosBuildReservedMemoryMap();
 #endif
@@ -1199,7 +1202,7 @@ KiRosFrldrLpbToNtLpb(IN PROS_LOADER_PARAMETER_BLOCK RosLoaderBlock,
     /* Now mark the remainder of the FreeLDR 6MB area as "in use" */
     KiRosAllocateNtDescriptor(LoaderMemoryData,
                               KERNEL_DESCRIPTOR_PAGE(RosEntry->ModEnd),
-                              KERNEL_DESCRIPTOR_PAGE((0x80800000 + 0x600000)) -
+                              KERNEL_DESCRIPTOR_PAGE((RosLoaderBlock->KernelBase + 0x600000)) -
                               KERNEL_DESCRIPTOR_PAGE(RosEntry->ModEnd),
                               0,
                               &Base);
@@ -1229,6 +1232,9 @@ KiRosFrldrLpbToNtLpb(IN PROS_LOADER_PARAMETER_BLOCK RosLoaderBlock,
     LoaderBlock->Extension->MajorVersion = 5;
     LoaderBlock->Extension->MinorVersion = 2;
 
+
+// FIXME FIXME FIXME NOW!!!!
+
     /* FreeLDR hackllocates 1536 static pages for the initial boot images */
     LoaderBlock->Extension->LoaderPagesSpanned = 1536 * PAGE_SIZE;
 
@@ -1367,12 +1373,15 @@ KiRosPrepareForSystemStartup(IN PROS_LOADER_PARAMETER_BLOCK LoaderBlock)
     /* Save pointer to ROS Block */
     KeRosLoaderBlock = LoaderBlock;
 
+    /* Get debugging function */
+    FrLdrDbgPrint = LoaderBlock->FrLdrDbgPrint;
+
     /* Save memory manager data */
     KeMemoryMapRangeCount = 0;
     if (LoaderBlock->Flags & MB_FLAGS_MMAP_INFO)
     {
         /* We have a memory map from the nice BIOS */
-        ent = ((PULONG)(LoaderBlock->MmapAddr - sizeof(ULONG)));
+        ent = ((PULONG)(LoaderBlock->MmapAddr - sizeof(ULONG))); // FIXME: this is ugly
         size = *ent;
         i = 0;
 
@@ -1393,13 +1402,13 @@ KiRosPrepareForSystemStartup(IN PROS_LOADER_PARAMETER_BLOCK LoaderBlock)
 
         /* Save data */
         LoaderBlock->MmapLength = KeMemoryMapRangeCount * sizeof(ADDRESS_RANGE);
-        LoaderBlock->MmapAddr = (ULONG)KeMemoryMap;
+        LoaderBlock->MmapAddr = (ULONG_PTR)KeMemoryMap;
     }
     else
     {
         /* Nothing from BIOS */
         LoaderBlock->MmapLength = 0;
-        LoaderBlock->MmapAddr = (ULONG)KeMemoryMap;
+        LoaderBlock->MmapAddr = (ULONG_PTR)KeMemoryMap;
     }
 
     /* Convert the loader block */