/* Generated file, do not edit! */ DEFINE_XEN_GUEST_HANDLE(multicall_entry_compat_t); typedef struct compat_platform_op compat_platform_op_t; DEFINE_XEN_GUEST_HANDLE(compat_platform_op_t); DEFINE_XEN_GUEST_HANDLE(trap_info_compat_t); DEFINE_XEN_GUEST_HANDLE(physdev_op_compat_t); long do_physdev_op(int cmd, XEN_GUEST_HANDLE_PARAM(void) arg); long hvm_physdev_op(int cmd, XEN_GUEST_HANDLE_PARAM(void) arg); int compat_physdev_op(int cmd, XEN_GUEST_HANDLE_PARAM(void) arg); long do_grant_table_op(unsigned int cmd, XEN_GUEST_HANDLE_PARAM(void) uop, unsigned int count); long hvm_grant_table_op(unsigned int cmd, XEN_GUEST_HANDLE_PARAM(void) uop, unsigned int count); int compat_grant_table_op(unsigned int cmd, XEN_GUEST_HANDLE_PARAM(void) uop, unsigned int count); long do_memory_op(unsigned long cmd, XEN_GUEST_HANDLE_PARAM(void) arg); long hvm_memory_op(unsigned long cmd, XEN_GUEST_HANDLE_PARAM(void) arg); long do_xen_version(int cmd, XEN_GUEST_HANDLE_PARAM(void) arg); int compat_xen_version(int cmd, XEN_GUEST_HANDLE_PARAM(void) arg); long do_vcpu_op(int cmd, unsigned int vcpuid, XEN_GUEST_HANDLE_PARAM(void) arg); int compat_vcpu_op(int cmd, unsigned int vcpuid, XEN_GUEST_HANDLE_PARAM(void) arg); long do_sched_op(int cmd, XEN_GUEST_HANDLE_PARAM(void) arg); int compat_sched_op(int cmd, XEN_GUEST_HANDLE_PARAM(void) arg); long do_xsm_op(XEN_GUEST_HANDLE_PARAM(void) op); int compat_xsm_op(XEN_GUEST_HANDLE_PARAM(void) op); long do_callback_op(int cmd, XEN_GUEST_HANDLE_PARAM(const_void) arg); int compat_callback_op(int cmd, XEN_GUEST_HANDLE_PARAM(const_void) arg); long do_kexec_op(unsigned int op, XEN_GUEST_HANDLE_PARAM(void) uarg); int compat_kexec_op(unsigned int op, XEN_GUEST_HANDLE_PARAM(void) uarg); long do_iret(void); int compat_iret(void); long do_nmi_op(unsigned int cmd, XEN_GUEST_HANDLE_PARAM(void) arg); int compat_nmi_op(unsigned int cmd, XEN_GUEST_HANDLE_PARAM(void) arg); long do_xenoprof_op(int op, XEN_GUEST_HANDLE_PARAM(void) arg); int compat_xenoprof_op(int op, XEN_GUEST_HANDLE_PARAM(void) arg); int compat_set_timer_op(uint32_t lo, int32_t hi); int compat_multicall(XEN_GUEST_HANDLE_PARAM(multicall_entry_compat_t) call_list, uint32_t nr_calls); int compat_memory_op(unsigned int cmd, XEN_GUEST_HANDLE_PARAM(void) arg); int compat_dm_op(domid_t domid, unsigned int nr_bufs, XEN_GUEST_HANDLE_PARAM(void) bufs); int compat_mmuext_op(XEN_GUEST_HANDLE_PARAM(void) arg, unsigned int count, XEN_GUEST_HANDLE_PARAM(uint) pdone, unsigned int foreigndom); int compat_set_trap_table(XEN_GUEST_HANDLE_PARAM(trap_info_compat_t) traps); int compat_set_gdt(XEN_GUEST_HANDLE_PARAM(uint) frame_list, unsigned int entries); int compat_set_callbacks(unsigned long event_selector, unsigned long event_address, unsigned long failsafe_selector, unsigned long failsafe_address); int compat_update_descriptor(uint32_t pa_lo, uint32_t pa_hi, uint32_t desc_lo, uint32_t desc_hi); int compat_update_va_mapping(unsigned int va, uint32_t lo, uint32_t hi, unsigned int flags); int compat_physdev_op_compat(XEN_GUEST_HANDLE_PARAM(physdev_op_compat_t) uop); int compat_update_va_mapping_otherdomain(unsigned int va, uint32_t lo, uint32_t hi, unsigned int flags, domid_t domid); int compat_platform_op(XEN_GUEST_HANDLE_PARAM(compat_platform_op_t) u_xenpf_op); long do_event_channel_op_compat(XEN_GUEST_HANDLE_PARAM(evtchn_op_t) uop); long do_physdev_op_compat(XEN_GUEST_HANDLE_PARAM(physdev_op_t) uop); long do_sched_op_compat(int cmd, unsigned long arg); long do_set_timer_op(s_time_t timeout); long do_console_io(unsigned int cmd, unsigned int count, XEN_GUEST_HANDLE_PARAM(char) buffer); long do_vm_assist(unsigned int cmd, unsigned int type); long do_event_channel_op(int cmd, XEN_GUEST_HANDLE_PARAM(void) arg); long do_mmuext_op(XEN_GUEST_HANDLE_PARAM(mmuext_op_t) uops, unsigned int count, XEN_GUEST_HANDLE_PARAM(uint) pdone, unsigned int foreigndom); long do_multicall(XEN_GUEST_HANDLE_PARAM(multicall_entry_t) call_list, unsigned int nr_calls); long do_mmu_update(XEN_GUEST_HANDLE_PARAM(mmu_update_t) ureqs, unsigned int count, XEN_GUEST_HANDLE_PARAM(uint) pdone, unsigned int foreigndom); long do_stack_switch(unsigned long ss, unsigned long esp); long do_fpu_taskswitch(int set); long do_set_debugreg(int reg, unsigned long value); long do_get_debugreg(int reg); long do_set_segment_base(unsigned int which, unsigned long base); long do_mca(XEN_GUEST_HANDLE_PARAM(xen_mc_t) u_xen_mc); long do_set_trap_table(XEN_GUEST_HANDLE_PARAM(const_trap_info_t) traps); long do_set_gdt(XEN_GUEST_HANDLE_PARAM(xen_ulong_t) frame_list, unsigned int entries); long do_set_callbacks(unsigned long event_address, unsigned long failsafe_address, unsigned long syscall_address); long do_update_descriptor(uint64_t gaddr, seg_desc_t desc); long do_update_va_mapping(unsigned long va, uint64_t val64, unsigned long flags); long do_update_va_mapping_otherdomain(unsigned long va, uint64_t val64, unsigned long flags, domid_t domid); long do_dm_op(domid_t domid, unsigned int nr_bufs, XEN_GUEST_HANDLE_PARAM(xen_dm_op_buf_t) bufs); long do_sysctl(XEN_GUEST_HANDLE_PARAM(xen_sysctl_t) u_sysctl); long do_domctl(XEN_GUEST_HANDLE_PARAM(xen_domctl_t) u_domctl); long do_paging_domctl_cont(XEN_GUEST_HANDLE_PARAM(xen_domctl_t) u_domctl); long do_platform_op(XEN_GUEST_HANDLE_PARAM(xen_platform_op_t) u_xenpf_op); long do_hvm_op(unsigned long op, XEN_GUEST_HANDLE_PARAM(void) arg); long do_hypfs_op(unsigned int cmd, XEN_GUEST_HANDLE_PARAM(const_char) arg1, unsigned long arg2, XEN_GUEST_HANDLE_PARAM(void) arg3, unsigned long arg4); long do_xenpmu_op(unsigned int op, XEN_GUEST_HANDLE_PARAM(xen_pmu_params_t) arg); #define call_handlers_hvm64(num, ret, a1, a2, a3, a4, a5) \ { \ uint64_t mask = 1ULL << num; \ if ( likely(mask & ((1ULL << __HYPERVISOR_vcpu_op) | (1ULL << __HYPERVISOR_event_channel_op))) ) \ { \ if ( num == __HYPERVISOR_vcpu_op ) \ ret = do_vcpu_op((int)(a1), (unsigned int)(a2), (XEN_GUEST_HANDLE_PARAM(void)){ _p(a3) }); \ else \ ret = do_event_channel_op((int)(a1), (XEN_GUEST_HANDLE_PARAM(void)){ _p(a2) }); \ } \ else switch ( num ) \ { \ case __HYPERVISOR_platform_op: \ ret = do_platform_op((XEN_GUEST_HANDLE_PARAM(xen_platform_op_t)){ _p(a1) }); \ break; \ case __HYPERVISOR_memory_op: \ ret = hvm_memory_op((unsigned long)(a1), (XEN_GUEST_HANDLE_PARAM(void)){ _p(a2) }); \ break; \ case __HYPERVISOR_multicall: \ ret = do_multicall((XEN_GUEST_HANDLE_PARAM(multicall_entry_t)){ _p(a1) }, (unsigned int)(a2)); \ break; \ case __HYPERVISOR_set_timer_op: \ ret = do_set_timer_op((s_time_t)(a1)); \ break; \ case __HYPERVISOR_xen_version: \ ret = do_xen_version((int)(a1), (XEN_GUEST_HANDLE_PARAM(void)){ _p(a2) }); \ break; \ case __HYPERVISOR_console_io: \ ret = do_console_io((unsigned int)(a1), (unsigned int)(a2), (XEN_GUEST_HANDLE_PARAM(char)){ _p(a3) }); \ break; \ case __HYPERVISOR_grant_table_op: \ ret = hvm_grant_table_op((unsigned int)(a1), (XEN_GUEST_HANDLE_PARAM(void)){ _p(a2) }, (unsigned int)(a3)); \ break; \ case __HYPERVISOR_vm_assist: \ ret = do_vm_assist((unsigned int)(a1), (unsigned int)(a2)); \ break; \ case __HYPERVISOR_mmuext_op: \ ret = do_mmuext_op((XEN_GUEST_HANDLE_PARAM(mmuext_op_t)){ _p(a1) }, (unsigned int)(a2), (XEN_GUEST_HANDLE_PARAM(uint)){ _p(a3) }, (unsigned int)(a4)); \ break; \ case __HYPERVISOR_xsm_op: \ ret = do_xsm_op((XEN_GUEST_HANDLE_PARAM(void)){ _p(a1) }); \ break; \ case __HYPERVISOR_sched_op: \ ret = do_sched_op((int)(a1), (XEN_GUEST_HANDLE_PARAM(void)){ _p(a2) }); \ break; \ case __HYPERVISOR_physdev_op: \ ret = hvm_physdev_op((int)(a1), (XEN_GUEST_HANDLE_PARAM(void)){ _p(a2) }); \ break; \ case __HYPERVISOR_hvm_op: \ ret = do_hvm_op((unsigned long)(a1), (XEN_GUEST_HANDLE_PARAM(void)){ _p(a2) }); \ break; \ case __HYPERVISOR_sysctl: \ ret = do_sysctl((XEN_GUEST_HANDLE_PARAM(xen_sysctl_t)){ _p(a1) }); \ break; \ case __HYPERVISOR_domctl: \ ret = do_domctl((XEN_GUEST_HANDLE_PARAM(xen_domctl_t)){ _p(a1) }); \ break; \ case __HYPERVISOR_xenpmu_op: \ ret = do_xenpmu_op((unsigned int)(a1), (XEN_GUEST_HANDLE_PARAM(xen_pmu_params_t)){ _p(a2) }); \ break; \ case __HYPERVISOR_dm_op: \ ret = do_dm_op((domid_t)(a1), (unsigned int)(a2), (XEN_GUEST_HANDLE_PARAM(xen_dm_op_buf_t)){ _p(a3) }); \ break; \ case __HYPERVISOR_hypfs_op: \ ret = do_hypfs_op((unsigned int)(a1), (XEN_GUEST_HANDLE_PARAM(const_char)){ _p(a2) }, (unsigned long)(a3), (XEN_GUEST_HANDLE_PARAM(void)){ _p(a4) }, (unsigned long)(a5)); \ break; \ case __HYPERVISOR_paging_domctl_cont: \ ret = do_paging_domctl_cont((XEN_GUEST_HANDLE_PARAM(xen_domctl_t)){ _p(a1) }); \ break; \ default: \ ret = -ENOSYS; \ break; \ } \ } #define hypercall_args_hvm64 \ { \ [__HYPERVISOR_platform_op] = 1, \ [__HYPERVISOR_memory_op] = 2, \ [__HYPERVISOR_multicall] = 2, \ [__HYPERVISOR_set_timer_op] = 1, \ [__HYPERVISOR_xen_version] = 2, \ [__HYPERVISOR_console_io] = 3, \ [__HYPERVISOR_grant_table_op] = 3, \ [__HYPERVISOR_vm_assist] = 2, \ [__HYPERVISOR_vcpu_op] = 3, \ [__HYPERVISOR_mmuext_op] = 4, \ [__HYPERVISOR_xsm_op] = 1, \ [__HYPERVISOR_sched_op] = 2, \ [__HYPERVISOR_event_channel_op] = 2, \ [__HYPERVISOR_physdev_op] = 2, \ [__HYPERVISOR_hvm_op] = 2, \ [__HYPERVISOR_sysctl] = 1, \ [__HYPERVISOR_domctl] = 1, \ [__HYPERVISOR_xenpmu_op] = 2, \ [__HYPERVISOR_dm_op] = 3, \ [__HYPERVISOR_hypfs_op] = 5, \ [__HYPERVISOR_paging_domctl_cont] = 1, \ } #define call_handlers_pv32(num, ret, a1, a2, a3, a4, a5) \ { \ uint64_t mask = 1ULL << num; \ if ( likely(mask & ((1ULL << __HYPERVISOR_mmu_update) | (1ULL << __HYPERVISOR_iret))) ) \ { \ if ( num == __HYPERVISOR_mmu_update ) \ ret = do_mmu_update((XEN_GUEST_HANDLE_PARAM(mmu_update_t)){ _p(a1) }, (unsigned int)(a2), (XEN_GUEST_HANDLE_PARAM(uint)){ _p(a3) }, (unsigned int)(a4)); \ else \ ret = compat_iret(); \ } \ else if ( likely(mask & ((1ULL << __HYPERVISOR_stack_switch) | (1ULL << __HYPERVISOR_multicall) | (1ULL << __HYPERVISOR_set_segment_base) | (1ULL << __HYPERVISOR_mmuext_op))) ) \ { \ switch ( num ) \ { \ case __HYPERVISOR_stack_switch: \ ret = do_stack_switch((unsigned long)(a1), (unsigned long)(a2)); \ break; \ case __HYPERVISOR_multicall: \ ret = compat_multicall((XEN_GUEST_HANDLE_PARAM(multicall_entry_compat_t)){ _p(a1) }, (uint32_t)(a2)); \ break; \ case __HYPERVISOR_set_segment_base: \ ret = do_set_segment_base((unsigned int)(a1), (unsigned long)(a2)); \ break; \ case __HYPERVISOR_mmuext_op: \ ret = compat_mmuext_op((XEN_GUEST_HANDLE_PARAM(void)){ _p(a1) }, (unsigned int)(a2), (XEN_GUEST_HANDLE_PARAM(uint)){ _p(a3) }, (unsigned int)(a4)); \ break; \ default: \ ret = -ENOSYS; \ break; \ } \ } \ else switch ( num ) \ { \ case __HYPERVISOR_set_trap_table: \ ret = compat_set_trap_table((XEN_GUEST_HANDLE_PARAM(trap_info_compat_t)){ _p(a1) }); \ break; \ case __HYPERVISOR_set_gdt: \ ret = compat_set_gdt((XEN_GUEST_HANDLE_PARAM(uint)){ _p(a1) }, (unsigned int)(a2)); \ break; \ case __HYPERVISOR_set_callbacks: \ ret = compat_set_callbacks((unsigned long)(a1), (unsigned long)(a2), (unsigned long)(a3), (unsigned long)(a4)); \ break; \ case __HYPERVISOR_fpu_taskswitch: \ ret = do_fpu_taskswitch((int)(a1)); \ break; \ case __HYPERVISOR_sched_op_compat: \ ret = do_sched_op_compat((int)(a1), (unsigned long)(a2)); \ break; \ case __HYPERVISOR_platform_op: \ ret = compat_platform_op((XEN_GUEST_HANDLE_PARAM(compat_platform_op_t)){ _p(a1) }); \ break; \ case __HYPERVISOR_set_debugreg: \ ret = do_set_debugreg((int)(a1), (unsigned long)(a2)); \ break; \ case __HYPERVISOR_get_debugreg: \ ret = do_get_debugreg((int)(a1)); \ break; \ case __HYPERVISOR_update_descriptor: \ ret = compat_update_descriptor((uint32_t)(a1), (uint32_t)(a2), (uint32_t)(a3), (uint32_t)(a4)); \ break; \ case __HYPERVISOR_memory_op: \ ret = compat_memory_op((unsigned int)(a1), (XEN_GUEST_HANDLE_PARAM(void)){ _p(a2) }); \ break; \ case __HYPERVISOR_update_va_mapping: \ ret = compat_update_va_mapping((unsigned int)(a1), (uint32_t)(a2), (uint32_t)(a3), (unsigned int)(a4)); \ break; \ case __HYPERVISOR_set_timer_op: \ ret = compat_set_timer_op((uint32_t)(a1), (int32_t)(a2)); \ break; \ case __HYPERVISOR_event_channel_op_compat: \ ret = do_event_channel_op_compat((XEN_GUEST_HANDLE_PARAM(evtchn_op_t)){ _p(a1) }); \ break; \ case __HYPERVISOR_xen_version: \ ret = compat_xen_version((int)(a1), (XEN_GUEST_HANDLE_PARAM(void)){ _p(a2) }); \ break; \ case __HYPERVISOR_console_io: \ ret = do_console_io((unsigned int)(a1), (unsigned int)(a2), (XEN_GUEST_HANDLE_PARAM(char)){ _p(a3) }); \ break; \ case __HYPERVISOR_physdev_op_compat: \ ret = compat_physdev_op_compat((XEN_GUEST_HANDLE_PARAM(physdev_op_compat_t)){ _p(a1) }); \ break; \ case __HYPERVISOR_grant_table_op: \ ret = compat_grant_table_op((unsigned int)(a1), (XEN_GUEST_HANDLE_PARAM(void)){ _p(a2) }, (unsigned int)(a3)); \ break; \ case __HYPERVISOR_vm_assist: \ ret = do_vm_assist((unsigned int)(a1), (unsigned int)(a2)); \ break; \ case __HYPERVISOR_update_va_mapping_otherdomain: \ ret = compat_update_va_mapping_otherdomain((unsigned int)(a1), (uint32_t)(a2), (uint32_t)(a3), (unsigned int)(a4), (domid_t)(a5)); \ break; \ case __HYPERVISOR_vcpu_op: \ ret = compat_vcpu_op((int)(a1), (unsigned int)(a2), (XEN_GUEST_HANDLE_PARAM(void)){ _p(a3) }); \ break; \ case __HYPERVISOR_xsm_op: \ ret = compat_xsm_op((XEN_GUEST_HANDLE_PARAM(void)){ _p(a1) }); \ break; \ case __HYPERVISOR_nmi_op: \ ret = compat_nmi_op((unsigned int)(a1), (XEN_GUEST_HANDLE_PARAM(void)){ _p(a2) }); \ break; \ case __HYPERVISOR_sched_op: \ ret = compat_sched_op((int)(a1), (XEN_GUEST_HANDLE_PARAM(void)){ _p(a2) }); \ break; \ case __HYPERVISOR_callback_op: \ ret = compat_callback_op((int)(a1), (XEN_GUEST_HANDLE_PARAM(const_void)){ _p(a2) }); \ break; \ case __HYPERVISOR_xenoprof_op: \ ret = compat_xenoprof_op((int)(a1), (XEN_GUEST_HANDLE_PARAM(void)){ _p(a2) }); \ break; \ case __HYPERVISOR_event_channel_op: \ ret = do_event_channel_op((int)(a1), (XEN_GUEST_HANDLE_PARAM(void)){ _p(a2) }); \ break; \ case __HYPERVISOR_physdev_op: \ ret = compat_physdev_op((int)(a1), (XEN_GUEST_HANDLE_PARAM(void)){ _p(a2) }); \ break; \ case __HYPERVISOR_hvm_op: \ ret = do_hvm_op((unsigned long)(a1), (XEN_GUEST_HANDLE_PARAM(void)){ _p(a2) }); \ break; \ case __HYPERVISOR_sysctl: \ ret = do_sysctl((XEN_GUEST_HANDLE_PARAM(xen_sysctl_t)){ _p(a1) }); \ break; \ case __HYPERVISOR_domctl: \ ret = do_domctl((XEN_GUEST_HANDLE_PARAM(xen_domctl_t)){ _p(a1) }); \ break; \ case __HYPERVISOR_kexec_op: \ ret = compat_kexec_op((unsigned int)(a1), (XEN_GUEST_HANDLE_PARAM(void)){ _p(a2) }); \ break; \ case __HYPERVISOR_xenpmu_op: \ ret = do_xenpmu_op((unsigned int)(a1), (XEN_GUEST_HANDLE_PARAM(xen_pmu_params_t)){ _p(a2) }); \ break; \ case __HYPERVISOR_dm_op: \ ret = compat_dm_op((domid_t)(a1), (unsigned int)(a2), (XEN_GUEST_HANDLE_PARAM(void)){ _p(a3) }); \ break; \ case __HYPERVISOR_hypfs_op: \ ret = do_hypfs_op((unsigned int)(a1), (XEN_GUEST_HANDLE_PARAM(const_char)){ _p(a2) }, (unsigned long)(a3), (XEN_GUEST_HANDLE_PARAM(void)){ _p(a4) }, (unsigned long)(a5)); \ break; \ case __HYPERVISOR_mca: \ ret = do_mca((XEN_GUEST_HANDLE_PARAM(xen_mc_t)){ _p(a1) }); \ break; \ case __HYPERVISOR_paging_domctl_cont: \ ret = do_paging_domctl_cont((XEN_GUEST_HANDLE_PARAM(xen_domctl_t)){ _p(a1) }); \ break; \ default: \ ret = -ENOSYS; \ break; \ } \ } #define hypercall_args_pv32 \ { \ [__HYPERVISOR_set_trap_table] = 1, \ [__HYPERVISOR_mmu_update] = 4, \ [__HYPERVISOR_set_gdt] = 2, \ [__HYPERVISOR_stack_switch] = 2, \ [__HYPERVISOR_set_callbacks] = 4, \ [__HYPERVISOR_fpu_taskswitch] = 1, \ [__HYPERVISOR_sched_op_compat] = 2, \ [__HYPERVISOR_platform_op] = 1, \ [__HYPERVISOR_set_debugreg] = 2, \ [__HYPERVISOR_get_debugreg] = 1, \ [__HYPERVISOR_update_descriptor] = 4, \ [__HYPERVISOR_memory_op] = 2, \ [__HYPERVISOR_multicall] = 2, \ [__HYPERVISOR_update_va_mapping] = 4, \ [__HYPERVISOR_set_timer_op] = 2, \ [__HYPERVISOR_event_channel_op_compat] = 1, \ [__HYPERVISOR_xen_version] = 2, \ [__HYPERVISOR_console_io] = 3, \ [__HYPERVISOR_physdev_op_compat] = 1, \ [__HYPERVISOR_grant_table_op] = 3, \ [__HYPERVISOR_vm_assist] = 2, \ [__HYPERVISOR_update_va_mapping_otherdomain] = 5, \ [__HYPERVISOR_iret] = 0, \ [__HYPERVISOR_vcpu_op] = 3, \ [__HYPERVISOR_set_segment_base] = 2, \ [__HYPERVISOR_mmuext_op] = 4, \ [__HYPERVISOR_xsm_op] = 1, \ [__HYPERVISOR_nmi_op] = 2, \ [__HYPERVISOR_sched_op] = 2, \ [__HYPERVISOR_callback_op] = 2, \ [__HYPERVISOR_xenoprof_op] = 2, \ [__HYPERVISOR_event_channel_op] = 2, \ [__HYPERVISOR_physdev_op] = 2, \ [__HYPERVISOR_hvm_op] = 2, \ [__HYPERVISOR_sysctl] = 1, \ [__HYPERVISOR_domctl] = 1, \ [__HYPERVISOR_kexec_op] = 2, \ [__HYPERVISOR_xenpmu_op] = 2, \ [__HYPERVISOR_dm_op] = 3, \ [__HYPERVISOR_hypfs_op] = 5, \ [__HYPERVISOR_mca] = 1, \ [__HYPERVISOR_paging_domctl_cont] = 1, \ } #define call_handlers_hvm32(num, ret, a1, a2, a3, a4, a5) \ { \ uint64_t mask = 1ULL << num; \ if ( likely(mask & ((1ULL << __HYPERVISOR_vcpu_op) | (1ULL << __HYPERVISOR_event_channel_op))) ) \ { \ if ( num == __HYPERVISOR_vcpu_op ) \ ret = compat_vcpu_op((int)(a1), (unsigned int)(a2), (XEN_GUEST_HANDLE_PARAM(void)){ _p(a3) }); \ else \ ret = do_event_channel_op((int)(a1), (XEN_GUEST_HANDLE_PARAM(void)){ _p(a2) }); \ } \ else switch ( num ) \ { \ case __HYPERVISOR_platform_op: \ ret = compat_platform_op((XEN_GUEST_HANDLE_PARAM(compat_platform_op_t)){ _p(a1) }); \ break; \ case __HYPERVISOR_memory_op: \ ret = hvm_memory_op((unsigned long)(a1), (XEN_GUEST_HANDLE_PARAM(void)){ _p(a2) }); \ break; \ case __HYPERVISOR_multicall: \ ret = compat_multicall((XEN_GUEST_HANDLE_PARAM(multicall_entry_compat_t)){ _p(a1) }, (uint32_t)(a2)); \ break; \ case __HYPERVISOR_set_timer_op: \ ret = compat_set_timer_op((uint32_t)(a1), (int32_t)(a2)); \ break; \ case __HYPERVISOR_xen_version: \ ret = compat_xen_version((int)(a1), (XEN_GUEST_HANDLE_PARAM(void)){ _p(a2) }); \ break; \ case __HYPERVISOR_console_io: \ ret = do_console_io((unsigned int)(a1), (unsigned int)(a2), (XEN_GUEST_HANDLE_PARAM(char)){ _p(a3) }); \ break; \ case __HYPERVISOR_grant_table_op: \ ret = hvm_grant_table_op((unsigned int)(a1), (XEN_GUEST_HANDLE_PARAM(void)){ _p(a2) }, (unsigned int)(a3)); \ break; \ case __HYPERVISOR_vm_assist: \ ret = do_vm_assist((unsigned int)(a1), (unsigned int)(a2)); \ break; \ case __HYPERVISOR_mmuext_op: \ ret = compat_mmuext_op((XEN_GUEST_HANDLE_PARAM(void)){ _p(a1) }, (unsigned int)(a2), (XEN_GUEST_HANDLE_PARAM(uint)){ _p(a3) }, (unsigned int)(a4)); \ break; \ case __HYPERVISOR_xsm_op: \ ret = compat_xsm_op((XEN_GUEST_HANDLE_PARAM(void)){ _p(a1) }); \ break; \ case __HYPERVISOR_sched_op: \ ret = compat_sched_op((int)(a1), (XEN_GUEST_HANDLE_PARAM(void)){ _p(a2) }); \ break; \ case __HYPERVISOR_physdev_op: \ ret = hvm_physdev_op((int)(a1), (XEN_GUEST_HANDLE_PARAM(void)){ _p(a2) }); \ break; \ case __HYPERVISOR_hvm_op: \ ret = do_hvm_op((unsigned long)(a1), (XEN_GUEST_HANDLE_PARAM(void)){ _p(a2) }); \ break; \ case __HYPERVISOR_sysctl: \ ret = do_sysctl((XEN_GUEST_HANDLE_PARAM(xen_sysctl_t)){ _p(a1) }); \ break; \ case __HYPERVISOR_domctl: \ ret = do_domctl((XEN_GUEST_HANDLE_PARAM(xen_domctl_t)){ _p(a1) }); \ break; \ case __HYPERVISOR_xenpmu_op: \ ret = do_xenpmu_op((unsigned int)(a1), (XEN_GUEST_HANDLE_PARAM(xen_pmu_params_t)){ _p(a2) }); \ break; \ case __HYPERVISOR_dm_op: \ ret = compat_dm_op((domid_t)(a1), (unsigned int)(a2), (XEN_GUEST_HANDLE_PARAM(void)){ _p(a3) }); \ break; \ case __HYPERVISOR_hypfs_op: \ ret = do_hypfs_op((unsigned int)(a1), (XEN_GUEST_HANDLE_PARAM(const_char)){ _p(a2) }, (unsigned long)(a3), (XEN_GUEST_HANDLE_PARAM(void)){ _p(a4) }, (unsigned long)(a5)); \ break; \ case __HYPERVISOR_paging_domctl_cont: \ ret = do_paging_domctl_cont((XEN_GUEST_HANDLE_PARAM(xen_domctl_t)){ _p(a1) }); \ break; \ default: \ ret = -ENOSYS; \ break; \ } \ } #define hypercall_args_hvm32 \ { \ [__HYPERVISOR_platform_op] = 1, \ [__HYPERVISOR_memory_op] = 2, \ [__HYPERVISOR_multicall] = 2, \ [__HYPERVISOR_set_timer_op] = 2, \ [__HYPERVISOR_xen_version] = 2, \ [__HYPERVISOR_console_io] = 3, \ [__HYPERVISOR_grant_table_op] = 3, \ [__HYPERVISOR_vm_assist] = 2, \ [__HYPERVISOR_vcpu_op] = 3, \ [__HYPERVISOR_mmuext_op] = 4, \ [__HYPERVISOR_xsm_op] = 1, \ [__HYPERVISOR_sched_op] = 2, \ [__HYPERVISOR_event_channel_op] = 2, \ [__HYPERVISOR_physdev_op] = 2, \ [__HYPERVISOR_hvm_op] = 2, \ [__HYPERVISOR_sysctl] = 1, \ [__HYPERVISOR_domctl] = 1, \ [__HYPERVISOR_xenpmu_op] = 2, \ [__HYPERVISOR_dm_op] = 3, \ [__HYPERVISOR_hypfs_op] = 5, \ [__HYPERVISOR_paging_domctl_cont] = 1, \ } #define call_handlers_pv64(num, ret, a1, a2, a3, a4, a5) \ { \ uint64_t mask = 1ULL << num; \ if ( likely(mask & ((1ULL << __HYPERVISOR_mmu_update) | (1ULL << __HYPERVISOR_iret))) ) \ { \ if ( num == __HYPERVISOR_mmu_update ) \ ret = do_mmu_update((XEN_GUEST_HANDLE_PARAM(mmu_update_t)){ _p(a1) }, (unsigned int)(a2), (XEN_GUEST_HANDLE_PARAM(uint)){ _p(a3) }, (unsigned int)(a4)); \ else \ ret = do_iret(); \ } \ else if ( likely(mask & ((1ULL << __HYPERVISOR_stack_switch) | (1ULL << __HYPERVISOR_multicall) | (1ULL << __HYPERVISOR_set_segment_base) | (1ULL << __HYPERVISOR_mmuext_op))) ) \ { \ switch ( num ) \ { \ case __HYPERVISOR_stack_switch: \ ret = do_stack_switch((unsigned long)(a1), (unsigned long)(a2)); \ break; \ case __HYPERVISOR_multicall: \ ret = do_multicall((XEN_GUEST_HANDLE_PARAM(multicall_entry_t)){ _p(a1) }, (unsigned int)(a2)); \ break; \ case __HYPERVISOR_set_segment_base: \ ret = do_set_segment_base((unsigned int)(a1), (unsigned long)(a2)); \ break; \ case __HYPERVISOR_mmuext_op: \ ret = do_mmuext_op((XEN_GUEST_HANDLE_PARAM(mmuext_op_t)){ _p(a1) }, (unsigned int)(a2), (XEN_GUEST_HANDLE_PARAM(uint)){ _p(a3) }, (unsigned int)(a4)); \ break; \ default: \ ret = -ENOSYS; \ break; \ } \ } \ else switch ( num ) \ { \ case __HYPERVISOR_set_trap_table: \ ret = do_set_trap_table((XEN_GUEST_HANDLE_PARAM(const_trap_info_t)){ _p(a1) }); \ break; \ case __HYPERVISOR_set_gdt: \ ret = do_set_gdt((XEN_GUEST_HANDLE_PARAM(xen_ulong_t)){ _p(a1) }, (unsigned int)(a2)); \ break; \ case __HYPERVISOR_set_callbacks: \ ret = do_set_callbacks((unsigned long)(a1), (unsigned long)(a2), (unsigned long)(a3)); \ break; \ case __HYPERVISOR_fpu_taskswitch: \ ret = do_fpu_taskswitch((int)(a1)); \ break; \ case __HYPERVISOR_sched_op_compat: \ ret = do_sched_op_compat((int)(a1), (unsigned long)(a2)); \ break; \ case __HYPERVISOR_platform_op: \ ret = do_platform_op((XEN_GUEST_HANDLE_PARAM(xen_platform_op_t)){ _p(a1) }); \ break; \ case __HYPERVISOR_set_debugreg: \ ret = do_set_debugreg((int)(a1), (unsigned long)(a2)); \ break; \ case __HYPERVISOR_get_debugreg: \ ret = do_get_debugreg((int)(a1)); \ break; \ case __HYPERVISOR_update_descriptor: \ ret = do_update_descriptor((uint64_t)(a1), (seg_desc_t)(a2)); \ break; \ case __HYPERVISOR_memory_op: \ ret = do_memory_op((unsigned long)(a1), (XEN_GUEST_HANDLE_PARAM(void)){ _p(a2) }); \ break; \ case __HYPERVISOR_update_va_mapping: \ ret = do_update_va_mapping((unsigned long)(a1), (uint64_t)(a2), (unsigned long)(a3)); \ break; \ case __HYPERVISOR_set_timer_op: \ ret = do_set_timer_op((s_time_t)(a1)); \ break; \ case __HYPERVISOR_event_channel_op_compat: \ ret = do_event_channel_op_compat((XEN_GUEST_HANDLE_PARAM(evtchn_op_t)){ _p(a1) }); \ break; \ case __HYPERVISOR_xen_version: \ ret = do_xen_version((int)(a1), (XEN_GUEST_HANDLE_PARAM(void)){ _p(a2) }); \ break; \ case __HYPERVISOR_console_io: \ ret = do_console_io((unsigned int)(a1), (unsigned int)(a2), (XEN_GUEST_HANDLE_PARAM(char)){ _p(a3) }); \ break; \ case __HYPERVISOR_physdev_op_compat: \ ret = do_physdev_op_compat((XEN_GUEST_HANDLE_PARAM(physdev_op_t)){ _p(a1) }); \ break; \ case __HYPERVISOR_grant_table_op: \ ret = do_grant_table_op((unsigned int)(a1), (XEN_GUEST_HANDLE_PARAM(void)){ _p(a2) }, (unsigned int)(a3)); \ break; \ case __HYPERVISOR_vm_assist: \ ret = do_vm_assist((unsigned int)(a1), (unsigned int)(a2)); \ break; \ case __HYPERVISOR_update_va_mapping_otherdomain: \ ret = do_update_va_mapping_otherdomain((unsigned long)(a1), (uint64_t)(a2), (unsigned long)(a3), (domid_t)(a4)); \ break; \ case __HYPERVISOR_vcpu_op: \ ret = do_vcpu_op((int)(a1), (unsigned int)(a2), (XEN_GUEST_HANDLE_PARAM(void)){ _p(a3) }); \ break; \ case __HYPERVISOR_xsm_op: \ ret = do_xsm_op((XEN_GUEST_HANDLE_PARAM(void)){ _p(a1) }); \ break; \ case __HYPERVISOR_nmi_op: \ ret = do_nmi_op((unsigned int)(a1), (XEN_GUEST_HANDLE_PARAM(void)){ _p(a2) }); \ break; \ case __HYPERVISOR_sched_op: \ ret = do_sched_op((int)(a1), (XEN_GUEST_HANDLE_PARAM(void)){ _p(a2) }); \ break; \ case __HYPERVISOR_callback_op: \ ret = do_callback_op((int)(a1), (XEN_GUEST_HANDLE_PARAM(const_void)){ _p(a2) }); \ break; \ case __HYPERVISOR_xenoprof_op: \ ret = do_xenoprof_op((int)(a1), (XEN_GUEST_HANDLE_PARAM(void)){ _p(a2) }); \ break; \ case __HYPERVISOR_event_channel_op: \ ret = do_event_channel_op((int)(a1), (XEN_GUEST_HANDLE_PARAM(void)){ _p(a2) }); \ break; \ case __HYPERVISOR_physdev_op: \ ret = do_physdev_op((int)(a1), (XEN_GUEST_HANDLE_PARAM(void)){ _p(a2) }); \ break; \ case __HYPERVISOR_hvm_op: \ ret = do_hvm_op((unsigned long)(a1), (XEN_GUEST_HANDLE_PARAM(void)){ _p(a2) }); \ break; \ case __HYPERVISOR_sysctl: \ ret = do_sysctl((XEN_GUEST_HANDLE_PARAM(xen_sysctl_t)){ _p(a1) }); \ break; \ case __HYPERVISOR_domctl: \ ret = do_domctl((XEN_GUEST_HANDLE_PARAM(xen_domctl_t)){ _p(a1) }); \ break; \ case __HYPERVISOR_kexec_op: \ ret = do_kexec_op((unsigned int)(a1), (XEN_GUEST_HANDLE_PARAM(void)){ _p(a2) }); \ break; \ case __HYPERVISOR_xenpmu_op: \ ret = do_xenpmu_op((unsigned int)(a1), (XEN_GUEST_HANDLE_PARAM(xen_pmu_params_t)){ _p(a2) }); \ break; \ case __HYPERVISOR_dm_op: \ ret = do_dm_op((domid_t)(a1), (unsigned int)(a2), (XEN_GUEST_HANDLE_PARAM(xen_dm_op_buf_t)){ _p(a3) }); \ break; \ case __HYPERVISOR_hypfs_op: \ ret = do_hypfs_op((unsigned int)(a1), (XEN_GUEST_HANDLE_PARAM(const_char)){ _p(a2) }, (unsigned long)(a3), (XEN_GUEST_HANDLE_PARAM(void)){ _p(a4) }, (unsigned long)(a5)); \ break; \ case __HYPERVISOR_mca: \ ret = do_mca((XEN_GUEST_HANDLE_PARAM(xen_mc_t)){ _p(a1) }); \ break; \ case __HYPERVISOR_paging_domctl_cont: \ ret = do_paging_domctl_cont((XEN_GUEST_HANDLE_PARAM(xen_domctl_t)){ _p(a1) }); \ break; \ default: \ ret = -ENOSYS; \ break; \ } \ } #define hypercall_args_pv64 \ { \ [__HYPERVISOR_set_trap_table] = 1, \ [__HYPERVISOR_mmu_update] = 4, \ [__HYPERVISOR_set_gdt] = 2, \ [__HYPERVISOR_stack_switch] = 2, \ [__HYPERVISOR_set_callbacks] = 3, \ [__HYPERVISOR_fpu_taskswitch] = 1, \ [__HYPERVISOR_sched_op_compat] = 2, \ [__HYPERVISOR_platform_op] = 1, \ [__HYPERVISOR_set_debugreg] = 2, \ [__HYPERVISOR_get_debugreg] = 1, \ [__HYPERVISOR_update_descriptor] = 2, \ [__HYPERVISOR_memory_op] = 2, \ [__HYPERVISOR_multicall] = 2, \ [__HYPERVISOR_update_va_mapping] = 3, \ [__HYPERVISOR_set_timer_op] = 1, \ [__HYPERVISOR_event_channel_op_compat] = 1, \ [__HYPERVISOR_xen_version] = 2, \ [__HYPERVISOR_console_io] = 3, \ [__HYPERVISOR_physdev_op_compat] = 1, \ [__HYPERVISOR_grant_table_op] = 3, \ [__HYPERVISOR_vm_assist] = 2, \ [__HYPERVISOR_update_va_mapping_otherdomain] = 4, \ [__HYPERVISOR_iret] = 0, \ [__HYPERVISOR_vcpu_op] = 3, \ [__HYPERVISOR_set_segment_base] = 2, \ [__HYPERVISOR_mmuext_op] = 4, \ [__HYPERVISOR_xsm_op] = 1, \ [__HYPERVISOR_nmi_op] = 2, \ [__HYPERVISOR_sched_op] = 2, \ [__HYPERVISOR_callback_op] = 2, \ [__HYPERVISOR_xenoprof_op] = 2, \ [__HYPERVISOR_event_channel_op] = 2, \ [__HYPERVISOR_physdev_op] = 2, \ [__HYPERVISOR_hvm_op] = 2, \ [__HYPERVISOR_sysctl] = 1, \ [__HYPERVISOR_domctl] = 1, \ [__HYPERVISOR_kexec_op] = 2, \ [__HYPERVISOR_xenpmu_op] = 2, \ [__HYPERVISOR_dm_op] = 3, \ [__HYPERVISOR_hypfs_op] = 5, \ [__HYPERVISOR_mca] = 1, \ [__HYPERVISOR_paging_domctl_cont] = 1, \ }