1 /******************************************************************************
2  * hypercall.h
3  */
4 
5 #ifndef __XEN_HYPERCALL_H__
6 #define __XEN_HYPERCALL_H__
7 
8 #include <xen/types.h>
9 #include <xen/time.h>
10 #include <public/xen.h>
11 #include <public/domctl.h>
12 #include <public/sysctl.h>
13 #include <public/platform.h>
14 #include <public/event_channel.h>
15 #include <public/tmem.h>
16 #include <public/version.h>
17 #include <public/pmu.h>
18 #include <public/hvm/dm_op.h>
19 #include <asm/hypercall.h>
20 #include <xsm/xsm.h>
21 
22 extern long
23 do_sched_op(
24     int cmd,
25     XEN_GUEST_HANDLE_PARAM(void) arg);
26 
27 extern long
28 do_domctl(
29     XEN_GUEST_HANDLE_PARAM(xen_domctl_t) u_domctl);
30 
31 extern long
32 arch_do_domctl(
33     struct xen_domctl *domctl, struct domain *d,
34     XEN_GUEST_HANDLE_PARAM(xen_domctl_t) u_domctl);
35 
36 extern long
37 do_sysctl(
38     XEN_GUEST_HANDLE_PARAM(xen_sysctl_t) u_sysctl);
39 
40 extern long
41 arch_do_sysctl(
42     struct xen_sysctl *sysctl,
43     XEN_GUEST_HANDLE_PARAM(xen_sysctl_t) u_sysctl);
44 
45 extern long
46 do_platform_op(
47     XEN_GUEST_HANDLE_PARAM(xen_platform_op_t) u_xenpf_op);
48 
49 /*
50  * To allow safe resume of do_memory_op() after preemption, we need to know
51  * at what point in the page list to resume. For this purpose I steal the
52  * high-order bits of the @cmd parameter, which are otherwise unused and zero.
53  *
54  * Note that both of these values are effectively part of the ABI, even if
55  * we don't need to make them a formal part of it: A guest suspended for
56  * migration in the middle of a continuation would fail to work if resumed on
57  * a hypervisor using different values.
58  */
59 #define MEMOP_EXTENT_SHIFT 6 /* cmd[:6] == start_extent */
60 #define MEMOP_CMD_MASK     ((1 << MEMOP_EXTENT_SHIFT) - 1)
61 
62 extern long
63 do_memory_op(
64     unsigned long cmd,
65     XEN_GUEST_HANDLE_PARAM(void) arg);
66 
67 extern long
68 do_multicall(
69     XEN_GUEST_HANDLE_PARAM(multicall_entry_t) call_list,
70     unsigned int nr_calls);
71 
72 extern long
73 do_set_timer_op(
74     s_time_t timeout);
75 
76 extern long
77 do_event_channel_op(
78     int cmd, XEN_GUEST_HANDLE_PARAM(void) arg);
79 
80 extern long
81 do_xen_version(
82     int cmd,
83     XEN_GUEST_HANDLE_PARAM(void) arg);
84 
85 extern long
86 do_console_io(
87     int cmd,
88     int count,
89     XEN_GUEST_HANDLE_PARAM(char) buffer);
90 
91 extern long
92 do_grant_table_op(
93     unsigned int cmd,
94     XEN_GUEST_HANDLE_PARAM(void) uop,
95     unsigned int count);
96 
97 extern long
98 do_vm_assist(
99     unsigned int cmd,
100     unsigned int type);
101 
102 extern long
103 do_vcpu_op(
104     int cmd,
105     unsigned int vcpuid,
106     XEN_GUEST_HANDLE_PARAM(void) arg);
107 
108 struct vcpu;
109 extern long
110 arch_do_vcpu_op(int cmd,
111     struct vcpu *v,
112     XEN_GUEST_HANDLE_PARAM(void) arg);
113 
114 extern long
115 do_nmi_op(
116     unsigned int cmd,
117     XEN_GUEST_HANDLE_PARAM(void) arg);
118 
119 extern long
120 do_hvm_op(
121     unsigned long op,
122     XEN_GUEST_HANDLE_PARAM(void) arg);
123 
124 extern long
125 do_kexec_op(
126     unsigned long op,
127     XEN_GUEST_HANDLE_PARAM(void) uarg);
128 
129 extern long
130 do_xsm_op(
131     XEN_GUEST_HANDLE_PARAM(xsm_op_t) u_xsm_op);
132 
133 #ifdef CONFIG_TMEM
134 extern long
135 do_tmem_op(
136     XEN_GUEST_HANDLE_PARAM(tmem_op_t) uops);
137 #endif
138 
139 extern long
140 do_xenoprof_op(int op, XEN_GUEST_HANDLE_PARAM(void) arg);
141 
142 extern long
143 do_xenpmu_op(unsigned int op, XEN_GUEST_HANDLE_PARAM(xen_pmu_params_t) arg);
144 
145 extern long
146 do_dm_op(
147     domid_t domid,
148     unsigned int nr_bufs,
149     XEN_GUEST_HANDLE_PARAM(xen_dm_op_buf_t) bufs);
150 
151 #ifdef CONFIG_COMPAT
152 
153 extern int
154 compat_memory_op(
155     unsigned int cmd,
156     XEN_GUEST_HANDLE_PARAM(void) arg);
157 
158 extern int
159 compat_grant_table_op(
160     unsigned int cmd,
161     XEN_GUEST_HANDLE_PARAM(void) uop,
162     unsigned int count);
163 
164 extern int
165 compat_vcpu_op(
166     int cmd,
167     unsigned int vcpuid,
168     XEN_GUEST_HANDLE_PARAM(void) arg);
169 
170 extern int
171 compat_xenoprof_op(int op, XEN_GUEST_HANDLE_PARAM(void) arg);
172 
173 extern int
174 compat_xen_version(
175     int cmd,
176     XEN_GUEST_HANDLE_PARAM(void) arg);
177 
178 extern int
179 compat_sched_op(
180     int cmd,
181     XEN_GUEST_HANDLE_PARAM(void) arg);
182 
183 extern int
184 compat_set_timer_op(
185     u32 lo,
186     s32 hi);
187 
188 extern int compat_xsm_op(
189     XEN_GUEST_HANDLE_PARAM(xsm_op_t) op);
190 
191 extern int compat_kexec_op(unsigned long op, XEN_GUEST_HANDLE_PARAM(void) uarg);
192 
193 extern int compat_vm_assist(unsigned int cmd, unsigned int type);
194 
195 DEFINE_XEN_GUEST_HANDLE(multicall_entry_compat_t);
196 extern int compat_multicall(
197     XEN_GUEST_HANDLE_PARAM(multicall_entry_compat_t) call_list,
198     uint32_t nr_calls);
199 
200 #include <compat/hvm/dm_op.h>
201 
202 extern int
203 compat_dm_op(
204     domid_t domid,
205     unsigned int nr_bufs,
206     XEN_GUEST_HANDLE_PARAM(void) bufs);
207 
208 #endif
209 
210 void arch_get_xen_caps(xen_capabilities_info_t *info);
211 
212 #endif /* __XEN_HYPERCALL_H__ */
213