xref: /freebsd-src/sys/amd64/include/xen/hypercall.h (revision 40e1d9d45f0f6798e404eb7d63afb3976e85cc02)
112678024SDoug Rabson /******************************************************************************
2*40e1d9d4SElliott Mitchell  * SPDX-License-Identifier: MIT OR GPL-2.0-only
3*40e1d9d4SElliott Mitchell  *
412678024SDoug Rabson  * hypercall.h
512678024SDoug Rabson  *
676acc41fSJustin T. Gibbs  * FreeBSD-specific hypervisor handling.
712678024SDoug Rabson  *
812678024SDoug Rabson  * Copyright (c) 2002-2004, K A Fraser
912678024SDoug Rabson  *
1012678024SDoug Rabson  * 64-bit updates:
1112678024SDoug Rabson  *   Benjamin Liu <benjamin.liu@intel.com>
1212678024SDoug Rabson  *   Jun Nakajima <jun.nakajima@intel.com>
1312678024SDoug Rabson  *
1412678024SDoug Rabson  * This program is free software; you can redistribute it and/or
1512678024SDoug Rabson  * modify it under the terms of the GNU General Public License version 2
1612678024SDoug Rabson  * as published by the Free Software Foundation; or, when distributed
1712678024SDoug Rabson  * separately from the Linux kernel or incorporated into other
1812678024SDoug Rabson  * software packages, subject to the following license:
1912678024SDoug Rabson  *
2012678024SDoug Rabson  * Permission is hereby granted, free of charge, to any person obtaining a copy
2112678024SDoug Rabson  * of this source file (the "Software"), to deal in the Software without
2212678024SDoug Rabson  * restriction, including without limitation the rights to use, copy, modify,
2312678024SDoug Rabson  * merge, publish, distribute, sublicense, and/or sell copies of the Software,
2412678024SDoug Rabson  * and to permit persons to whom the Software is furnished to do so, subject to
2512678024SDoug Rabson  * the following conditions:
2612678024SDoug Rabson  *
2712678024SDoug Rabson  * The above copyright notice and this permission notice shall be included in
2812678024SDoug Rabson  * all copies or substantial portions of the Software.
2912678024SDoug Rabson  *
3012678024SDoug Rabson  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
3112678024SDoug Rabson  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
3212678024SDoug Rabson  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
3312678024SDoug Rabson  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
3412678024SDoug Rabson  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
3512678024SDoug Rabson  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
3612678024SDoug Rabson  * IN THE SOFTWARE.
3712678024SDoug Rabson  */
3812678024SDoug Rabson 
3912678024SDoug Rabson #ifndef __MACHINE_XEN_HYPERCALL_H__
4012678024SDoug Rabson #define __MACHINE_XEN_HYPERCALL_H__
4112678024SDoug Rabson 
4212678024SDoug Rabson #include <sys/systm.h>
4312678024SDoug Rabson 
4412678024SDoug Rabson #ifndef __XEN_HYPERVISOR_H__
4512678024SDoug Rabson # error "please don't include this file directly"
4612678024SDoug Rabson #endif
4712678024SDoug Rabson 
48bf7313e3SRoger Pau Monné extern char *hypercall_page;
49bf7313e3SRoger Pau Monné 
5012678024SDoug Rabson #define __STR(x) #x
5112678024SDoug Rabson #define STR(x) __STR(x)
5212678024SDoug Rabson #define __must_check
5312678024SDoug Rabson 
5412678024SDoug Rabson #define HYPERCALL_STR(name)					\
5512678024SDoug Rabson 	"call hypercall_page + ("STR(__HYPERVISOR_##name)" * 32)"
5612678024SDoug Rabson 
5712678024SDoug Rabson #define _hypercall0(type, name)					\
5812678024SDoug Rabson ({								\
5912678024SDoug Rabson 	type __res;						\
6012678024SDoug Rabson 	__asm__ volatile (					\
6112678024SDoug Rabson 		HYPERCALL_STR(name)				\
6212678024SDoug Rabson 		: "=a" (__res)					\
6312678024SDoug Rabson 		:						\
6412678024SDoug Rabson 		: "memory" );					\
6512678024SDoug Rabson 	__res;							\
6612678024SDoug Rabson })
6712678024SDoug Rabson 
6812678024SDoug Rabson #define _hypercall1(type, name, a1)				\
6912678024SDoug Rabson ({								\
7012678024SDoug Rabson 	type __res;						\
7112678024SDoug Rabson 	long __ign1;						\
7212678024SDoug Rabson 	__asm__ volatile (					\
7312678024SDoug Rabson 		HYPERCALL_STR(name)				\
7412678024SDoug Rabson 		: "=a" (__res), "=D" (__ign1)			\
7512678024SDoug Rabson 		: "1" ((long)(a1))				\
7612678024SDoug Rabson 		: "memory" );					\
7712678024SDoug Rabson 	__res;							\
7812678024SDoug Rabson })
7912678024SDoug Rabson 
8012678024SDoug Rabson #define _hypercall2(type, name, a1, a2)				\
8112678024SDoug Rabson ({								\
8212678024SDoug Rabson 	type __res;						\
8312678024SDoug Rabson 	long __ign1, __ign2;					\
8412678024SDoug Rabson 	__asm__ volatile (					\
8512678024SDoug Rabson 		HYPERCALL_STR(name)				\
8612678024SDoug Rabson 		: "=a" (__res), "=D" (__ign1), "=S" (__ign2)	\
8712678024SDoug Rabson 		: "1" ((long)(a1)), "2" ((long)(a2))		\
8812678024SDoug Rabson 		: "memory" );					\
8912678024SDoug Rabson 	__res;							\
9012678024SDoug Rabson })
9112678024SDoug Rabson 
9212678024SDoug Rabson #define _hypercall3(type, name, a1, a2, a3)			\
9312678024SDoug Rabson ({								\
9412678024SDoug Rabson 	type __res;						\
9512678024SDoug Rabson 	long __ign1, __ign2, __ign3;				\
9612678024SDoug Rabson 	__asm__ volatile (					\
9712678024SDoug Rabson 		HYPERCALL_STR(name)				\
9812678024SDoug Rabson 		: "=a" (__res), "=D" (__ign1), "=S" (__ign2),	\
9912678024SDoug Rabson 		"=d" (__ign3)					\
10012678024SDoug Rabson 		: "1" ((long)(a1)), "2" ((long)(a2)),		\
10112678024SDoug Rabson 		"3" ((long)(a3))				\
10212678024SDoug Rabson 		: "memory" );					\
10312678024SDoug Rabson 	__res;							\
10412678024SDoug Rabson })
10512678024SDoug Rabson 
10612678024SDoug Rabson #define _hypercall4(type, name, a1, a2, a3, a4)			\
10712678024SDoug Rabson ({								\
10812678024SDoug Rabson 	type __res;						\
10912678024SDoug Rabson 	long __ign1, __ign2, __ign3;				\
11012678024SDoug Rabson 	register long __arg4 __asm__("r10") = (long)(a4);	\
11112678024SDoug Rabson 	__asm__ volatile (					\
11212678024SDoug Rabson 		HYPERCALL_STR(name)				\
11312678024SDoug Rabson 		: "=a" (__res), "=D" (__ign1), "=S" (__ign2),	\
11412678024SDoug Rabson 		  "=d" (__ign3), "+r" (__arg4)			\
11512678024SDoug Rabson 		: "1" ((long)(a1)), "2" ((long)(a2)),		\
11612678024SDoug Rabson 		  "3" ((long)(a3))				\
11712678024SDoug Rabson 		: "memory" );					\
11812678024SDoug Rabson 	__res;							\
11912678024SDoug Rabson })
12012678024SDoug Rabson 
12112678024SDoug Rabson #define _hypercall5(type, name, a1, a2, a3, a4, a5)		\
12212678024SDoug Rabson ({								\
12312678024SDoug Rabson 	type __res;						\
12412678024SDoug Rabson 	long __ign1, __ign2, __ign3;				\
12512678024SDoug Rabson 	register long __arg4 __asm__("r10") = (long)(a4);	\
12612678024SDoug Rabson 	register long __arg5 __asm__("r8") = (long)(a5);	\
12712678024SDoug Rabson 	__asm__ volatile (					\
12812678024SDoug Rabson 		HYPERCALL_STR(name)				\
12912678024SDoug Rabson 		: "=a" (__res), "=D" (__ign1), "=S" (__ign2),	\
13012678024SDoug Rabson 		  "=d" (__ign3), "+r" (__arg4), "+r" (__arg5)	\
13112678024SDoug Rabson 		: "1" ((long)(a1)), "2" ((long)(a2)),		\
13212678024SDoug Rabson 		  "3" ((long)(a3))				\
13312678024SDoug Rabson 		: "memory" );					\
13412678024SDoug Rabson 	__res;							\
13512678024SDoug Rabson })
13612678024SDoug Rabson 
137bf7313e3SRoger Pau Monné static inline int
privcmd_hypercall(long op,long a1,long a2,long a3,long a4,long a5)138bf7313e3SRoger Pau Monné privcmd_hypercall(long op, long a1, long a2, long a3, long a4, long a5)
139bf7313e3SRoger Pau Monné {
140bf7313e3SRoger Pau Monné 	int __res;
141bf7313e3SRoger Pau Monné 	long __ign1, __ign2, __ign3;
142bf7313e3SRoger Pau Monné 	register long __arg4 __asm__("r10") = (long)(a4);
143bf7313e3SRoger Pau Monné 	register long __arg5 __asm__("r8") = (long)(a5);
144bf7313e3SRoger Pau Monné 	long __call = (long)&hypercall_page + (op * 32);
145bf7313e3SRoger Pau Monné 
146e99c0c8bSDan Carpenter 	if (op >= PAGE_SIZE / 32)
147e99c0c8bSDan Carpenter 		return -EINVAL;
148e99c0c8bSDan Carpenter 
149bf7313e3SRoger Pau Monné 	__asm__ volatile (
150bf7313e3SRoger Pau Monné 		"call *%[call]"
151bf7313e3SRoger Pau Monné 		: "=a" (__res), "=D" (__ign1), "=S" (__ign2),
152bf7313e3SRoger Pau Monné 		  "=d" (__ign3), "+r" (__arg4), "+r" (__arg5)
153bf7313e3SRoger Pau Monné 		: "1" ((long)(a1)), "2" ((long)(a2)),
154bf7313e3SRoger Pau Monné 		  "3" ((long)(a3)), [call] "a" (__call)
155bf7313e3SRoger Pau Monné 		: "memory" );
156bf7313e3SRoger Pau Monné 
157bf7313e3SRoger Pau Monné 	return (__res);
158bf7313e3SRoger Pau Monné }
159bf7313e3SRoger Pau Monné 
16012678024SDoug Rabson static inline int __must_check
HYPERVISOR_set_trap_table(const trap_info_t * table)16112678024SDoug Rabson HYPERVISOR_set_trap_table(
16212678024SDoug Rabson 	const trap_info_t *table)
16312678024SDoug Rabson {
16412678024SDoug Rabson 	return _hypercall1(int, set_trap_table, table);
16512678024SDoug Rabson }
16612678024SDoug Rabson 
16712678024SDoug Rabson static inline int __must_check
HYPERVISOR_mmu_update(mmu_update_t * req,unsigned int count,unsigned int * success_count,domid_t domid)16812678024SDoug Rabson HYPERVISOR_mmu_update(
16912678024SDoug Rabson 	mmu_update_t *req, unsigned int count, unsigned int *success_count,
17012678024SDoug Rabson 	domid_t domid)
17112678024SDoug Rabson {
17212678024SDoug Rabson 	return _hypercall4(int, mmu_update, req, count, success_count, domid);
17312678024SDoug Rabson }
17412678024SDoug Rabson 
17512678024SDoug Rabson static inline int __must_check
HYPERVISOR_mmuext_op(struct mmuext_op * op,unsigned int count,unsigned int * success_count,domid_t domid)17612678024SDoug Rabson HYPERVISOR_mmuext_op(
17712678024SDoug Rabson 	struct mmuext_op *op, unsigned int count, unsigned int *success_count,
17812678024SDoug Rabson 	domid_t domid)
17912678024SDoug Rabson {
18012678024SDoug Rabson 	return _hypercall4(int, mmuext_op, op, count, success_count, domid);
18112678024SDoug Rabson }
18212678024SDoug Rabson 
18312678024SDoug Rabson static inline int __must_check
HYPERVISOR_set_gdt(unsigned long * frame_list,unsigned int entries)18412678024SDoug Rabson HYPERVISOR_set_gdt(
18512678024SDoug Rabson 	unsigned long *frame_list, unsigned int entries)
18612678024SDoug Rabson {
18712678024SDoug Rabson 	return _hypercall2(int, set_gdt, frame_list, entries);
18812678024SDoug Rabson }
18912678024SDoug Rabson 
19012678024SDoug Rabson static inline int __must_check
HYPERVISOR_stack_switch(unsigned long ss,unsigned long esp)19112678024SDoug Rabson HYPERVISOR_stack_switch(
19212678024SDoug Rabson 	unsigned long ss, unsigned long esp)
19312678024SDoug Rabson {
19412678024SDoug Rabson 	return _hypercall2(int, stack_switch, ss, esp);
19512678024SDoug Rabson }
19612678024SDoug Rabson 
19712678024SDoug Rabson static inline int __must_check
HYPERVISOR_set_callbacks(unsigned long event_address,unsigned long failsafe_address,unsigned long syscall_address)19812678024SDoug Rabson HYPERVISOR_set_callbacks(
19912678024SDoug Rabson 	unsigned long event_address, unsigned long failsafe_address,
20012678024SDoug Rabson 	unsigned long syscall_address)
20112678024SDoug Rabson {
20212678024SDoug Rabson 	return _hypercall3(int, set_callbacks,
20312678024SDoug Rabson 			   event_address, failsafe_address, syscall_address);
20412678024SDoug Rabson }
20512678024SDoug Rabson 
20612678024SDoug Rabson static inline int
HYPERVISOR_fpu_taskswitch(int set)20712678024SDoug Rabson HYPERVISOR_fpu_taskswitch(
20812678024SDoug Rabson 	int set)
20912678024SDoug Rabson {
21012678024SDoug Rabson 	return _hypercall1(int, fpu_taskswitch, set);
21112678024SDoug Rabson }
21212678024SDoug Rabson 
21312678024SDoug Rabson static inline int __must_check
HYPERVISOR_sched_op(int cmd,void * arg)21412678024SDoug Rabson HYPERVISOR_sched_op(
21512678024SDoug Rabson 	int cmd, void *arg)
21612678024SDoug Rabson {
21712678024SDoug Rabson 	return _hypercall2(int, sched_op, cmd, arg);
21812678024SDoug Rabson }
21912678024SDoug Rabson 
22012678024SDoug Rabson static inline long __must_check
HYPERVISOR_set_timer_op(uint64_t timeout)22112678024SDoug Rabson HYPERVISOR_set_timer_op(
22212678024SDoug Rabson 	uint64_t timeout)
22312678024SDoug Rabson {
22412678024SDoug Rabson 	return _hypercall1(long, set_timer_op, timeout);
22512678024SDoug Rabson }
22612678024SDoug Rabson 
22712678024SDoug Rabson static inline int __must_check
HYPERVISOR_platform_op(struct xen_platform_op * platform_op)22812678024SDoug Rabson HYPERVISOR_platform_op(
22912678024SDoug Rabson 	struct xen_platform_op *platform_op)
23012678024SDoug Rabson {
23112678024SDoug Rabson 	platform_op->interface_version = XENPF_INTERFACE_VERSION;
23212678024SDoug Rabson 	return _hypercall1(int, platform_op, platform_op);
23312678024SDoug Rabson }
23412678024SDoug Rabson 
23512678024SDoug Rabson static inline int __must_check
HYPERVISOR_set_debugreg(unsigned int reg,unsigned long value)23612678024SDoug Rabson HYPERVISOR_set_debugreg(
23712678024SDoug Rabson 	unsigned int reg, unsigned long value)
23812678024SDoug Rabson {
23912678024SDoug Rabson 	return _hypercall2(int, set_debugreg, reg, value);
24012678024SDoug Rabson }
24112678024SDoug Rabson 
24212678024SDoug Rabson static inline unsigned long __must_check
HYPERVISOR_get_debugreg(unsigned int reg)24312678024SDoug Rabson HYPERVISOR_get_debugreg(
24412678024SDoug Rabson 	unsigned int reg)
24512678024SDoug Rabson {
24612678024SDoug Rabson 	return _hypercall1(unsigned long, get_debugreg, reg);
24712678024SDoug Rabson }
24812678024SDoug Rabson 
24912678024SDoug Rabson static inline int __must_check
HYPERVISOR_update_descriptor(unsigned long ma,unsigned long word)25012678024SDoug Rabson HYPERVISOR_update_descriptor(
25112678024SDoug Rabson 	unsigned long ma, unsigned long word)
25212678024SDoug Rabson {
25312678024SDoug Rabson 	return _hypercall2(int, update_descriptor, ma, word);
25412678024SDoug Rabson }
25512678024SDoug Rabson 
25612678024SDoug Rabson static inline int __must_check
HYPERVISOR_memory_op(unsigned int cmd,void * arg)25712678024SDoug Rabson HYPERVISOR_memory_op(
25812678024SDoug Rabson 	unsigned int cmd, void *arg)
25912678024SDoug Rabson {
26012678024SDoug Rabson 	return _hypercall2(int, memory_op, cmd, arg);
26112678024SDoug Rabson }
26212678024SDoug Rabson 
26312678024SDoug Rabson static inline int __must_check
HYPERVISOR_multicall(multicall_entry_t * call_list,unsigned int nr_calls)26412678024SDoug Rabson HYPERVISOR_multicall(
26512678024SDoug Rabson 	multicall_entry_t *call_list, unsigned int nr_calls)
26612678024SDoug Rabson {
26712678024SDoug Rabson 	return _hypercall2(int, multicall, call_list, nr_calls);
26812678024SDoug Rabson }
26912678024SDoug Rabson 
27012678024SDoug Rabson static inline int __must_check
HYPERVISOR_update_va_mapping(unsigned long va,uint64_t new_val,unsigned long flags)27112678024SDoug Rabson HYPERVISOR_update_va_mapping(
27212678024SDoug Rabson 	unsigned long va, uint64_t new_val, unsigned long flags)
27312678024SDoug Rabson {
27412678024SDoug Rabson 	return _hypercall3(int, update_va_mapping, va, new_val, flags);
27512678024SDoug Rabson }
27612678024SDoug Rabson 
27712678024SDoug Rabson static inline int __must_check
HYPERVISOR_event_channel_op(int cmd,void * arg)27812678024SDoug Rabson HYPERVISOR_event_channel_op(
27912678024SDoug Rabson 	int cmd, void *arg)
28012678024SDoug Rabson {
281ecdcad65SElliott Mitchell 	return _hypercall2(int, event_channel_op, cmd, arg);
28212678024SDoug Rabson }
28312678024SDoug Rabson 
28412678024SDoug Rabson static inline int __must_check
HYPERVISOR_xen_version(int cmd,void * arg)28512678024SDoug Rabson HYPERVISOR_xen_version(
28612678024SDoug Rabson 	int cmd, void *arg)
28712678024SDoug Rabson {
28812678024SDoug Rabson 	return _hypercall2(int, xen_version, cmd, arg);
28912678024SDoug Rabson }
29012678024SDoug Rabson 
29112678024SDoug Rabson static inline int __must_check
HYPERVISOR_console_io(int cmd,unsigned int count,const char * str)29212678024SDoug Rabson HYPERVISOR_console_io(
293a231723cSRoger Pau Monné 	int cmd, unsigned int count, const char *str)
29412678024SDoug Rabson {
29512678024SDoug Rabson 	return _hypercall3(int, console_io, cmd, count, str);
29612678024SDoug Rabson }
29712678024SDoug Rabson 
29812678024SDoug Rabson static inline int __must_check
HYPERVISOR_physdev_op(int cmd,void * arg)29912678024SDoug Rabson HYPERVISOR_physdev_op(
30012678024SDoug Rabson 	int cmd, void *arg)
30112678024SDoug Rabson {
302ecdcad65SElliott Mitchell 	return _hypercall2(int, physdev_op, cmd, arg);
30312678024SDoug Rabson }
30412678024SDoug Rabson 
30512678024SDoug Rabson static inline int __must_check
HYPERVISOR_grant_table_op(unsigned int cmd,void * uop,unsigned int count)30612678024SDoug Rabson HYPERVISOR_grant_table_op(
30712678024SDoug Rabson 	unsigned int cmd, void *uop, unsigned int count)
30812678024SDoug Rabson {
30912678024SDoug Rabson 	return _hypercall3(int, grant_table_op, cmd, uop, count);
31012678024SDoug Rabson }
31112678024SDoug Rabson 
31212678024SDoug Rabson static inline int __must_check
HYPERVISOR_update_va_mapping_otherdomain(unsigned long va,uint64_t new_val,unsigned long flags,domid_t domid)31312678024SDoug Rabson HYPERVISOR_update_va_mapping_otherdomain(
31412678024SDoug Rabson 	unsigned long va, uint64_t new_val, unsigned long flags, domid_t domid)
31512678024SDoug Rabson {
31612678024SDoug Rabson 	return _hypercall4(int, update_va_mapping_otherdomain, va,
31712678024SDoug Rabson 			   new_val, flags, domid);
31812678024SDoug Rabson }
31912678024SDoug Rabson 
32012678024SDoug Rabson static inline int __must_check
HYPERVISOR_vm_assist(unsigned int cmd,unsigned int type)32112678024SDoug Rabson HYPERVISOR_vm_assist(
32212678024SDoug Rabson 	unsigned int cmd, unsigned int type)
32312678024SDoug Rabson {
32412678024SDoug Rabson 	return _hypercall2(int, vm_assist, cmd, type);
32512678024SDoug Rabson }
32612678024SDoug Rabson 
32712678024SDoug Rabson static inline int __must_check
HYPERVISOR_vcpu_op(int cmd,unsigned int vcpuid,void * extra_args)32812678024SDoug Rabson HYPERVISOR_vcpu_op(
32912678024SDoug Rabson 	int cmd, unsigned int vcpuid, void *extra_args)
33012678024SDoug Rabson {
33112678024SDoug Rabson 	return _hypercall3(int, vcpu_op, cmd, vcpuid, extra_args);
33212678024SDoug Rabson }
33312678024SDoug Rabson 
33412678024SDoug Rabson static inline int __must_check
HYPERVISOR_set_segment_base(int reg,unsigned long value)33512678024SDoug Rabson HYPERVISOR_set_segment_base(
33612678024SDoug Rabson 	int reg, unsigned long value)
33712678024SDoug Rabson {
33812678024SDoug Rabson 	return _hypercall2(int, set_segment_base, reg, value);
33912678024SDoug Rabson }
34012678024SDoug Rabson 
34112678024SDoug Rabson static inline int __must_check
HYPERVISOR_suspend(unsigned long srec)34212678024SDoug Rabson HYPERVISOR_suspend(
34312678024SDoug Rabson 	unsigned long srec)
34412678024SDoug Rabson {
34512678024SDoug Rabson 	struct sched_shutdown sched_shutdown = {
34612678024SDoug Rabson 		.reason = SHUTDOWN_suspend
34712678024SDoug Rabson 	};
34812678024SDoug Rabson 
349ecdcad65SElliott Mitchell 	return _hypercall3(int, sched_op, SCHEDOP_shutdown,
35012678024SDoug Rabson 			     &sched_shutdown, srec);
35112678024SDoug Rabson }
35212678024SDoug Rabson 
35312678024SDoug Rabson static inline unsigned long __must_check
HYPERVISOR_hvm_op(int op,void * arg)35412678024SDoug Rabson HYPERVISOR_hvm_op(
35512678024SDoug Rabson 	int op, void *arg)
35612678024SDoug Rabson {
35712678024SDoug Rabson 	return _hypercall2(unsigned long, hvm_op, op, arg);
35812678024SDoug Rabson }
35912678024SDoug Rabson 
36012678024SDoug Rabson static inline int __must_check
HYPERVISOR_callback_op(int cmd,const void * arg)36112678024SDoug Rabson HYPERVISOR_callback_op(
36212678024SDoug Rabson 	int cmd, const void *arg)
36312678024SDoug Rabson {
36412678024SDoug Rabson 	return _hypercall2(int, callback_op, cmd, arg);
36512678024SDoug Rabson }
36612678024SDoug Rabson 
36712678024SDoug Rabson static inline int __must_check
HYPERVISOR_xenoprof_op(int op,void * arg)36812678024SDoug Rabson HYPERVISOR_xenoprof_op(
36912678024SDoug Rabson 	int op, void *arg)
37012678024SDoug Rabson {
37112678024SDoug Rabson 	return _hypercall2(int, xenoprof_op, op, arg);
37212678024SDoug Rabson }
37312678024SDoug Rabson 
37412678024SDoug Rabson static inline int __must_check
HYPERVISOR_kexec_op(unsigned long op,void * args)37512678024SDoug Rabson HYPERVISOR_kexec_op(
37612678024SDoug Rabson 	unsigned long op, void *args)
37712678024SDoug Rabson {
37812678024SDoug Rabson 	return _hypercall2(int, kexec_op, op, args);
37912678024SDoug Rabson }
38012678024SDoug Rabson 
381ed78016dSRoger Pau Monne static inline int __must_check
HYPERVISOR_dm_op(domid_t domid,unsigned int nr_bufs,const void * bufs)382ed78016dSRoger Pau Monne HYPERVISOR_dm_op(
383ed78016dSRoger Pau Monne 	domid_t domid, unsigned int nr_bufs, const void *bufs)
384ed78016dSRoger Pau Monne {
385ed78016dSRoger Pau Monne 	return _hypercall3(int, dm_op, domid, nr_bufs, bufs);
386ed78016dSRoger Pau Monne }
387ed78016dSRoger Pau Monne 
38812678024SDoug Rabson #undef __must_check
38912678024SDoug Rabson 
39012678024SDoug Rabson #endif /* __MACHINE_XEN_HYPERCALL_H__ */
391