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