Check if the cpu supports the pae mode.
authorHartmut Birr <osexpert@googlemail.com>
Sat, 30 Jul 2005 18:55:25 +0000 (18:55 +0000)
committerHartmut Birr <osexpert@googlemail.com>
Sat, 30 Jul 2005 18:55:25 +0000 (18:55 +0000)
svn path=/trunk/; revision=16899

reactos/boot/freeldr/freeldr/reactos/loader.c

index 44cb02b..76be0c3 100644 (file)
@@ -20,6 +20,7 @@
  */
 
 #include <freeldr.h>
  */
 
 #include <freeldr.h>
+#include <../arch/i386/hardware.h>
 #include <internal/i386/ke.h>
 
 #define NDEBUG
 #include <internal/i386/ke.h>
 
 #define NDEBUG
@@ -279,32 +280,42 @@ VOID
 FASTCALL
 FrLdrGetPaeMode(VOID)
 {
 FASTCALL
 FrLdrGetPaeMode(VOID)
 {
-    PCHAR p;
+    BOOLEAN PaeModeSupported;
 
 
+    PaeModeSupported = FALSE;
     PaeModeEnabled = FALSE;
 
     PaeModeEnabled = FALSE;
 
-    /* Read Command Line */
-    p = (PCHAR)LoaderBlock.CommandLine;
-    while ((p = strchr(p, '/')) != NULL) {
+    if (CpuidSupported() & 1)
+    {
+       ULONG eax, ebx, ecx, FeatureBits;
+       GetCpuid(1, &eax, &ebx, &ecx, &FeatureBits);
+       if (FeatureBits & X86_FEATURE_PAE)
+       {
+          PaeModeSupported = TRUE;
+       }
+    }
 
 
-        p++;
-        /* Find "PAE" */
-        if (!strnicmp(p, "PAE", 3)) {
+    if (PaeModeSupported)
+    {
+       PCHAR p;
 
 
-            /* Make sure there's nothing following it */
-            if (p[3] == ' ' || p[3] == 0) {
+       /* Read Command Line */
+       p = (PCHAR)LoaderBlock.CommandLine;
+       while ((p = strchr(p, '/')) != NULL) {
 
 
-                /* Use Pae */
-                PaeModeEnabled = TRUE;
-                break;
-            }
-        }
-    }
-    if (PaeModeEnabled)
-    {
-       /* FIXME:
-        *   Check if the cpu is pae capable
-        */
+          p++;
+          /* Find "PAE" */
+          if (!strnicmp(p, "PAE", 3)) {
+
+              /* Make sure there's nothing following it */
+              if (p[3] == ' ' || p[3] == 0) {
+
+                  /* Use Pae */
+                  PaeModeEnabled = TRUE;
+                  break;
+              }
+          }
+       }
     }
 }
 
     }
 }