ia64/xen: define helper functions for xen hypercalls.
introduce helper functions for xen hypercalls which traps to hypervisor. Signed-off-by: Yaozu (Eddie) Dong <eddie.dong@intel.com> Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp> Signed-off-by: Tony Luck <tony.luck@intel.com>
This commit is contained in:
committed by
Tony Luck
parent
67fe8d27a8
commit
ed50bd6096
91
arch/ia64/xen/hypercall.S
Normal file
91
arch/ia64/xen/hypercall.S
Normal file
@@ -0,0 +1,91 @@
|
||||
/*
|
||||
* Support routines for Xen hypercalls
|
||||
*
|
||||
* Copyright (C) 2005 Dan Magenheimer <dan.magenheimer@hp.com>
|
||||
* Copyright (C) 2008 Yaozu (Eddie) Dong <eddie.dong@intel.com>
|
||||
*/
|
||||
|
||||
#include <asm/asmmacro.h>
|
||||
#include <asm/intrinsics.h>
|
||||
#include <asm/xen/privop.h>
|
||||
|
||||
/*
|
||||
* Hypercalls without parameter.
|
||||
*/
|
||||
#define __HCALL0(name,hcall) \
|
||||
GLOBAL_ENTRY(name); \
|
||||
break hcall; \
|
||||
br.ret.sptk.many rp; \
|
||||
END(name)
|
||||
|
||||
/*
|
||||
* Hypercalls with 1 parameter.
|
||||
*/
|
||||
#define __HCALL1(name,hcall) \
|
||||
GLOBAL_ENTRY(name); \
|
||||
mov r8=r32; \
|
||||
break hcall; \
|
||||
br.ret.sptk.many rp; \
|
||||
END(name)
|
||||
|
||||
/*
|
||||
* Hypercalls with 2 parameters.
|
||||
*/
|
||||
#define __HCALL2(name,hcall) \
|
||||
GLOBAL_ENTRY(name); \
|
||||
mov r8=r32; \
|
||||
mov r9=r33; \
|
||||
break hcall; \
|
||||
br.ret.sptk.many rp; \
|
||||
END(name)
|
||||
|
||||
__HCALL0(xen_get_psr, HYPERPRIVOP_GET_PSR)
|
||||
__HCALL0(xen_get_ivr, HYPERPRIVOP_GET_IVR)
|
||||
__HCALL0(xen_get_tpr, HYPERPRIVOP_GET_TPR)
|
||||
__HCALL0(xen_hyper_ssm_i, HYPERPRIVOP_SSM_I)
|
||||
|
||||
__HCALL1(xen_set_tpr, HYPERPRIVOP_SET_TPR)
|
||||
__HCALL1(xen_eoi, HYPERPRIVOP_EOI)
|
||||
__HCALL1(xen_thash, HYPERPRIVOP_THASH)
|
||||
__HCALL1(xen_set_itm, HYPERPRIVOP_SET_ITM)
|
||||
__HCALL1(xen_get_rr, HYPERPRIVOP_GET_RR)
|
||||
__HCALL1(xen_fc, HYPERPRIVOP_FC)
|
||||
__HCALL1(xen_get_cpuid, HYPERPRIVOP_GET_CPUID)
|
||||
__HCALL1(xen_get_pmd, HYPERPRIVOP_GET_PMD)
|
||||
|
||||
__HCALL2(xen_ptcga, HYPERPRIVOP_PTC_GA)
|
||||
__HCALL2(xen_set_rr, HYPERPRIVOP_SET_RR)
|
||||
__HCALL2(xen_set_kr, HYPERPRIVOP_SET_KR)
|
||||
|
||||
#ifdef CONFIG_IA32_SUPPORT
|
||||
__HCALL1(xen_get_eflag, HYPERPRIVOP_GET_EFLAG)
|
||||
__HCALL1(xen_set_eflag, HYPERPRIVOP_SET_EFLAG) // refer SDM vol1 3.1.8
|
||||
#endif /* CONFIG_IA32_SUPPORT */
|
||||
|
||||
GLOBAL_ENTRY(xen_set_rr0_to_rr4)
|
||||
mov r8=r32
|
||||
mov r9=r33
|
||||
mov r10=r34
|
||||
mov r11=r35
|
||||
mov r14=r36
|
||||
XEN_HYPER_SET_RR0_TO_RR4
|
||||
br.ret.sptk.many rp
|
||||
;;
|
||||
END(xen_set_rr0_to_rr4)
|
||||
|
||||
GLOBAL_ENTRY(xen_send_ipi)
|
||||
mov r14=r32
|
||||
mov r15=r33
|
||||
mov r2=0x400
|
||||
break 0x1000
|
||||
;;
|
||||
br.ret.sptk.many rp
|
||||
;;
|
||||
END(xen_send_ipi)
|
||||
|
||||
GLOBAL_ENTRY(__hypercall)
|
||||
mov r2=r37
|
||||
break 0x1000
|
||||
br.ret.sptk.many b0
|
||||
;;
|
||||
END(__hypercall)
|
Reference in New Issue
Block a user