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