xref: /freebsd/sys/i386/include/xen/hypercall.h (revision 40e1d9d45f0f6798e404eb7d63afb3976e85cc02)
141c24a46SKip Macy /******************************************************************************
2*40e1d9d4SElliott Mitchell  * SPDX-License-Identifier: MIT OR GPL-2.0-only
3*40e1d9d4SElliott Mitchell  *
441c24a46SKip Macy  * hypercall.h
541c24a46SKip Macy  *
641c24a46SKip Macy  * Linux-specific hypervisor handling.
741c24a46SKip Macy  *
841c24a46SKip Macy  * Copyright (c) 2002-2004, K A Fraser
941c24a46SKip Macy  *
1041c24a46SKip Macy  * This file may be distributed separately from the Linux kernel, or
1141c24a46SKip Macy  * incorporated into other software packages, subject to the following license:
1241c24a46SKip Macy  *
1341c24a46SKip Macy  * Permission is hereby granted, free of charge, to any person obtaining a copy
1441c24a46SKip Macy  * of this source file (the "Software"), to deal in the Software without
1541c24a46SKip Macy  * restriction, including without limitation the rights to use, copy, modify,
1641c24a46SKip Macy  * merge, publish, distribute, sublicense, and/or sell copies of the Software,
1741c24a46SKip Macy  * and to permit persons to whom the Software is furnished to do so, subject to
1841c24a46SKip Macy  * the following conditions:
1941c24a46SKip Macy  *
2041c24a46SKip Macy  * The above copyright notice and this permission notice shall be included in
2141c24a46SKip Macy  * all copies or substantial portions of the Software.
2241c24a46SKip Macy  *
2341c24a46SKip Macy  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
2441c24a46SKip Macy  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
2541c24a46SKip Macy  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
2641c24a46SKip Macy  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
2741c24a46SKip Macy  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
2841c24a46SKip Macy  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
2941c24a46SKip Macy  * IN THE SOFTWARE.
3041c24a46SKip Macy  */
3141c24a46SKip Macy 
3241c24a46SKip Macy #ifndef __HYPERCALL_H__
3341c24a46SKip Macy #define __HYPERCALL_H__
3441c24a46SKip Macy 
3541c24a46SKip Macy #include <sys/systm.h>
36ad7dd514SElliott Mitchell #include <contrib/xen/xen.h>
37ad7dd514SElliott Mitchell #include <contrib/xen/sched.h>
3841c24a46SKip Macy 
39bf7313e3SRoger Pau Monné extern char *hypercall_page;
40bf7313e3SRoger Pau Monné 
4141c24a46SKip Macy #define __STR(x) #x
4241c24a46SKip Macy #define STR(x) __STR(x)
4341c24a46SKip Macy 
4441c24a46SKip Macy #define HYPERCALL_STR(name)					\
4541c24a46SKip Macy 	"call hypercall_page + ("STR(__HYPERVISOR_##name)" * 32)"
4641c24a46SKip Macy 
4741c24a46SKip Macy #define _hypercall0(type, name)					\
4841c24a46SKip Macy ({								\
4941c24a46SKip Macy 	long __res;						\
5041c24a46SKip Macy 	__asm__ volatile (					\
5141c24a46SKip Macy 		HYPERCALL_STR(name)				\
5241c24a46SKip Macy 		: "=a" (__res)					\
5341c24a46SKip Macy 		:						\
5441c24a46SKip Macy 		: "memory" );					\
5541c24a46SKip Macy 	(type)__res;						\
5641c24a46SKip Macy })
5741c24a46SKip Macy 
5841c24a46SKip Macy #define _hypercall1(type, name, a1)				\
5941c24a46SKip Macy ({								\
6041c24a46SKip Macy 	long __res, __ign1;					\
6141c24a46SKip Macy 	__asm__ volatile (					\
6241c24a46SKip Macy 		HYPERCALL_STR(name)				\
6341c24a46SKip Macy 		: "=a" (__res), "=b" (__ign1)			\
6441c24a46SKip Macy 		: "1" ((long)(a1))				\
6541c24a46SKip Macy 		: "memory" );					\
6641c24a46SKip Macy 	(type)__res;						\
6741c24a46SKip Macy })
6841c24a46SKip Macy 
6941c24a46SKip Macy #define _hypercall2(type, name, a1, a2)				\
7041c24a46SKip Macy ({								\
7141c24a46SKip Macy 	long __res, __ign1, __ign2;				\
7241c24a46SKip Macy 	__asm__ volatile (					\
7341c24a46SKip Macy 		HYPERCALL_STR(name)				\
7441c24a46SKip Macy 		: "=a" (__res), "=b" (__ign1), "=c" (__ign2)	\
7541c24a46SKip Macy 		: "1" ((long)(a1)), "2" ((long)(a2))		\
7641c24a46SKip Macy 		: "memory" );					\
7741c24a46SKip Macy 	(type)__res;						\
7841c24a46SKip Macy })
7941c24a46SKip Macy 
8041c24a46SKip Macy #define _hypercall3(type, name, a1, a2, a3)			\
8141c24a46SKip Macy ({								\
8241c24a46SKip Macy 	long __res, __ign1, __ign2, __ign3;			\
8341c24a46SKip Macy 	__asm__ volatile (					\
8441c24a46SKip Macy 		HYPERCALL_STR(name)				\
8541c24a46SKip Macy 		: "=a" (__res), "=b" (__ign1), "=c" (__ign2),	\
8641c24a46SKip Macy 		"=d" (__ign3)					\
8741c24a46SKip Macy 		: "1" ((long)(a1)), "2" ((long)(a2)),		\
8841c24a46SKip Macy 		"3" ((long)(a3))				\
8941c24a46SKip Macy 		: "memory" );					\
9041c24a46SKip Macy 	(type)__res;						\
9141c24a46SKip Macy })
9241c24a46SKip Macy 
9341c24a46SKip Macy #define _hypercall4(type, name, a1, a2, a3, a4)			\
9441c24a46SKip Macy ({								\
9541c24a46SKip Macy 	long __res, __ign1, __ign2, __ign3, __ign4;		\
9641c24a46SKip Macy 	__asm__ volatile (					\
9741c24a46SKip Macy 		HYPERCALL_STR(name)				\
9841c24a46SKip Macy 		: "=a" (__res), "=b" (__ign1), "=c" (__ign2),	\
9941c24a46SKip Macy 		"=d" (__ign3), "=S" (__ign4)			\
10041c24a46SKip Macy 		: "1" ((long)(a1)), "2" ((long)(a2)),		\
10141c24a46SKip Macy 		"3" ((long)(a3)), "4" ((long)(a4))		\
10241c24a46SKip Macy 		: "memory" );					\
10341c24a46SKip Macy 	(type)__res;						\
10441c24a46SKip Macy })
10541c24a46SKip Macy 
10641c24a46SKip Macy #define _hypercall5(type, name, a1, a2, a3, a4, a5)		\
10741c24a46SKip Macy ({								\
10841c24a46SKip Macy 	long __res, __ign1, __ign2, __ign3, __ign4, __ign5;	\
10941c24a46SKip Macy 	__asm__ volatile (					\
11041c24a46SKip Macy 		HYPERCALL_STR(name)				\
11141c24a46SKip Macy 		: "=a" (__res), "=b" (__ign1), "=c" (__ign2),	\
11241c24a46SKip Macy 		"=d" (__ign3), "=S" (__ign4), "=D" (__ign5)	\
11341c24a46SKip Macy 		: "1" ((long)(a1)), "2" ((long)(a2)),		\
11441c24a46SKip Macy 		"3" ((long)(a3)), "4" ((long)(a4)),		\
11541c24a46SKip Macy 		"5" ((long)(a5))				\
11641c24a46SKip Macy 		: "memory" );					\
11741c24a46SKip Macy 	(type)__res;						\
11841c24a46SKip Macy })
11941c24a46SKip Macy 
120bf7313e3SRoger Pau Monné static inline long
privcmd_hypercall(long op,long a1,long a2,long a3,long a4,long a5)121bf7313e3SRoger Pau Monné privcmd_hypercall(long op, long a1, long a2, long a3, long a4, long a5)
122bf7313e3SRoger Pau Monné {
123bf7313e3SRoger Pau Monné 	long __res, __ign1, __ign2, __ign3, __ign4, __ign5, __call;
124bf7313e3SRoger Pau Monné 
125e99c0c8bSDan Carpenter 	if (op >= PAGE_SIZE / 32)
126e99c0c8bSDan Carpenter 		return -EINVAL;
127e99c0c8bSDan Carpenter 
128bf7313e3SRoger Pau Monné 	__call = (long)&hypercall_page + (op * 32);
129bf7313e3SRoger Pau Monné 	__asm__ volatile (
130bf7313e3SRoger Pau Monné 		"call *%[call]"
131bf7313e3SRoger Pau Monné 		: "=a" (__res), "=b" (__ign1), "=c" (__ign2),
132bf7313e3SRoger Pau Monné 		"=d" (__ign3), "=S" (__ign4), "=D" (__ign5)
133bf7313e3SRoger Pau Monné 		: "1" ((long)(a1)), "2" ((long)(a2)),
134bf7313e3SRoger Pau Monné 		"3" ((long)(a3)), "4" ((long)(a4)),
135bf7313e3SRoger Pau Monné 		"5" ((long)(a5)), [call] "a" (__call)
136bf7313e3SRoger Pau Monné 		: "memory" );
137bf7313e3SRoger Pau Monné 
138bf7313e3SRoger Pau Monné 	return __res;
139bf7313e3SRoger Pau Monné }
140bf7313e3SRoger Pau Monné 
14141c24a46SKip Macy static inline int
HYPERVISOR_set_trap_table(trap_info_t * table)14241c24a46SKip Macy HYPERVISOR_set_trap_table(
14341c24a46SKip Macy 	trap_info_t *table)
14441c24a46SKip Macy {
14541c24a46SKip Macy 	return _hypercall1(int, set_trap_table, table);
14641c24a46SKip Macy }
14741c24a46SKip Macy 
14841c24a46SKip Macy static inline int
HYPERVISOR_mmu_update(mmu_update_t * req,int count,int * success_count,domid_t domid)14941c24a46SKip Macy HYPERVISOR_mmu_update(
15041c24a46SKip Macy 	mmu_update_t *req, int count, int *success_count, domid_t domid)
15141c24a46SKip Macy {
15241c24a46SKip Macy 	return _hypercall4(int, mmu_update, req, count, success_count, domid);
15341c24a46SKip Macy }
15441c24a46SKip Macy 
15541c24a46SKip Macy static inline int
HYPERVISOR_mmuext_op(mmuext_op_t * op,int count,int * success_count,domid_t domid)15641c24a46SKip Macy HYPERVISOR_mmuext_op(
15741c24a46SKip Macy 	mmuext_op_t *op, int count, int *success_count, domid_t domid)
15841c24a46SKip Macy {
15941c24a46SKip Macy 	return _hypercall4(int, mmuext_op, op, count, success_count, domid);
16041c24a46SKip Macy }
16141c24a46SKip Macy 
16241c24a46SKip Macy static inline int
HYPERVISOR_set_gdt(unsigned long * frame_list,int entries)16341c24a46SKip Macy HYPERVISOR_set_gdt(
16441c24a46SKip Macy 	unsigned long *frame_list, int entries)
16541c24a46SKip Macy {
16641c24a46SKip Macy 	return _hypercall2(int, set_gdt, frame_list, entries);
16741c24a46SKip Macy }
16841c24a46SKip Macy 
16941c24a46SKip Macy static inline int
HYPERVISOR_stack_switch(unsigned long ss,unsigned long esp)17041c24a46SKip Macy HYPERVISOR_stack_switch(
17141c24a46SKip Macy 	unsigned long ss, unsigned long esp)
17241c24a46SKip Macy {
17341c24a46SKip Macy 	return _hypercall2(int, stack_switch, ss, esp);
17441c24a46SKip Macy }
17541c24a46SKip Macy 
17641c24a46SKip Macy static inline int
HYPERVISOR_set_callbacks(unsigned long event_selector,unsigned long event_address,unsigned long failsafe_selector,unsigned long failsafe_address)17741c24a46SKip Macy HYPERVISOR_set_callbacks(
17841c24a46SKip Macy 	unsigned long event_selector, unsigned long event_address,
17941c24a46SKip Macy 	unsigned long failsafe_selector, unsigned long failsafe_address)
18041c24a46SKip Macy {
18141c24a46SKip Macy 	return _hypercall4(int, set_callbacks,
18241c24a46SKip Macy 			   event_selector, event_address,
18341c24a46SKip Macy 			   failsafe_selector, failsafe_address);
18441c24a46SKip Macy }
18541c24a46SKip Macy 
18641c24a46SKip Macy static inline int
HYPERVISOR_fpu_taskswitch(int set)18741c24a46SKip Macy HYPERVISOR_fpu_taskswitch(
18841c24a46SKip Macy 	int set)
18941c24a46SKip Macy {
19041c24a46SKip Macy 	return _hypercall1(int, fpu_taskswitch, set);
19141c24a46SKip Macy }
19241c24a46SKip Macy 
19341c24a46SKip Macy static inline int
HYPERVISOR_sched_op(int cmd,void * arg)19441c24a46SKip Macy HYPERVISOR_sched_op(
19541c24a46SKip Macy 	int cmd, void *arg)
19641c24a46SKip Macy {
19741c24a46SKip Macy 	return _hypercall2(int, sched_op, cmd, arg);
19841c24a46SKip Macy }
19941c24a46SKip Macy 
20041c24a46SKip Macy static inline long
HYPERVISOR_set_timer_op(uint64_t timeout)20141c24a46SKip Macy HYPERVISOR_set_timer_op(
20241c24a46SKip Macy 	uint64_t timeout)
20341c24a46SKip Macy {
20441c24a46SKip Macy 	unsigned long timeout_hi = (unsigned long)(timeout>>32);
20541c24a46SKip Macy 	unsigned long timeout_lo = (unsigned long)timeout;
20641c24a46SKip Macy 	return _hypercall2(long, set_timer_op, timeout_lo, timeout_hi);
20741c24a46SKip Macy }
20871718d3cSRoger Pau Monné 
20941c24a46SKip Macy static inline int
HYPERVISOR_platform_op(struct xen_platform_op * platform_op)21041c24a46SKip Macy HYPERVISOR_platform_op(
21141c24a46SKip Macy 	struct xen_platform_op *platform_op)
21241c24a46SKip Macy {
21341c24a46SKip Macy 	platform_op->interface_version = XENPF_INTERFACE_VERSION;
21441c24a46SKip Macy 	return _hypercall1(int, platform_op, platform_op);
21541c24a46SKip Macy }
21671718d3cSRoger Pau Monné 
21741c24a46SKip Macy static inline int
HYPERVISOR_set_debugreg(int reg,unsigned long value)21841c24a46SKip Macy HYPERVISOR_set_debugreg(
21941c24a46SKip Macy 	int reg, unsigned long value)
22041c24a46SKip Macy {
22141c24a46SKip Macy 	return _hypercall2(int, set_debugreg, reg, value);
22241c24a46SKip Macy }
22341c24a46SKip Macy 
22441c24a46SKip Macy static inline unsigned long
HYPERVISOR_get_debugreg(int reg)22541c24a46SKip Macy HYPERVISOR_get_debugreg(
22641c24a46SKip Macy 	int reg)
22741c24a46SKip Macy {
22841c24a46SKip Macy 	return _hypercall1(unsigned long, get_debugreg, reg);
22941c24a46SKip Macy }
23041c24a46SKip Macy 
23141c24a46SKip Macy static inline int
HYPERVISOR_update_descriptor(uint64_t ma,uint64_t desc)23241c24a46SKip Macy HYPERVISOR_update_descriptor(
23341c24a46SKip Macy 	uint64_t ma, uint64_t desc)
23441c24a46SKip Macy {
23541c24a46SKip Macy 	return _hypercall4(int, update_descriptor, ma, ma>>32, desc, desc>>32);
23641c24a46SKip Macy }
23741c24a46SKip Macy 
23841c24a46SKip Macy static inline int
HYPERVISOR_memory_op(unsigned int cmd,void * arg)23941c24a46SKip Macy HYPERVISOR_memory_op(
24041c24a46SKip Macy 	unsigned int cmd, void *arg)
24141c24a46SKip Macy {
24241c24a46SKip Macy 	return _hypercall2(int, memory_op, cmd, arg);
24341c24a46SKip Macy }
24441c24a46SKip Macy 
2452913e88cSRobert Watson static inline int
HYPERVISOR_multicall(void * call_list,int nr_calls)2462913e88cSRobert Watson HYPERVISOR_multicall(
24741c24a46SKip Macy 	void *call_list, int nr_calls)
24841c24a46SKip Macy {
24941c24a46SKip Macy 	return _hypercall2(int, multicall, call_list, nr_calls);
25041c24a46SKip Macy }
25141c24a46SKip Macy 
25241c24a46SKip Macy static inline int
HYPERVISOR_update_va_mapping(unsigned long va,uint64_t new_val,unsigned long flags)25341c24a46SKip Macy HYPERVISOR_update_va_mapping(
25441c24a46SKip Macy 	unsigned long va, uint64_t new_val, unsigned long flags)
25541c24a46SKip Macy {
25641c24a46SKip Macy 	uint32_t hi, lo;
25741c24a46SKip Macy 
25841c24a46SKip Macy 	lo = (uint32_t)(new_val & 0xffffffff);
25941c24a46SKip Macy 	hi = (uint32_t)(new_val >> 32);
26041c24a46SKip Macy 
26141c24a46SKip Macy 	return _hypercall4(int, update_va_mapping, va,
26241c24a46SKip Macy 			   lo, hi, flags);
26341c24a46SKip Macy }
26441c24a46SKip Macy 
26541c24a46SKip Macy static inline int
HYPERVISOR_event_channel_op(int cmd,void * arg)26641c24a46SKip Macy HYPERVISOR_event_channel_op(
26741c24a46SKip Macy 	int cmd, void *arg)
26841c24a46SKip Macy {
269ecdcad65SElliott Mitchell 	return _hypercall2(int, event_channel_op, cmd, arg);
27041c24a46SKip Macy }
27141c24a46SKip Macy 
27241c24a46SKip Macy static inline int
HYPERVISOR_xen_version(int cmd,void * arg)27341c24a46SKip Macy HYPERVISOR_xen_version(
27441c24a46SKip Macy 	int cmd, void *arg)
27541c24a46SKip Macy {
27641c24a46SKip Macy 	return _hypercall2(int, xen_version, cmd, arg);
27741c24a46SKip Macy }
27841c24a46SKip Macy 
27941c24a46SKip Macy static inline int
HYPERVISOR_console_io(int cmd,int count,const char * str)28041c24a46SKip Macy HYPERVISOR_console_io(
281a231723cSRoger Pau Monné 	int cmd, int count, const char *str)
28241c24a46SKip Macy {
28341c24a46SKip Macy 	return _hypercall3(int, console_io, cmd, count, str);
28441c24a46SKip Macy }
28541c24a46SKip Macy 
28641c24a46SKip Macy static inline int
HYPERVISOR_physdev_op(int cmd,void * arg)28741c24a46SKip Macy HYPERVISOR_physdev_op(
28841c24a46SKip Macy 	int cmd, void *arg)
28941c24a46SKip Macy {
290ecdcad65SElliott Mitchell 	return _hypercall2(int, physdev_op, cmd, arg);
29141c24a46SKip Macy }
29241c24a46SKip Macy 
29341c24a46SKip Macy static inline int
HYPERVISOR_grant_table_op(unsigned int cmd,void * uop,unsigned int count)29441c24a46SKip Macy HYPERVISOR_grant_table_op(
29541c24a46SKip Macy 	unsigned int cmd, void *uop, unsigned int count)
29641c24a46SKip Macy {
29741c24a46SKip Macy 	return _hypercall3(int, grant_table_op, cmd, uop, count);
29841c24a46SKip Macy }
29941c24a46SKip Macy 
30041c24a46SKip Macy static inline int
HYPERVISOR_update_va_mapping_otherdomain(unsigned long va,uint64_t new_val,unsigned long flags,domid_t domid)30141c24a46SKip Macy HYPERVISOR_update_va_mapping_otherdomain(
30241c24a46SKip Macy 	unsigned long va, uint64_t new_val, unsigned long flags, domid_t domid)
30341c24a46SKip Macy {
30441c24a46SKip Macy 	uint32_t hi, lo;
30541c24a46SKip Macy 
30641c24a46SKip Macy 	lo = (uint32_t)(new_val & 0xffffffff);
30741c24a46SKip Macy 	hi = (uint32_t)(new_val >> 32);
30841c24a46SKip Macy 
30941c24a46SKip Macy 	return _hypercall5(int, update_va_mapping_otherdomain, va,
31041c24a46SKip Macy 			   lo, hi, flags, domid);
31141c24a46SKip Macy }
31241c24a46SKip Macy 
31341c24a46SKip Macy static inline int
HYPERVISOR_vm_assist(unsigned int cmd,unsigned int type)31441c24a46SKip Macy HYPERVISOR_vm_assist(
31541c24a46SKip Macy 	unsigned int cmd, unsigned int type)
31641c24a46SKip Macy {
31741c24a46SKip Macy 	return _hypercall2(int, vm_assist, cmd, type);
31841c24a46SKip Macy }
31941c24a46SKip Macy 
32041c24a46SKip Macy static inline int
HYPERVISOR_vcpu_op(int cmd,int vcpuid,void * extra_args)32141c24a46SKip Macy HYPERVISOR_vcpu_op(
32241c24a46SKip Macy 	int cmd, int vcpuid, void *extra_args)
32341c24a46SKip Macy {
32441c24a46SKip Macy 	return _hypercall3(int, vcpu_op, cmd, vcpuid, extra_args);
32541c24a46SKip Macy }
32641c24a46SKip Macy 
32741c24a46SKip Macy static inline int
HYPERVISOR_suspend(unsigned long srec)32841c24a46SKip Macy HYPERVISOR_suspend(
32941c24a46SKip Macy 	unsigned long srec)
33041c24a46SKip Macy {
33141c24a46SKip Macy 	struct sched_shutdown sched_shutdown = {
33241c24a46SKip Macy 		.reason = SHUTDOWN_suspend
33341c24a46SKip Macy 	};
33441c24a46SKip Macy 
335ecdcad65SElliott Mitchell 	return _hypercall3(int, sched_op, SCHEDOP_shutdown,
336ecdcad65SElliott Mitchell 			   &sched_shutdown, srec);
33741c24a46SKip Macy }
33841c24a46SKip Macy 
33941c24a46SKip Macy static inline int
HYPERVISOR_callback_op(int cmd,void * arg)34041c24a46SKip Macy HYPERVISOR_callback_op(
34141c24a46SKip Macy 	int cmd, void *arg)
34241c24a46SKip Macy {
34341c24a46SKip Macy 	return _hypercall2(int, callback_op, cmd, arg);
34441c24a46SKip Macy }
34541c24a46SKip Macy 
34641c24a46SKip Macy static inline unsigned long
HYPERVISOR_hvm_op(int op,void * arg)34741c24a46SKip Macy HYPERVISOR_hvm_op(
34841c24a46SKip Macy 	int op, void *arg)
34941c24a46SKip Macy {
35041c24a46SKip Macy 	return _hypercall2(unsigned long, hvm_op, op, arg);
35141c24a46SKip Macy }
35241c24a46SKip Macy 
35341c24a46SKip Macy static inline int
HYPERVISOR_xenoprof_op(int op,void * arg)35441c24a46SKip Macy HYPERVISOR_xenoprof_op(
35541c24a46SKip Macy 	int op, void *arg)
35641c24a46SKip Macy {
35741c24a46SKip Macy 	return _hypercall2(int, xenoprof_op, op, arg);
35841c24a46SKip Macy }
35941c24a46SKip Macy 
36041c24a46SKip Macy static inline int
HYPERVISOR_kexec_op(unsigned long op,void * args)36141c24a46SKip Macy HYPERVISOR_kexec_op(
36241c24a46SKip Macy 	unsigned long op, void *args)
36341c24a46SKip Macy {
36441c24a46SKip Macy 	return _hypercall2(int, kexec_op, op, args);
36541c24a46SKip Macy }
366ed78016dSRoger Pau Monne 
367ed78016dSRoger Pau Monne static inline int
HYPERVISOR_dm_op(domid_t domid,unsigned int nr_bufs,const void * bufs)368ed78016dSRoger Pau Monne HYPERVISOR_dm_op(
369ed78016dSRoger Pau Monne 	domid_t domid, unsigned int nr_bufs, const void *bufs)
370ed78016dSRoger Pau Monne {
371ed78016dSRoger Pau Monne 	return _hypercall3(int, dm_op, domid, nr_bufs, bufs);
372ed78016dSRoger Pau Monne }
37341c24a46SKip Macy #endif /* __HYPERCALL_H__ */
37441c24a46SKip Macy 
37541c24a46SKip Macy /*
37641c24a46SKip Macy  * Local variables:
37741c24a46SKip Macy  *  c-file-style: "linux"
37841c24a46SKip Macy  *  indent-tabs-mode: t
37941c24a46SKip Macy  *  c-indent-level: 8
38041c24a46SKip Macy  *  c-basic-offset: 8
38141c24a46SKip Macy  *  tab-width: 8
38241c24a46SKip Macy  * End:
38341c24a46SKip Macy  */
384