summaryrefslogtreecommitdiffstats
path: root/OvmfPkg/XenBusDxe/Ia32/hypercall.S
blob: 77d34784755cfabe844ef75e6f7ad6d29796a3fb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# INTN
# EFIAPI
# XenHypercall2 (
#   IN     VOID *HypercallAddr,
#   IN OUT INTN Arg1,
#   IN OUT INTN Arg2
#   );
ASM_GLOBAL ASM_PFX(XenHypercall2)
ASM_PFX(XenHypercall2):
  # Save only ebx, ecx is supposed to be a scratch register and needs to be
  # saved by the caller
  push %ebx
  # Copy HypercallAddr to eax
  mov 8(%esp), %eax
  # Copy Arg1 to the register expected by Xen
  mov 12(%esp), %ebx
  # Copy Arg2 to the register expected by Xen
  mov 16(%esp), %ecx
  # Call HypercallAddr
  call *%eax
  pop %ebx
  ret