Dynamic 3GB support, part 1. Only multiboot.S remains to be changed, all
other parts of the Kernel now used KERNEL_BASE based on the command-line
(Please don't use /3gb if you don't compile 3GB)
Modified: trunk/reactos/config
Modified: trunk/reactos/ntoskrnl/include/internal/i386/mm.h
Modified: trunk/reactos/ntoskrnl/ke/main.c
Modified: trunk/reactos/ntoskrnl/mm/mminit.c
_____
Modified: trunk/reactos/config
--- trunk/reactos/config 2005-01-26 00:43:49 UTC (rev 13304)
+++ trunk/reactos/config 2005-01-26 05:00:08 UTC (rev 13305)
@@ -45,7 +45,7 @@
#
# whether to use a 3GB User, 1GB Kernel memory map
#
-3GB := 1
+3GB := 0
#
# Which version of NDIS do we support up to?
_____
Modified: trunk/reactos/ntoskrnl/include/internal/i386/mm.h
--- trunk/reactos/ntoskrnl/include/internal/i386/mm.h 2005-01-26
00:43:49 UTC (rev 13304)
+++ trunk/reactos/ntoskrnl/include/internal/i386/mm.h 2005-01-26
05:00:08 UTC (rev 13305)
@@ -23,14 +23,10 @@
#endif
-#ifdef __3GB__
-#define KERNEL_BASE (0xC0000000)
-#else
-#define KERNEL_BASE (0x80000000)
-#endif
-
#ifndef __ASM__
+#define KERNEL_BASE (ULONG)MmSystemRangeStart
+
#if defined(__GNUC__)
#define FLUSH_TLB { \
@@ -65,6 +61,14 @@
#define PAGE_MASK(x) ((x)&(~0xfff))
#define PAE_PAGE_MASK(x) ((x)&(~0xfffLL))
+#else
+
+#ifdef __3GB__
+#define KERNEL_BASE (0xC0000000)
+#else
+#define KERNEL_BASE (0x80000000)
+#endif
+
#endif /* ASSEMBLER */
#endif /* __NTOSKRNL_INCLUDE_INTERNAL_I386_MM_H */
_____
Modified: trunk/reactos/ntoskrnl/ke/main.c
--- trunk/reactos/ntoskrnl/ke/main.c 2005-01-26 00:43:49 UTC (rev
13304)
+++ trunk/reactos/ntoskrnl/ke/main.c 2005-01-26 05:00:08 UTC (rev
13305)
@@ -691,6 +691,7 @@
/* Create the SystemRoot symbolic link */
CPRINT("CommandLine: %s\n", (PCHAR)KeLoaderBlock.CommandLine);
+ DPRINT1("MmSystemRangeStart: 0x%x\n", MmSystemRangeStart);
Status = IoCreateSystemRootLink((PCHAR)KeLoaderBlock.CommandLine);
if (!NT_SUCCESS(Status))
{
@@ -953,6 +954,18 @@
}
KeLoaderBlock.CommandLine = (ULONG)KeLoaderCommandLine;
+ /* Gotta check 3GB setting right *here* before we use KERNEL_BASE! */
+ if (!_strnicmp(KeLoaderCommandLine, "3GB", 3)) {
+
+ /* Use 3GB */
+ MmSystemRangeStart = (PVOID)0xC0000000;
+
+ } else {
+
+ /* Use 2GB */
+ MmSystemRangeStart = (PVOID)0x80000000;
+ }
+
strcpy(KeLoaderModuleStrings[0], "ntoskrnl.exe");
KeLoaderModules[0].String = (ULONG)KeLoaderModuleStrings[0];
KeLoaderModules[0].ModStart = KERNEL_BASE;
_____
Modified: trunk/reactos/ntoskrnl/mm/mminit.c
--- trunk/reactos/ntoskrnl/mm/mminit.c 2005-01-26 00:43:49 UTC (rev
13304)
+++ trunk/reactos/ntoskrnl/mm/mminit.c 2005-01-26 05:00:08 UTC (rev
13305)
@@ -324,10 +324,7 @@
KeLoaderBlock.MemHigher = (MaxMem - 1) * 1024;
}
- /*
- * FIXME: Set this based on the system command line
- */
- MmSystemRangeStart = (PVOID)KERNEL_BASE; // 0xC0000000
+ /* Set memory limits */
MmUserProbeAddress = 0x7fff0000;
MmHighestUserAddress = (PVOID)0x7ffeffff;