mirror of
https://github.com/acidanthera/audk.git
synced 2025-07-31 01:24:12 +02:00
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>
50 lines
900 B
NASM
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
|
|
|