Jason Andryuk 0e6f6c715c OvmfPkg/XenHypercallLib: Use direct hypercalls
This removes the need to allocate memory for the hypercall page,
particularly for use during runtime.  This also makes the library usable
in all phases, so LIBRARY_CLASS can remove the restrictions.

The processor vendor is used to select vmmcall or vmcall instructions.
The listed vendors are those in the Xen tree.

Signed-off-by: Jason Andryuk <jason.andryuk@amd.com>
2024-08-30 16:55:41 +00:00

50 lines
900 B
NASM

DEFAULT REL
SECTION .text
; INTN
; EFIAPI
; __XenVmmcall2 (
; IN INTN HypercallNum,
; IN OUT INTN Arg1,
; IN OUT INTN Arg2
; );
global ASM_PFX(__XenVmmcall2)
ASM_PFX(__XenVmmcall2):
push rdi
push rsi
; Copy HypercallNum to rax
mov rax, rcx
; Copy Arg1 to the register expected by Xen
mov rdi, rdx
; Copy Arg2 to the register expected by Xen
mov rsi, r8
; Call HypercallNum
vmmcall
pop rsi
pop rdi
ret
; INTN
; EFIAPI
; __XenVmcall2 (
; IN INTN HypercallNum,
; IN OUT INTN Arg1,
; IN OUT INTN Arg2
; );
global ASM_PFX(__XenVmcall2)
ASM_PFX(__XenVmcall2):
push rdi
push rsi
; Copy HypercallNum to rax
mov rax, rcx
; Copy Arg1 to the register expected by Xen
mov rdi, rdx
; Copy Arg2 to the register expected by Xen
mov rsi, r8
; Call HypercallNum
vmcall
pop rsi
pop rdi
ret