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