X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Fsrc%2Fpalacios%2Fsvm_lowlevel.asm;h=c407a8e6043d6790f290de8252739d0f82356ad4;hb=a1a2be8eb002e13b1eb6ccaca40e4396f8816402;hp=4731571ce85ec3e94b941ca2f6e6d20049880365;hpb=a109eb919a162bd7de58d62020801bc2e633be50;p=palacios.releases.git diff --git a/palacios/src/palacios/svm_lowlevel.asm b/palacios/src/palacios/svm_lowlevel.asm index 4731571..c407a8e 100644 --- a/palacios/src/palacios/svm_lowlevel.asm +++ b/palacios/src/palacios/svm_lowlevel.asm @@ -1,5 +1,7 @@ ; -*- fundamental -*- +;; (c) 2008, Jack Lange +;; (c) 2008, The V3VEE Project %ifndef SVM_ASM %define SVM_ASM @@ -11,10 +13,8 @@ SVM_ERROR equ 0xFFFFFFFF SVM_SUCCESS equ 0x00000000 EXPORT DisableInts +EXPORT EnableInts -EXPORT GetGDTR -EXPORT GetIDTR -EXPORT GetTR EXPORT exit_test @@ -23,6 +23,8 @@ EXTERN handle_svm_exit EXPORT launch_svm EXPORT safe_svm_launch +EXPORT STGI +EXPORT CLGI @@ -81,6 +83,14 @@ SVM_HANDLER_HALT equ 0x2 db 00fh, 001h, 0dah %endmacro +%macro stgi 0 + db 00fh, 001h, 0dch +%endmacro + +%macro clgi 0 + db 00fh, 001h, 0ddh +%endmacro + ;VMRUN equ db 0Fh, 01h, D8h ;VMLOAD equ db 0x0F,0x01,0xDA ;VMSAVE equ db 0x0F,0x01,0xDB @@ -93,45 +103,20 @@ DisableInts: cli ret - align 8 -GetGDTR: - push ebp - mov ebp, esp - pusha - mov ebx, [ebp + 8] - sgdt [ebx] - - popa - pop ebp +EnableInts: + sti ret align 8 -GetIDTR: - push ebp - mov ebp, esp - pusha - - mov ebx, [ebp + 8] - sidt [ebx] - - popa - pop ebp +CLGI: + clgi ret - - align 8 -GetTR: - push ebp - mov ebp, esp - pusha - mov ebx, [ebp + 8] - str [ebx] - - popa - pop ebp +STGI: + stgi ret @@ -165,6 +150,8 @@ safe_svm_launch: push ebp mov ebp, esp pushf + push fs + push gs pusha ;; Save Host state @@ -188,6 +175,8 @@ safe_svm_launch: add esp, 4 ;; skip past the gpr ptr popa ;; Restore Host state + pop gs + pop fs popf pop ebp ret