Check if the cpu supports the pae mode.
Modified: trunk/reactos/boot/freeldr/freeldr/reactos/loader.c
_____
Modified: trunk/reactos/boot/freeldr/freeldr/reactos/loader.c
--- trunk/reactos/boot/freeldr/freeldr/reactos/loader.c 2005-07-30
18:52:33 UTC (rev 16898)
+++ trunk/reactos/boot/freeldr/freeldr/reactos/loader.c 2005-07-30
18:55:25 UTC (rev 16899)
@@ -20,6 +20,7 @@
*/
#include <freeldr.h>
+#include <../arch/i386/hardware.h>
#include <internal/i386/ke.h>
#define NDEBUG
@@ -279,33 +280,43 @@
FASTCALL
FrLdrGetPaeMode(VOID)
{
- PCHAR p;
+ BOOLEAN PaeModeSupported;
+ PaeModeSupported = 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;
- }
- }
+ 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;
+ }
+ }
+ }
}
- if (PaeModeEnabled)
- {
- /* FIXME:
- * Check if the cpu is pae capable
- */
- }
}
/*++
Show replies by date