]> git.saurik.com Git - apple/xnu.git/blobdiff - osfmk/i386/start64.s
xnu-2050.7.9.tar.gz
[apple/xnu.git] / osfmk / i386 / start64.s
index bcabe2829f10f14ab82f3e0007741bc7188b0703..95a9dd66465bd0c679c6918a2f50337ce940aa84 100644 (file)
  */
 
 #include <platforms.h>
-#include <mach_kdb.h>
-
 #include <i386/asm.h>
 #include <i386/asm64.h>
 #include <i386/proc_reg.h>
 #include <i386/postcode.h>
+#include <i386/vmx/vmx_asm.h>
 #include <assym.s>
 
        .data
@@ -213,3 +212,45 @@ Entry(xrstor64o)
        .byte   0x29
        ENTER_COMPAT_MODE()
        ret
+
+#if CONFIG_VMX
+
+/*
+ *     __vmxon -- Enter VMX Operation
+ *     int __vmxon(addr64_t v);
+ */
+Entry(__vmxon)
+       FRAME
+       
+       ENTER_64BIT_MODE()
+       mov     $(VMX_FAIL_INVALID), %ecx
+       mov     $(VMX_FAIL_VALID), %edx
+       mov     $(VMX_SUCCEED), %eax
+       vmxon   8(%rbp)         /* physical addr passed on stack */
+       cmovcl  %ecx, %eax      /* CF = 1, ZF = 0 */
+       cmovzl  %edx, %eax      /* CF = 0, ZF = 1 */
+       ENTER_COMPAT_MODE()
+
+       EMARF
+       ret
+
+/*
+ *     __vmxoff -- Leave VMX Operation
+ *     int __vmxoff(void);
+ */
+Entry(__vmxoff)
+       FRAME
+       
+       ENTER_64BIT_MODE()
+       mov     $(VMX_FAIL_INVALID), %ecx
+       mov     $(VMX_FAIL_VALID), %edx
+       mov     $(VMX_SUCCEED), %eax
+       vmxoff
+       cmovcl  %ecx, %eax      /* CF = 1, ZF = 0 */
+       cmovzl  %edx, %eax      /* CF = 0, ZF = 1 */
+       ENTER_COMPAT_MODE()
+
+       EMARF
+       ret
+
+#endif /* CONFIG_VMX */