[NTOS/PERF]: Enable VME support. VME stands for Virtual 8086 Mode Extensions, and...
[reactos.git] / reactos / ntoskrnl / vdm / vdmmain.c
index ff31403..c7aa0a2 100644 (file)
 
 VOID
 NTAPI
-Ki386VdmEnablePentiumExtentions(VOID)
+Ki386VdmEnablePentiumExtentions(IN BOOLEAN Enable)
 {
-    /* FIXME: Support this */
-    DPRINT1("VME support detected but not yet taken advantage of\n");
+    ULONG EFlags, Cr4;
+    
+    /* Save interrupt state and disable them */
+    EFlags = __readeflags();
+    _disable();
+    
+    /* Enable or disable VME as required */
+    Cr4 = __readcr4();
+    __writecr4(Enable ? Cr4 | CR4_VME : Cr4 & ~CR4_VME);
+    
+    /* Restore interrupt state */
+    __writeeflags(EFlags);
 }
 
 VOID
@@ -63,7 +73,7 @@ KeI386VdmInitialize(VOID)
         if (KeGetPcr()->Prcb->FeatureBits & KF_V86_VIS)
         {
             /* Enable them. FIXME: Use IPI */
-            Ki386VdmEnablePentiumExtentions();
+            Ki386VdmEnablePentiumExtentions(TRUE);
             KeI386VirtualIntExtensions = TRUE;
         }
     }