1 /******************************************************************************
2  * multicall.c
3  */
4 
5 EMIT_FILE;
6 
7 #include <xen/types.h>
8 #include <xen/hypercall.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     unsigned int i;
18     typeof(mcs->compat_call.args[0]) args[ARRAY_SIZE(mcs->call.args)];
19 
20     for ( i = 0; i < ARRAY_SIZE(args); i++ )
21         args[i] = mcs->call.args[i];
22 
23     memcpy(mcs->compat_call.args, args, sizeof(args));
24 }
25 
26 #define multicall_entry      compat_multicall_entry
27 #define multicall_entry_t    multicall_entry_compat_t
28 #define do_multicall_call    compat_multicall_call
29 #define call                 compat_call
30 #define do_multicall(l, n)   compat_multicall(_##l, n)
31 #define _XEN_GUEST_HANDLE(t) XEN_GUEST_HANDLE(t)
32 #define _XEN_GUEST_HANDLE_PARAM(t) XEN_GUEST_HANDLE(t)
33 
__trace_multicall_call(multicall_entry_t * call)34 static void __trace_multicall_call(multicall_entry_t *call)
35 {
36     xen_ulong_t args[ARRAY_SIZE(call->args)];
37     unsigned int i;
38 
39     for ( i = 0; i < ARRAY_SIZE(args); i++ )
40         args[i] = call->args[i];
41 
42     __trace_hypercall(TRC_PV_HYPERCALL_SUBCALL, call->op, args);
43 }
44 
45 #include "../multicall.c"
46 
47 /*
48  * Local variables:
49  * mode: C
50  * c-file-style: "BSD"
51  * c-basic-offset: 4
52  * tab-width: 4
53  * indent-tabs-mode: nil
54  * End:
55  */
56