1 /******************************************************************************
2  * multicall.c
3  */
4 
5 asm(".file \"" __FILE__ "\"");
6 
7 #include <xen/types.h>
8 #include <xen/multicall.h>
9 #include <xen/trace.h>
10 
11 #define COMPAT
12 typedef int ret_t;
13 #undef do_multicall_call
14 
xlat_multicall_entry(struct mc_state * mcs)15 static inline void xlat_multicall_entry(struct mc_state *mcs)
16 {
17     int i;
18     for (i=0; i<6; i++)
19         mcs->compat_call.args[i] = mcs->call.args[i];
20 }
21 
22 DEFINE_XEN_GUEST_HANDLE(multicall_entry_compat_t);
23 #define multicall_entry      compat_multicall_entry
24 #define multicall_entry_t    multicall_entry_compat_t
25 #define do_multicall_call    compat_multicall_call
26 #define call                 compat_call
27 #define do_multicall(l, n)   compat_multicall(_##l, n)
28 #define _XEN_GUEST_HANDLE(t) XEN_GUEST_HANDLE(t)
29 #define _XEN_GUEST_HANDLE_PARAM(t) XEN_GUEST_HANDLE(t)
30 
__trace_multicall_call(multicall_entry_t * call)31 static void __trace_multicall_call(multicall_entry_t *call)
32 {
33     xen_ulong_t args[6];
34     int i;
35 
36     for ( i = 0; i < ARRAY_SIZE(args); i++ )
37         args[i] = call->args[i];
38 
39     __trace_hypercall(TRC_PV_HYPERCALL_SUBCALL, call->op, args);
40 }
41 
42 #include "../multicall.c"
43 
44 /*
45  * Local variables:
46  * mode: C
47  * c-file-style: "BSD"
48  * c-basic-offset: 4
49  * tab-width: 4
50  * indent-tabs-mode: nil
51  * End:
52  */
53