Coverage Report

Created: 2017-10-25 09:10

/root/src/xen/xen/include/compat/xlat.h
Line
Count
Source (jump to first uncovered line)
1
2
#define CHECK_dom0_vga_console_info \
3
    CHECK_SIZE_(struct, dom0_vga_console_info); \
4
    CHECK_FIELD_(struct, dom0_vga_console_info, video_type); \
5
    CHECK_SUBFIELD_2_(struct, dom0_vga_console_info, u, text_mode_3, font_height); \
6
    CHECK_SUBFIELD_2_(struct, dom0_vga_console_info, u, text_mode_3, cursor_x); \
7
    CHECK_SUBFIELD_2_(struct, dom0_vga_console_info, u, text_mode_3, cursor_y); \
8
    CHECK_SUBFIELD_2_(struct, dom0_vga_console_info, u, text_mode_3, rows); \
9
    CHECK_SUBFIELD_2_(struct, dom0_vga_console_info, u, text_mode_3, columns); \
10
    CHECK_SUBFIELD_2_(struct, dom0_vga_console_info, u, vesa_lfb, width); \
11
    CHECK_SUBFIELD_2_(struct, dom0_vga_console_info, u, vesa_lfb, height); \
12
    CHECK_SUBFIELD_2_(struct, dom0_vga_console_info, u, vesa_lfb, bytes_per_line); \
13
    CHECK_SUBFIELD_2_(struct, dom0_vga_console_info, u, vesa_lfb, bits_per_pixel); \
14
    CHECK_SUBFIELD_2_(struct, dom0_vga_console_info, u, vesa_lfb, lfb_base); \
15
    CHECK_SUBFIELD_2_(struct, dom0_vga_console_info, u, vesa_lfb, lfb_size); \
16
    CHECK_SUBFIELD_2_(struct, dom0_vga_console_info, u, vesa_lfb, red_pos); \
17
    CHECK_SUBFIELD_2_(struct, dom0_vga_console_info, u, vesa_lfb, red_size); \
18
    CHECK_SUBFIELD_2_(struct, dom0_vga_console_info, u, vesa_lfb, green_pos); \
19
    CHECK_SUBFIELD_2_(struct, dom0_vga_console_info, u, vesa_lfb, green_size); \
20
    CHECK_SUBFIELD_2_(struct, dom0_vga_console_info, u, vesa_lfb, blue_pos); \
21
    CHECK_SUBFIELD_2_(struct, dom0_vga_console_info, u, vesa_lfb, blue_size); \
22
    CHECK_SUBFIELD_2_(struct, dom0_vga_console_info, u, vesa_lfb, rsvd_pos); \
23
    CHECK_SUBFIELD_2_(struct, dom0_vga_console_info, u, vesa_lfb, rsvd_size); \
24
    CHECK_SUBFIELD_2_(struct, dom0_vga_console_info, u, vesa_lfb, gbl_caps); \
25
    CHECK_SUBFIELD_2_(struct, dom0_vga_console_info, u, vesa_lfb, mode_attrs)
26
27
#define CHECK_ctl_bitmap \
28
    CHECK_SIZE_(struct, ctl_bitmap); \
29
    CHECK_FIELD_(struct, ctl_bitmap, bitmap); \
30
    CHECK_FIELD_(struct, ctl_bitmap, nr_bits)
31
32
#define CHECK_mmu_update \
33
    CHECK_SIZE_(struct, mmu_update); \
34
    CHECK_FIELD_(struct, mmu_update, ptr); \
35
    CHECK_FIELD_(struct, mmu_update, val)
36
37
enum XLAT_mmuext_op_arg1 {
38
    XLAT_mmuext_op_arg1_mfn,
39
    XLAT_mmuext_op_arg1_linear_addr,
40
};
41
42
enum XLAT_mmuext_op_arg2 {
43
    XLAT_mmuext_op_arg2_nr_ents,
44
    XLAT_mmuext_op_arg2_vcpumask,
45
    XLAT_mmuext_op_arg2_src_mfn,
46
};
47
48
0
#define XLAT_mmuext_op(_d_, _s_) do { \
49
0
    (_d_)->cmd = (_s_)->cmd; \
50
0
    switch (arg1) { \
51
0
    case XLAT_mmuext_op_arg1_mfn: \
52
0
        (_d_)->arg1.mfn = (_s_)->arg1.mfn; \
53
0
        break; \
54
0
    case XLAT_mmuext_op_arg1_linear_addr: \
55
0
        (_d_)->arg1.linear_addr = (_s_)->arg1.linear_addr; \
56
0
        break; \
57
0
    } \
58
0
    switch (arg2) { \
59
0
    case XLAT_mmuext_op_arg2_nr_ents: \
60
0
        (_d_)->arg2.nr_ents = (_s_)->arg2.nr_ents; \
61
0
        break; \
62
0
    case XLAT_mmuext_op_arg2_vcpumask: \
63
0
        XLAT_mmuext_op_HNDL_arg2_vcpumask(_d_, _s_); \
64
0
        break; \
65
0
    case XLAT_mmuext_op_arg2_src_mfn: \
66
0
        (_d_)->arg2.src_mfn = (_s_)->arg2.src_mfn; \
67
0
        break; \
68
0
    } \
69
0
} while (0)
70
71
enum XLAT_start_info_console {
72
    XLAT_start_info_console_domU,
73
    XLAT_start_info_console_dom0,
74
};
75
76
0
#define XLAT_start_info(_d_, _s_) do { \
77
0
    { \
78
0
        unsigned int i0; \
79
0
        for (i0 = 0; i0 < 32; ++i0) { \
80
0
            (_d_)->magic[i0] = (_s_)->magic[i0]; \
81
0
        } \
82
0
    } \
83
0
    (_d_)->nr_pages = (_s_)->nr_pages; \
84
0
    (_d_)->shared_info = (_s_)->shared_info; \
85
0
    (_d_)->flags = (_s_)->flags; \
86
0
    (_d_)->store_mfn = (_s_)->store_mfn; \
87
0
    (_d_)->store_evtchn = (_s_)->store_evtchn; \
88
0
    switch (console) { \
89
0
    case XLAT_start_info_console_domU: \
90
0
        (_d_)->console.domU.mfn = (_s_)->console.domU.mfn; \
91
0
        (_d_)->console.domU.evtchn = (_s_)->console.domU.evtchn; \
92
0
        break; \
93
0
    case XLAT_start_info_console_dom0: \
94
0
        (_d_)->console.dom0.info_off = (_s_)->console.dom0.info_off; \
95
0
        (_d_)->console.dom0.info_size = (_s_)->console.dom0.info_size; \
96
0
        break; \
97
0
    } \
98
0
    (_d_)->pt_base = (_s_)->pt_base; \
99
0
    (_d_)->nr_pt_frames = (_s_)->nr_pt_frames; \
100
0
    (_d_)->mfn_list = (_s_)->mfn_list; \
101
0
    (_d_)->mod_start = (_s_)->mod_start; \
102
0
    (_d_)->mod_len = (_s_)->mod_len; \
103
0
    { \
104
0
        unsigned int i0; \
105
0
        for (i0 = 0; i0 < 1024; ++i0) { \
106
0
            (_d_)->cmd_line[i0] = (_s_)->cmd_line[i0]; \
107
0
        } \
108
0
    } \
109
0
    (_d_)->first_p2m_pfn = (_s_)->first_p2m_pfn; \
110
0
    (_d_)->nr_p2m_frames = (_s_)->nr_p2m_frames; \
111
0
} while (0)
112
113
#define CHECK_vcpu_time_info \
114
    CHECK_SIZE_(struct, vcpu_time_info); \
115
    CHECK_FIELD_(struct, vcpu_time_info, version); \
116
    CHECK_FIELD_(struct, vcpu_time_info, pad0); \
117
    CHECK_FIELD_(struct, vcpu_time_info, tsc_timestamp); \
118
    CHECK_FIELD_(struct, vcpu_time_info, system_time); \
119
    CHECK_FIELD_(struct, vcpu_time_info, tsc_to_system_mul); \
120
    CHECK_FIELD_(struct, vcpu_time_info, tsc_shift); \
121
    CHECK_FIELD_(struct, vcpu_time_info, flags); \
122
    CHECK_FIELD_(struct, vcpu_time_info, pad1)
123
124
#define CHECK_pmu_amd_ctxt \
125
    CHECK_SIZE_(struct, pmu_amd_ctxt); \
126
    CHECK_FIELD_(struct, pmu_amd_ctxt, counters); \
127
    CHECK_FIELD_(struct, pmu_amd_ctxt, ctrls); \
128
    CHECK_FIELD_(struct, pmu_amd_ctxt, regs)
129
130
#define CHECK_pmu_arch \
131
    CHECK_SIZE_(struct, pmu_arch); \
132
    CHECK_pmu_regs; \
133
    CHECK_SUBFIELD_1_(struct, pmu_arch, r, pad); \
134
    CHECK_FIELD_(struct, pmu_arch, pmu_flags); \
135
    CHECK_SUBFIELD_1_(struct, pmu_arch, l, lapic_lvtpc); \
136
    CHECK_SUBFIELD_1_(struct, pmu_arch, l, pad); \
137
    CHECK_pmu_amd_ctxt; \
138
    CHECK_pmu_intel_ctxt; \
139
    CHECK_SUBFIELD_1_(struct, pmu_arch, c, pad)
140
141
#define CHECK_pmu_cntr_pair \
142
    CHECK_SIZE_(struct, pmu_cntr_pair); \
143
    CHECK_FIELD_(struct, pmu_cntr_pair, counter); \
144
    CHECK_FIELD_(struct, pmu_cntr_pair, control)
145
146
#define CHECK_pmu_intel_ctxt \
147
    CHECK_SIZE_(struct, pmu_intel_ctxt); \
148
    CHECK_FIELD_(struct, pmu_intel_ctxt, fixed_counters); \
149
    CHECK_FIELD_(struct, pmu_intel_ctxt, arch_counters); \
150
    CHECK_FIELD_(struct, pmu_intel_ctxt, global_ctrl); \
151
    CHECK_FIELD_(struct, pmu_intel_ctxt, global_ovf_ctrl); \
152
    CHECK_FIELD_(struct, pmu_intel_ctxt, global_status); \
153
    CHECK_FIELD_(struct, pmu_intel_ctxt, fixed_ctrl); \
154
    CHECK_FIELD_(struct, pmu_intel_ctxt, ds_area); \
155
    CHECK_FIELD_(struct, pmu_intel_ctxt, pebs_enable); \
156
    CHECK_FIELD_(struct, pmu_intel_ctxt, debugctl); \
157
    CHECK_FIELD_(struct, pmu_intel_ctxt, regs)
158
159
#define CHECK_pmu_regs \
160
    CHECK_SIZE_(struct, pmu_regs); \
161
    CHECK_FIELD_(struct, pmu_regs, ip); \
162
    CHECK_FIELD_(struct, pmu_regs, sp); \
163
    CHECK_FIELD_(struct, pmu_regs, flags); \
164
    CHECK_FIELD_(struct, pmu_regs, cs); \
165
    CHECK_FIELD_(struct, pmu_regs, ss); \
166
    CHECK_FIELD_(struct, pmu_regs, cpl); \
167
    CHECK_FIELD_(struct, pmu_regs, pad)
168
169
0
#define XLAT_cpu_user_regs(_d_, _s_) do { \
170
0
    (_d_)->__DECL_REG_LO8(b) = (_s_)->__DECL_REG_LO8(b); \
171
0
    (_d_)->__DECL_REG_LO8(c) = (_s_)->__DECL_REG_LO8(c); \
172
0
    (_d_)->__DECL_REG_LO8(d) = (_s_)->__DECL_REG_LO8(d); \
173
0
    (_d_)->__DECL_REG_LO16(si) = (_s_)->__DECL_REG_LO16(si); \
174
0
    (_d_)->__DECL_REG_LO16(di) = (_s_)->__DECL_REG_LO16(di); \
175
0
    (_d_)->__DECL_REG_LO16(bp) = (_s_)->__DECL_REG_LO16(bp); \
176
0
    (_d_)->__DECL_REG_LO8(a) = (_s_)->__DECL_REG_LO8(a); \
177
0
    (_d_)->error_code = (_s_)->error_code; \
178
0
    (_d_)->entry_vector = (_s_)->entry_vector; \
179
0
    (_d_)->__DECL_REG_LO16(ip) = (_s_)->__DECL_REG_LO16(ip); \
180
0
    (_d_)->cs = (_s_)->cs; \
181
0
    (_d_)->saved_upcall_mask = (_s_)->saved_upcall_mask; \
182
0
    (_d_)->__DECL_REG_LO16(flags) = (_s_)->__DECL_REG_LO16(flags); \
183
0
    (_d_)->__DECL_REG_LO16(sp) = (_s_)->__DECL_REG_LO16(sp); \
184
0
    (_d_)->ss = (_s_)->ss; \
185
0
    (_d_)->es = (_s_)->es; \
186
0
    (_d_)->ds = (_s_)->ds; \
187
0
    (_d_)->fs = (_s_)->fs; \
188
0
    (_d_)->gs = (_s_)->gs; \
189
0
} while (0)
190
191
0
#define XLAT_trap_info(_d_, _s_) do { \
192
0
    (_d_)->vector = (_s_)->vector; \
193
0
    (_d_)->flags = (_s_)->flags; \
194
0
    (_d_)->cs = (_s_)->cs; \
195
0
    (_d_)->address = (_s_)->address; \
196
0
} while (0)
197
198
#define CHECK_cpu_offline_action \
199
    CHECK_SIZE_(struct, cpu_offline_action); \
200
    CHECK_FIELD_(struct, cpu_offline_action, mc_socketid); \
201
    CHECK_FIELD_(struct, cpu_offline_action, mc_coreid); \
202
    CHECK_FIELD_(struct, cpu_offline_action, mc_core_threadid)
203
204
#define CHECK_mc \
205
    CHECK_SIZE_(struct, mc); \
206
    CHECK_FIELD_(struct, mc, cmd); \
207
    CHECK_FIELD_(struct, mc, interface_version); \
208
    CHECK_compat_mc_fetch; \
209
    CHECK_mc_notifydomain; \
210
    CHECK_compat_mc_physcpuinfo; \
211
    CHECK_mc_msrinject; \
212
    CHECK_mc_mceinject; \
213
    CHECK_compat_mc_inject_v2
214
215
#define CHECK_mcinfo_bank \
216
    CHECK_SIZE_(struct, mcinfo_bank); \
217
    CHECK_mcinfo_common; \
218
    CHECK_FIELD_(struct, mcinfo_bank, mc_bank); \
219
    CHECK_FIELD_(struct, mcinfo_bank, mc_domid); \
220
    CHECK_FIELD_(struct, mcinfo_bank, mc_status); \
221
    CHECK_FIELD_(struct, mcinfo_bank, mc_addr); \
222
    CHECK_FIELD_(struct, mcinfo_bank, mc_misc); \
223
    CHECK_FIELD_(struct, mcinfo_bank, mc_ctrl2); \
224
    CHECK_FIELD_(struct, mcinfo_bank, mc_tsc)
225
226
#define CHECK_mcinfo_common \
227
    CHECK_SIZE_(struct, mcinfo_common); \
228
    CHECK_FIELD_(struct, mcinfo_common, type); \
229
    CHECK_FIELD_(struct, mcinfo_common, size)
230
231
#define CHECK_mcinfo_extended \
232
    CHECK_SIZE_(struct, mcinfo_extended); \
233
    CHECK_mcinfo_common; \
234
    CHECK_FIELD_(struct, mcinfo_extended, mc_msrs); \
235
    CHECK_mcinfo_msr
236
237
#define CHECK_mcinfo_global \
238
    CHECK_SIZE_(struct, mcinfo_global); \
239
    CHECK_mcinfo_common; \
240
    CHECK_FIELD_(struct, mcinfo_global, mc_domid); \
241
    CHECK_FIELD_(struct, mcinfo_global, mc_vcpuid); \
242
    CHECK_FIELD_(struct, mcinfo_global, mc_socketid); \
243
    CHECK_FIELD_(struct, mcinfo_global, mc_coreid); \
244
    CHECK_FIELD_(struct, mcinfo_global, mc_core_threadid); \
245
    CHECK_FIELD_(struct, mcinfo_global, mc_apicid); \
246
    CHECK_FIELD_(struct, mcinfo_global, mc_flags); \
247
    CHECK_FIELD_(struct, mcinfo_global, mc_gstatus)
248
249
#define CHECK_mcinfo_logical_cpu \
250
    CHECK_SIZE_(struct, mcinfo_logical_cpu); \
251
    CHECK_FIELD_(struct, mcinfo_logical_cpu, mc_cpunr); \
252
    CHECK_FIELD_(struct, mcinfo_logical_cpu, mc_chipid); \
253
    CHECK_FIELD_(struct, mcinfo_logical_cpu, mc_coreid); \
254
    CHECK_FIELD_(struct, mcinfo_logical_cpu, mc_threadid); \
255
    CHECK_FIELD_(struct, mcinfo_logical_cpu, mc_apicid); \
256
    CHECK_FIELD_(struct, mcinfo_logical_cpu, mc_clusterid); \
257
    CHECK_FIELD_(struct, mcinfo_logical_cpu, mc_ncores); \
258
    CHECK_FIELD_(struct, mcinfo_logical_cpu, mc_ncores_active); \
259
    CHECK_FIELD_(struct, mcinfo_logical_cpu, mc_nthreads); \
260
    CHECK_FIELD_(struct, mcinfo_logical_cpu, mc_cpuid_level); \
261
    CHECK_FIELD_(struct, mcinfo_logical_cpu, mc_family); \
262
    CHECK_FIELD_(struct, mcinfo_logical_cpu, mc_vendor); \
263
    CHECK_FIELD_(struct, mcinfo_logical_cpu, mc_model); \
264
    CHECK_FIELD_(struct, mcinfo_logical_cpu, mc_step); \
265
    CHECK_FIELD_(struct, mcinfo_logical_cpu, mc_vendorid); \
266
    CHECK_FIELD_(struct, mcinfo_logical_cpu, mc_brandid); \
267
    CHECK_FIELD_(struct, mcinfo_logical_cpu, mc_cpu_caps); \
268
    CHECK_FIELD_(struct, mcinfo_logical_cpu, mc_cache_size); \
269
    CHECK_FIELD_(struct, mcinfo_logical_cpu, mc_cache_alignment); \
270
    CHECK_FIELD_(struct, mcinfo_logical_cpu, mc_nmsrvals); \
271
    CHECK_mcinfo_msr
272
273
#define CHECK_mcinfo_msr \
274
    CHECK_SIZE_(struct, mcinfo_msr); \
275
    CHECK_FIELD_(struct, mcinfo_msr, reg); \
276
    CHECK_FIELD_(struct, mcinfo_msr, value)
277
278
#define CHECK_mcinfo_recovery \
279
    CHECK_SIZE_(struct, mcinfo_recovery); \
280
    CHECK_mcinfo_common; \
281
    CHECK_FIELD_(struct, mcinfo_recovery, mc_bank); \
282
    CHECK_FIELD_(struct, mcinfo_recovery, action_flags); \
283
    CHECK_FIELD_(struct, mcinfo_recovery, action_types); \
284
    CHECK_page_offline_action; \
285
    CHECK_cpu_offline_action; \
286
    CHECK_SUBFIELD_1_(struct, mcinfo_recovery, action_info, pad)
287
288
#define XLAT_mc_fetch(_d_, _s_) do { \
289
    (_d_)->flags = (_s_)->flags; \
290
    (_d_)->fetch_id = (_s_)->fetch_id; \
291
    XLAT_mc_fetch_HNDL_data(_d_, _s_); \
292
} while (0)
293
294
#define CHECK_mc_info \
295
    CHECK_SIZE_(struct, mc_info); \
296
    CHECK_FIELD_(struct, mc_info, mi_nentries); \
297
    CHECK_FIELD_(struct, mc_info, flags); \
298
    CHECK_FIELD_(struct, mc_info, mi_data)
299
300
#define CHECK_mc_mceinject \
301
    CHECK_SIZE_(struct, mc_mceinject); \
302
    CHECK_FIELD_(struct, mc_mceinject, mceinj_cpunr)
303
304
#define CHECK_mc_msrinject \
305
    CHECK_SIZE_(struct, mc_msrinject); \
306
    CHECK_FIELD_(struct, mc_msrinject, mcinj_cpunr); \
307
    CHECK_FIELD_(struct, mc_msrinject, mcinj_flags); \
308
    CHECK_FIELD_(struct, mc_msrinject, mcinj_count); \
309
    CHECK_FIELD_(struct, mc_msrinject, mcinj_domid); \
310
    CHECK_mcinfo_msr
311
312
#define CHECK_mc_notifydomain \
313
    CHECK_SIZE_(struct, mc_notifydomain); \
314
    CHECK_FIELD_(struct, mc_notifydomain, mc_domid); \
315
    CHECK_FIELD_(struct, mc_notifydomain, mc_vcpuid); \
316
    CHECK_FIELD_(struct, mc_notifydomain, flags)
317
318
#define XLAT_mc_physcpuinfo(_d_, _s_) do { \
319
    (_d_)->ncpus = (_s_)->ncpus; \
320
    (_d_)->info = (_s_)->info; \
321
} while (0)
322
323
#define CHECK_page_offline_action \
324
    CHECK_SIZE_(struct, page_offline_action); \
325
    CHECK_FIELD_(struct, page_offline_action, mfn); \
326
    CHECK_FIELD_(struct, page_offline_action, status)
327
328
#define CHECK_evtchn_alloc_unbound \
329
    CHECK_SIZE_(struct, evtchn_alloc_unbound); \
330
    CHECK_FIELD_(struct, evtchn_alloc_unbound, dom); \
331
    CHECK_FIELD_(struct, evtchn_alloc_unbound, remote_dom); \
332
    CHECK_FIELD_(struct, evtchn_alloc_unbound, port)
333
334
#define CHECK_evtchn_bind_interdomain \
335
    CHECK_SIZE_(struct, evtchn_bind_interdomain); \
336
    CHECK_FIELD_(struct, evtchn_bind_interdomain, remote_dom); \
337
    CHECK_FIELD_(struct, evtchn_bind_interdomain, remote_port); \
338
    CHECK_FIELD_(struct, evtchn_bind_interdomain, local_port)
339
340
#define CHECK_evtchn_bind_ipi \
341
    CHECK_SIZE_(struct, evtchn_bind_ipi); \
342
    CHECK_FIELD_(struct, evtchn_bind_ipi, vcpu); \
343
    CHECK_FIELD_(struct, evtchn_bind_ipi, port)
344
345
#define CHECK_evtchn_bind_pirq \
346
    CHECK_SIZE_(struct, evtchn_bind_pirq); \
347
    CHECK_FIELD_(struct, evtchn_bind_pirq, pirq); \
348
    CHECK_FIELD_(struct, evtchn_bind_pirq, flags); \
349
    CHECK_FIELD_(struct, evtchn_bind_pirq, port)
350
351
#define CHECK_evtchn_bind_vcpu \
352
    CHECK_SIZE_(struct, evtchn_bind_vcpu); \
353
    CHECK_FIELD_(struct, evtchn_bind_vcpu, port); \
354
    CHECK_FIELD_(struct, evtchn_bind_vcpu, vcpu)
355
356
#define CHECK_evtchn_bind_virq \
357
    CHECK_SIZE_(struct, evtchn_bind_virq); \
358
    CHECK_FIELD_(struct, evtchn_bind_virq, virq); \
359
    CHECK_FIELD_(struct, evtchn_bind_virq, vcpu); \
360
    CHECK_FIELD_(struct, evtchn_bind_virq, port)
361
362
#define CHECK_evtchn_close \
363
    CHECK_SIZE_(struct, evtchn_close); \
364
    CHECK_FIELD_(struct, evtchn_close, port)
365
366
#define CHECK_evtchn_op \
367
    CHECK_SIZE_(struct, evtchn_op); \
368
    CHECK_FIELD_(struct, evtchn_op, cmd); \
369
    CHECK_evtchn_alloc_unbound; \
370
    CHECK_evtchn_bind_interdomain; \
371
    CHECK_evtchn_bind_virq; \
372
    CHECK_evtchn_bind_pirq; \
373
    CHECK_evtchn_bind_ipi; \
374
    CHECK_evtchn_close; \
375
    CHECK_evtchn_send; \
376
    CHECK_evtchn_status; \
377
    CHECK_evtchn_bind_vcpu; \
378
    CHECK_evtchn_unmask
379
380
#define CHECK_evtchn_send \
381
    CHECK_SIZE_(struct, evtchn_send); \
382
    CHECK_FIELD_(struct, evtchn_send, port)
383
384
#define CHECK_evtchn_status \
385
    CHECK_SIZE_(struct, evtchn_status); \
386
    CHECK_FIELD_(struct, evtchn_status, dom); \
387
    CHECK_FIELD_(struct, evtchn_status, port); \
388
    CHECK_FIELD_(struct, evtchn_status, status); \
389
    CHECK_FIELD_(struct, evtchn_status, vcpu); \
390
    CHECK_SUBFIELD_2_(struct, evtchn_status, u, unbound, dom); \
391
    CHECK_SUBFIELD_2_(struct, evtchn_status, u, interdomain, dom); \
392
    CHECK_SUBFIELD_2_(struct, evtchn_status, u, interdomain, port); \
393
    CHECK_SUBFIELD_1_(struct, evtchn_status, u, pirq); \
394
    CHECK_SUBFIELD_1_(struct, evtchn_status, u, virq)
395
396
#define CHECK_evtchn_unmask \
397
    CHECK_SIZE_(struct, evtchn_unmask); \
398
    CHECK_FIELD_(struct, evtchn_unmask, port)
399
400
#define CHECK_gnttab_cache_flush \
401
    CHECK_SIZE_(struct, gnttab_cache_flush); \
402
    CHECK_SUBFIELD_1_(struct, gnttab_cache_flush, a, dev_bus_addr); \
403
    CHECK_SUBFIELD_1_(struct, gnttab_cache_flush, a, ref); \
404
    CHECK_FIELD_(struct, gnttab_cache_flush, offset); \
405
    CHECK_FIELD_(struct, gnttab_cache_flush, length); \
406
    CHECK_FIELD_(struct, gnttab_cache_flush, op)
407
408
enum XLAT_gnttab_copy_source_u {
409
    XLAT_gnttab_copy_source_u_ref,
410
    XLAT_gnttab_copy_source_u_gmfn,
411
};
412
413
enum XLAT_gnttab_copy_dest_u {
414
    XLAT_gnttab_copy_dest_u_ref,
415
    XLAT_gnttab_copy_dest_u_gmfn,
416
};
417
418
0
#define XLAT_gnttab_copy(_d_, _s_) do { \
419
0
    switch (source_u) { \
420
0
    case XLAT_gnttab_copy_source_u_ref: \
421
0
        (_d_)->source.u.ref = (_s_)->source.u.ref; \
422
0
        break; \
423
0
    case XLAT_gnttab_copy_source_u_gmfn: \
424
0
        (_d_)->source.u.gmfn = (_s_)->source.u.gmfn; \
425
0
        break; \
426
0
    } \
427
0
    (_d_)->source.domid = (_s_)->source.domid; \
428
0
    (_d_)->source.offset = (_s_)->source.offset; \
429
0
    switch (dest_u) { \
430
0
    case XLAT_gnttab_copy_dest_u_ref: \
431
0
        (_d_)->dest.u.ref = (_s_)->dest.u.ref; \
432
0
        break; \
433
0
    case XLAT_gnttab_copy_dest_u_gmfn: \
434
0
        (_d_)->dest.u.gmfn = (_s_)->dest.u.gmfn; \
435
0
        break; \
436
0
    } \
437
0
    (_d_)->dest.domid = (_s_)->dest.domid; \
438
0
    (_d_)->dest.offset = (_s_)->dest.offset; \
439
0
    (_d_)->len = (_s_)->len; \
440
0
    (_d_)->flags = (_s_)->flags; \
441
0
    (_d_)->status = (_s_)->status; \
442
0
} while (0)
443
444
#define CHECK_gnttab_dump_table \
445
    CHECK_SIZE_(struct, gnttab_dump_table); \
446
    CHECK_FIELD_(struct, gnttab_dump_table, dom); \
447
    CHECK_FIELD_(struct, gnttab_dump_table, status)
448
449
#define CHECK_gnttab_map_grant_ref \
450
    CHECK_SIZE_(struct, gnttab_map_grant_ref); \
451
    CHECK_FIELD_(struct, gnttab_map_grant_ref, host_addr); \
452
    CHECK_FIELD_(struct, gnttab_map_grant_ref, flags); \
453
    CHECK_FIELD_(struct, gnttab_map_grant_ref, ref); \
454
    CHECK_FIELD_(struct, gnttab_map_grant_ref, dom); \
455
    CHECK_FIELD_(struct, gnttab_map_grant_ref, status); \
456
    CHECK_FIELD_(struct, gnttab_map_grant_ref, handle); \
457
    CHECK_FIELD_(struct, gnttab_map_grant_ref, dev_bus_addr)
458
459
0
#define XLAT_gnttab_setup_table(_d_, _s_) do { \
460
0
    (_d_)->dom = (_s_)->dom; \
461
0
    (_d_)->nr_frames = (_s_)->nr_frames; \
462
0
    (_d_)->status = (_s_)->status; \
463
0
    XLAT_gnttab_setup_table_HNDL_frame_list(_d_, _s_); \
464
0
} while (0)
465
466
0
#define XLAT_gnttab_transfer(_d_, _s_) do { \
467
0
    (_d_)->mfn = (_s_)->mfn; \
468
0
    (_d_)->domid = (_s_)->domid; \
469
0
    (_d_)->ref = (_s_)->ref; \
470
0
    (_d_)->status = (_s_)->status; \
471
0
} while (0)
472
473
#define CHECK_gnttab_unmap_grant_ref \
474
    CHECK_SIZE_(struct, gnttab_unmap_grant_ref); \
475
    CHECK_FIELD_(struct, gnttab_unmap_grant_ref, host_addr); \
476
    CHECK_FIELD_(struct, gnttab_unmap_grant_ref, dev_bus_addr); \
477
    CHECK_FIELD_(struct, gnttab_unmap_grant_ref, handle); \
478
    CHECK_FIELD_(struct, gnttab_unmap_grant_ref, status)
479
480
#define CHECK_gnttab_unmap_and_replace \
481
    CHECK_SIZE_(struct, gnttab_unmap_and_replace); \
482
    CHECK_FIELD_(struct, gnttab_unmap_and_replace, host_addr); \
483
    CHECK_FIELD_(struct, gnttab_unmap_and_replace, new_addr); \
484
    CHECK_FIELD_(struct, gnttab_unmap_and_replace, handle); \
485
    CHECK_FIELD_(struct, gnttab_unmap_and_replace, status)
486
487
#define CHECK_gnttab_set_version \
488
    CHECK_SIZE_(struct, gnttab_set_version); \
489
    CHECK_FIELD_(struct, gnttab_set_version, version)
490
491
#define CHECK_gnttab_get_version \
492
    CHECK_SIZE_(struct, gnttab_get_version); \
493
    CHECK_FIELD_(struct, gnttab_get_version, dom); \
494
    CHECK_FIELD_(struct, gnttab_get_version, pad); \
495
    CHECK_FIELD_(struct, gnttab_get_version, version)
496
497
0
#define XLAT_gnttab_get_status_frames(_d_, _s_) do { \
498
0
    (_d_)->nr_frames = (_s_)->nr_frames; \
499
0
    (_d_)->dom = (_s_)->dom; \
500
0
    (_d_)->status = (_s_)->status; \
501
0
    XLAT_gnttab_get_status_frames_HNDL_frame_list(_d_, _s_); \
502
0
} while (0)
503
504
#define CHECK_grant_entry_v1 \
505
    CHECK_SIZE_(struct, grant_entry_v1); \
506
    CHECK_FIELD_(struct, grant_entry_v1, flags); \
507
    CHECK_FIELD_(struct, grant_entry_v1, domid); \
508
    CHECK_FIELD_(struct, grant_entry_v1, frame)
509
510
#define CHECK_grant_entry_header \
511
    CHECK_SIZE_(struct, grant_entry_header); \
512
    CHECK_FIELD_(struct, grant_entry_header, flags); \
513
    CHECK_FIELD_(struct, grant_entry_header, domid)
514
515
#define CHECK_grant_entry_v2 \
516
    CHECK_SIZE_(union, grant_entry_v2); \
517
    CHECK_FIELD_(union, grant_entry_v2, hdr); \
518
    CHECK_SUBFIELD_1_(union, grant_entry_v2, full_page, hdr); \
519
    CHECK_SUBFIELD_1_(union, grant_entry_v2, full_page, pad0); \
520
    CHECK_SUBFIELD_1_(union, grant_entry_v2, full_page, frame); \
521
    CHECK_SUBFIELD_1_(union, grant_entry_v2, sub_page, hdr); \
522
    CHECK_SUBFIELD_1_(union, grant_entry_v2, sub_page, page_off); \
523
    CHECK_SUBFIELD_1_(union, grant_entry_v2, sub_page, length); \
524
    CHECK_SUBFIELD_1_(union, grant_entry_v2, sub_page, frame); \
525
    CHECK_SUBFIELD_1_(union, grant_entry_v2, transitive, hdr); \
526
    CHECK_SUBFIELD_1_(union, grant_entry_v2, transitive, trans_domid); \
527
    CHECK_SUBFIELD_1_(union, grant_entry_v2, transitive, pad0); \
528
    CHECK_SUBFIELD_1_(union, grant_entry_v2, transitive, gref); \
529
    CHECK_FIELD_(union, grant_entry_v2, __spacer)
530
531
#define CHECK_gnttab_swap_grant_ref \
532
    CHECK_SIZE_(struct, gnttab_swap_grant_ref); \
533
    CHECK_FIELD_(struct, gnttab_swap_grant_ref, ref_a); \
534
    CHECK_FIELD_(struct, gnttab_swap_grant_ref, ref_b); \
535
    CHECK_FIELD_(struct, gnttab_swap_grant_ref, status)
536
537
0
#define XLAT_dm_op_buf(_d_, _s_) do { \
538
0
    XLAT_dm_op_buf_HNDL_h(_d_, _s_); \
539
0
    (_d_)->size = (_s_)->size; \
540
0
} while (0)
541
542
#define CHECK_dm_op_create_ioreq_server \
543
    CHECK_SIZE_(struct, dm_op_create_ioreq_server); \
544
    CHECK_FIELD_(struct, dm_op_create_ioreq_server, handle_bufioreq); \
545
    CHECK_FIELD_(struct, dm_op_create_ioreq_server, pad); \
546
    CHECK_FIELD_(struct, dm_op_create_ioreq_server, id)
547
548
#define CHECK_dm_op_destroy_ioreq_server \
549
    CHECK_SIZE_(struct, dm_op_destroy_ioreq_server); \
550
    CHECK_FIELD_(struct, dm_op_destroy_ioreq_server, id); \
551
    CHECK_FIELD_(struct, dm_op_destroy_ioreq_server, pad)
552
553
#define CHECK_dm_op_get_ioreq_server_info \
554
    CHECK_SIZE_(struct, dm_op_get_ioreq_server_info); \
555
    CHECK_FIELD_(struct, dm_op_get_ioreq_server_info, id); \
556
    CHECK_FIELD_(struct, dm_op_get_ioreq_server_info, pad); \
557
    CHECK_FIELD_(struct, dm_op_get_ioreq_server_info, bufioreq_port); \
558
    CHECK_FIELD_(struct, dm_op_get_ioreq_server_info, ioreq_gfn); \
559
    CHECK_FIELD_(struct, dm_op_get_ioreq_server_info, bufioreq_gfn)
560
561
#define CHECK_dm_op_inject_event \
562
    CHECK_SIZE_(struct, dm_op_inject_event); \
563
    CHECK_FIELD_(struct, dm_op_inject_event, vcpuid); \
564
    CHECK_FIELD_(struct, dm_op_inject_event, vector); \
565
    CHECK_FIELD_(struct, dm_op_inject_event, type); \
566
    CHECK_FIELD_(struct, dm_op_inject_event, insn_len); \
567
    CHECK_FIELD_(struct, dm_op_inject_event, pad0); \
568
    CHECK_FIELD_(struct, dm_op_inject_event, error_code); \
569
    CHECK_FIELD_(struct, dm_op_inject_event, pad1); \
570
    CHECK_FIELD_(struct, dm_op_inject_event, cr2)
571
572
#define CHECK_dm_op_inject_msi \
573
    CHECK_SIZE_(struct, dm_op_inject_msi); \
574
    CHECK_FIELD_(struct, dm_op_inject_msi, data); \
575
    CHECK_FIELD_(struct, dm_op_inject_msi, pad); \
576
    CHECK_FIELD_(struct, dm_op_inject_msi, addr)
577
578
#define CHECK_dm_op_ioreq_server_range \
579
    CHECK_SIZE_(struct, dm_op_ioreq_server_range); \
580
    CHECK_FIELD_(struct, dm_op_ioreq_server_range, id); \
581
    CHECK_FIELD_(struct, dm_op_ioreq_server_range, pad); \
582
    CHECK_FIELD_(struct, dm_op_ioreq_server_range, type); \
583
    CHECK_FIELD_(struct, dm_op_ioreq_server_range, start); \
584
    CHECK_FIELD_(struct, dm_op_ioreq_server_range, end)
585
586
#define CHECK_dm_op_modified_memory \
587
    CHECK_SIZE_(struct, dm_op_modified_memory); \
588
    CHECK_FIELD_(struct, dm_op_modified_memory, nr_extents); \
589
    CHECK_FIELD_(struct, dm_op_modified_memory, opaque)
590
591
#define CHECK_dm_op_remote_shutdown \
592
    CHECK_SIZE_(struct, dm_op_remote_shutdown); \
593
    CHECK_FIELD_(struct, dm_op_remote_shutdown, reason)
594
595
#define CHECK_dm_op_set_ioreq_server_state \
596
    CHECK_SIZE_(struct, dm_op_set_ioreq_server_state); \
597
    CHECK_FIELD_(struct, dm_op_set_ioreq_server_state, id); \
598
    CHECK_FIELD_(struct, dm_op_set_ioreq_server_state, enabled); \
599
    CHECK_FIELD_(struct, dm_op_set_ioreq_server_state, pad)
600
601
#define CHECK_dm_op_set_isa_irq_level \
602
    CHECK_SIZE_(struct, dm_op_set_isa_irq_level); \
603
    CHECK_FIELD_(struct, dm_op_set_isa_irq_level, isa_irq); \
604
    CHECK_FIELD_(struct, dm_op_set_isa_irq_level, level)
605
606
#define CHECK_dm_op_set_mem_type \
607
    CHECK_SIZE_(struct, dm_op_set_mem_type); \
608
    CHECK_FIELD_(struct, dm_op_set_mem_type, nr); \
609
    CHECK_FIELD_(struct, dm_op_set_mem_type, mem_type); \
610
    CHECK_FIELD_(struct, dm_op_set_mem_type, pad); \
611
    CHECK_FIELD_(struct, dm_op_set_mem_type, first_pfn)
612
613
#define CHECK_dm_op_set_pci_intx_level \
614
    CHECK_SIZE_(struct, dm_op_set_pci_intx_level); \
615
    CHECK_FIELD_(struct, dm_op_set_pci_intx_level, domain); \
616
    CHECK_FIELD_(struct, dm_op_set_pci_intx_level, bus); \
617
    CHECK_FIELD_(struct, dm_op_set_pci_intx_level, device); \
618
    CHECK_FIELD_(struct, dm_op_set_pci_intx_level, intx); \
619
    CHECK_FIELD_(struct, dm_op_set_pci_intx_level, level)
620
621
#define CHECK_dm_op_set_pci_link_route \
622
    CHECK_SIZE_(struct, dm_op_set_pci_link_route); \
623
    CHECK_FIELD_(struct, dm_op_set_pci_link_route, link); \
624
    CHECK_FIELD_(struct, dm_op_set_pci_link_route, isa_irq)
625
626
#define CHECK_dm_op_track_dirty_vram \
627
    CHECK_SIZE_(struct, dm_op_track_dirty_vram); \
628
    CHECK_FIELD_(struct, dm_op_track_dirty_vram, nr); \
629
    CHECK_FIELD_(struct, dm_op_track_dirty_vram, pad); \
630
    CHECK_FIELD_(struct, dm_op_track_dirty_vram, first_pfn)
631
632
#define CHECK_vcpu_hvm_context \
633
    CHECK_SIZE_(struct, vcpu_hvm_context); \
634
    CHECK_FIELD_(struct, vcpu_hvm_context, mode); \
635
    CHECK_FIELD_(struct, vcpu_hvm_context, pad); \
636
    CHECK_vcpu_hvm_x86_32; \
637
    CHECK_vcpu_hvm_x86_64
638
639
#define CHECK_vcpu_hvm_x86_32 \
640
    CHECK_SIZE_(struct, vcpu_hvm_x86_32); \
641
    CHECK_FIELD_(struct, vcpu_hvm_x86_32, eax); \
642
    CHECK_FIELD_(struct, vcpu_hvm_x86_32, ecx); \
643
    CHECK_FIELD_(struct, vcpu_hvm_x86_32, edx); \
644
    CHECK_FIELD_(struct, vcpu_hvm_x86_32, ebx); \
645
    CHECK_FIELD_(struct, vcpu_hvm_x86_32, esp); \
646
    CHECK_FIELD_(struct, vcpu_hvm_x86_32, ebp); \
647
    CHECK_FIELD_(struct, vcpu_hvm_x86_32, esi); \
648
    CHECK_FIELD_(struct, vcpu_hvm_x86_32, edi); \
649
    CHECK_FIELD_(struct, vcpu_hvm_x86_32, eip); \
650
    CHECK_FIELD_(struct, vcpu_hvm_x86_32, eflags); \
651
    CHECK_FIELD_(struct, vcpu_hvm_x86_32, cr0); \
652
    CHECK_FIELD_(struct, vcpu_hvm_x86_32, cr3); \
653
    CHECK_FIELD_(struct, vcpu_hvm_x86_32, cr4); \
654
    CHECK_FIELD_(struct, vcpu_hvm_x86_32, pad1); \
655
    CHECK_FIELD_(struct, vcpu_hvm_x86_32, efer); \
656
    CHECK_FIELD_(struct, vcpu_hvm_x86_32, cs_base); \
657
    CHECK_FIELD_(struct, vcpu_hvm_x86_32, ds_base); \
658
    CHECK_FIELD_(struct, vcpu_hvm_x86_32, ss_base); \
659
    CHECK_FIELD_(struct, vcpu_hvm_x86_32, es_base); \
660
    CHECK_FIELD_(struct, vcpu_hvm_x86_32, tr_base); \
661
    CHECK_FIELD_(struct, vcpu_hvm_x86_32, cs_limit); \
662
    CHECK_FIELD_(struct, vcpu_hvm_x86_32, ds_limit); \
663
    CHECK_FIELD_(struct, vcpu_hvm_x86_32, ss_limit); \
664
    CHECK_FIELD_(struct, vcpu_hvm_x86_32, es_limit); \
665
    CHECK_FIELD_(struct, vcpu_hvm_x86_32, tr_limit); \
666
    CHECK_FIELD_(struct, vcpu_hvm_x86_32, cs_ar); \
667
    CHECK_FIELD_(struct, vcpu_hvm_x86_32, ds_ar); \
668
    CHECK_FIELD_(struct, vcpu_hvm_x86_32, ss_ar); \
669
    CHECK_FIELD_(struct, vcpu_hvm_x86_32, es_ar); \
670
    CHECK_FIELD_(struct, vcpu_hvm_x86_32, tr_ar); \
671
    CHECK_FIELD_(struct, vcpu_hvm_x86_32, pad2)
672
673
#define CHECK_vcpu_hvm_x86_64 \
674
    CHECK_SIZE_(struct, vcpu_hvm_x86_64); \
675
    CHECK_FIELD_(struct, vcpu_hvm_x86_64, rax); \
676
    CHECK_FIELD_(struct, vcpu_hvm_x86_64, rcx); \
677
    CHECK_FIELD_(struct, vcpu_hvm_x86_64, rdx); \
678
    CHECK_FIELD_(struct, vcpu_hvm_x86_64, rbx); \
679
    CHECK_FIELD_(struct, vcpu_hvm_x86_64, rsp); \
680
    CHECK_FIELD_(struct, vcpu_hvm_x86_64, rbp); \
681
    CHECK_FIELD_(struct, vcpu_hvm_x86_64, rsi); \
682
    CHECK_FIELD_(struct, vcpu_hvm_x86_64, rdi); \
683
    CHECK_FIELD_(struct, vcpu_hvm_x86_64, rip); \
684
    CHECK_FIELD_(struct, vcpu_hvm_x86_64, rflags); \
685
    CHECK_FIELD_(struct, vcpu_hvm_x86_64, cr0); \
686
    CHECK_FIELD_(struct, vcpu_hvm_x86_64, cr3); \
687
    CHECK_FIELD_(struct, vcpu_hvm_x86_64, cr4); \
688
    CHECK_FIELD_(struct, vcpu_hvm_x86_64, efer)
689
690
#define CHECK_kexec_exec \
691
    CHECK_SIZE_(struct, kexec_exec); \
692
    CHECK_FIELD_(struct, kexec_exec, type)
693
694
0
#define XLAT_kexec_image(_d_, _s_) do { \
695
0
    { \
696
0
        unsigned int i0; \
697
0
        for (i0 = 0; i0 < 17; ++i0) { \
698
0
            (_d_)->page_list[i0] = (_s_)->page_list[i0]; \
699
0
        } \
700
0
    } \
701
0
    (_d_)->indirection_page = (_s_)->indirection_page; \
702
0
    (_d_)->start_address = (_s_)->start_address; \
703
0
} while (0)
704
705
0
#define XLAT_kexec_range(_d_, _s_) do { \
706
0
    (_d_)->range = (_s_)->range; \
707
0
    (_d_)->nr = (_s_)->nr; \
708
0
    (_d_)->size = (_s_)->size; \
709
0
    (_d_)->start = (_s_)->start; \
710
0
} while (0)
711
712
0
#define XLAT_add_to_physmap(_d_, _s_) do { \
713
0
    (_d_)->domid = (_s_)->domid; \
714
0
    (_d_)->size = (_s_)->size; \
715
0
    (_d_)->space = (_s_)->space; \
716
0
    (_d_)->idx = (_s_)->idx; \
717
0
    (_d_)->gpfn = (_s_)->gpfn; \
718
0
} while (0)
719
720
enum XLAT_add_to_physmap_batch_u {
721
    XLAT_add_to_physmap_batch_u_foreign_domid,
722
    XLAT_add_to_physmap_batch_u_res0,
723
};
724
725
0
#define XLAT_add_to_physmap_batch(_d_, _s_) do { \
726
0
    (_d_)->domid = (_s_)->domid; \
727
0
    (_d_)->space = (_s_)->space; \
728
0
    (_d_)->size = (_s_)->size; \
729
0
    switch (u) { \
730
0
    case XLAT_add_to_physmap_batch_u_foreign_domid: \
731
0
        (_d_)->u.foreign_domid = (_s_)->u.foreign_domid; \
732
0
        break; \
733
0
    case XLAT_add_to_physmap_batch_u_res0: \
734
0
        (_d_)->u.res0 = (_s_)->u.res0; \
735
0
        break; \
736
0
    } \
737
0
    XLAT_add_to_physmap_batch_HNDL_idxs(_d_, _s_); \
738
0
    XLAT_add_to_physmap_batch_HNDL_gpfns(_d_, _s_); \
739
0
    XLAT_add_to_physmap_batch_HNDL_errs(_d_, _s_); \
740
0
} while (0)
741
742
0
#define XLAT_foreign_memory_map(_d_, _s_) do { \
743
0
    (_d_)->domid = (_s_)->domid; \
744
0
    XLAT_memory_map(&(_d_)->map, &(_s_)->map); \
745
0
} while (0)
746
747
0
#define XLAT_memory_exchange(_d_, _s_) do { \
748
0
    XLAT_memory_reservation(&(_d_)->in, &(_s_)->in); \
749
0
    XLAT_memory_reservation(&(_d_)->out, &(_s_)->out); \
750
0
    (_d_)->nr_exchanged = (_s_)->nr_exchanged; \
751
0
} while (0)
752
753
0
#define XLAT_memory_map(_d_, _s_) do { \
754
0
    (_d_)->nr_entries = (_s_)->nr_entries; \
755
0
    XLAT_memory_map_HNDL_buffer(_d_, _s_); \
756
0
} while (0)
757
758
0
#define XLAT_memory_reservation(_d_, _s_) do { \
759
0
    XLAT_memory_reservation_HNDL_extent_start(_d_, _s_); \
760
0
    (_d_)->nr_extents = (_s_)->nr_extents; \
761
0
    (_d_)->extent_order = (_s_)->extent_order; \
762
0
    (_d_)->mem_flags = (_s_)->mem_flags; \
763
0
    (_d_)->domid = (_s_)->domid; \
764
0
} while (0)
765
766
0
#define XLAT_mem_access_op(_d_, _s_) do { \
767
0
    (_d_)->op = (_s_)->op; \
768
0
    (_d_)->access = (_s_)->access; \
769
0
    (_d_)->domid = (_s_)->domid; \
770
0
    (_d_)->nr = (_s_)->nr; \
771
0
    (_d_)->pfn = (_s_)->pfn; \
772
0
    XLAT_mem_access_op_HNDL_pfn_list(_d_, _s_); \
773
0
    XLAT_mem_access_op_HNDL_access_list(_d_, _s_); \
774
0
} while (0)
775
776
0
#define XLAT_pod_target(_d_, _s_) do { \
777
0
    (_d_)->target_pages = (_s_)->target_pages; \
778
0
    (_d_)->tot_pages = (_s_)->tot_pages; \
779
0
    (_d_)->pod_cache_pages = (_s_)->pod_cache_pages; \
780
0
    (_d_)->pod_entries = (_s_)->pod_entries; \
781
0
    (_d_)->domid = (_s_)->domid; \
782
0
} while (0)
783
784
0
#define XLAT_remove_from_physmap(_d_, _s_) do { \
785
0
    (_d_)->domid = (_s_)->domid; \
786
0
    (_d_)->gpfn = (_s_)->gpfn; \
787
0
} while (0)
788
789
enum XLAT_reserved_device_memory_map {
790
    XLAT_reserved_device_memory_map_flags,
791
    XLAT_reserved_device_memory_map_nr_entries,
792
    XLAT_reserved_device_memory_map_buffer,
793
    XLAT_reserved_device_memory_map_dev,
794
};
795
796
#define XLAT_reserved_device_memory_map(_d_, _s_) do { \
797
    (_d_)->flags = (_s_)->flags; \
798
    (_d_)->nr_entries = (_s_)->nr_entries; \
799
    XLAT_reserved_device_memory_map_HNDL_buffer(_d_, _s_); \
800
    switch (dev) { \
801
    case XLAT_reserved_device_memory_map_dev_pci: \
802
        XLAT_physdev_pci_device(&(_d_)->dev.pci, &(_s_)->dev.pci); \
803
        break; \
804
    } \
805
} while (0)
806
807
#define CHECK_vmemrange \
808
    CHECK_SIZE_(struct, vmemrange); \
809
    CHECK_FIELD_(struct, vmemrange, start); \
810
    CHECK_FIELD_(struct, vmemrange, end); \
811
    CHECK_FIELD_(struct, vmemrange, flags); \
812
    CHECK_FIELD_(struct, vmemrange, nid)
813
814
enum XLAT_vnuma_topology_info_vdistance {
815
    XLAT_vnuma_topology_info_vdistance_h,
816
    XLAT_vnuma_topology_info_vdistance_pad,
817
};
818
819
enum XLAT_vnuma_topology_info_vcpu_to_vnode {
820
    XLAT_vnuma_topology_info_vcpu_to_vnode_h,
821
    XLAT_vnuma_topology_info_vcpu_to_vnode_pad,
822
};
823
824
enum XLAT_vnuma_topology_info_vmemrange {
825
    XLAT_vnuma_topology_info_vmemrange_h,
826
    XLAT_vnuma_topology_info_vmemrange_pad,
827
};
828
829
0
#define XLAT_vnuma_topology_info(_d_, _s_) do { \
830
0
    (_d_)->domid = (_s_)->domid; \
831
0
    (_d_)->pad = (_s_)->pad; \
832
0
    (_d_)->nr_vnodes = (_s_)->nr_vnodes; \
833
0
    (_d_)->nr_vcpus = (_s_)->nr_vcpus; \
834
0
    (_d_)->nr_vmemranges = (_s_)->nr_vmemranges; \
835
0
    switch (vdistance) { \
836
0
    case XLAT_vnuma_topology_info_vdistance_h: \
837
0
        XLAT_vnuma_topology_info_HNDL_vdistance_h(_d_, _s_); \
838
0
        break; \
839
0
    case XLAT_vnuma_topology_info_vdistance_pad: \
840
0
        (_d_)->vdistance.pad = (_s_)->vdistance.pad; \
841
0
        break; \
842
0
    } \
843
0
    switch (vcpu_to_vnode) { \
844
0
    case XLAT_vnuma_topology_info_vcpu_to_vnode_h: \
845
0
        XLAT_vnuma_topology_info_HNDL_vcpu_to_vnode_h(_d_, _s_); \
846
0
        break; \
847
0
    case XLAT_vnuma_topology_info_vcpu_to_vnode_pad: \
848
0
        (_d_)->vcpu_to_vnode.pad = (_s_)->vcpu_to_vnode.pad; \
849
0
        break; \
850
0
    } \
851
0
    switch (vmemrange) { \
852
0
    case XLAT_vnuma_topology_info_vmemrange_h: \
853
0
        XLAT_vnuma_topology_info_HNDL_vmemrange_h(_d_, _s_); \
854
0
        break; \
855
0
    case XLAT_vnuma_topology_info_vmemrange_pad: \
856
0
        (_d_)->vmemrange.pad = (_s_)->vmemrange.pad; \
857
0
        break; \
858
0
    } \
859
0
} while (0)
860
861
#define CHECK_physdev_eoi \
862
    CHECK_SIZE_(struct, physdev_eoi); \
863
    CHECK_FIELD_(struct, physdev_eoi, irq)
864
865
#define CHECK_physdev_get_free_pirq \
866
    CHECK_SIZE_(struct, physdev_get_free_pirq); \
867
    CHECK_FIELD_(struct, physdev_get_free_pirq, type); \
868
    CHECK_FIELD_(struct, physdev_get_free_pirq, pirq)
869
870
#define CHECK_physdev_irq \
871
    CHECK_SIZE_(struct, physdev_irq); \
872
    CHECK_FIELD_(struct, physdev_irq, irq); \
873
    CHECK_FIELD_(struct, physdev_irq, vector)
874
875
#define CHECK_physdev_irq_status_query \
876
    CHECK_SIZE_(struct, physdev_irq_status_query); \
877
    CHECK_FIELD_(struct, physdev_irq_status_query, irq); \
878
    CHECK_FIELD_(struct, physdev_irq_status_query, flags)
879
880
#define CHECK_physdev_manage_pci \
881
    CHECK_SIZE_(struct, physdev_manage_pci); \
882
    CHECK_FIELD_(struct, physdev_manage_pci, bus); \
883
    CHECK_FIELD_(struct, physdev_manage_pci, devfn)
884
885
#define CHECK_physdev_manage_pci_ext \
886
    CHECK_SIZE_(struct, physdev_manage_pci_ext); \
887
    CHECK_FIELD_(struct, physdev_manage_pci_ext, bus); \
888
    CHECK_FIELD_(struct, physdev_manage_pci_ext, devfn); \
889
    CHECK_FIELD_(struct, physdev_manage_pci_ext, is_extfn); \
890
    CHECK_FIELD_(struct, physdev_manage_pci_ext, is_virtfn); \
891
    CHECK_SUBFIELD_1_(struct, physdev_manage_pci_ext, physfn, bus); \
892
    CHECK_SUBFIELD_1_(struct, physdev_manage_pci_ext, physfn, devfn)
893
894
#define CHECK_physdev_pci_device \
895
    CHECK_SIZE_(struct, physdev_pci_device); \
896
    CHECK_FIELD_(struct, physdev_pci_device, seg); \
897
    CHECK_FIELD_(struct, physdev_pci_device, bus); \
898
    CHECK_FIELD_(struct, physdev_pci_device, devfn)
899
900
#define CHECK_physdev_pci_device_add \
901
    CHECK_SIZE_(struct, physdev_pci_device_add); \
902
    CHECK_FIELD_(struct, physdev_pci_device_add, seg); \
903
    CHECK_FIELD_(struct, physdev_pci_device_add, bus); \
904
    CHECK_FIELD_(struct, physdev_pci_device_add, devfn); \
905
    CHECK_FIELD_(struct, physdev_pci_device_add, flags); \
906
    CHECK_SUBFIELD_1_(struct, physdev_pci_device_add, physfn, bus); \
907
    CHECK_SUBFIELD_1_(struct, physdev_pci_device_add, physfn, devfn); \
908
    CHECK_FIELD_(struct, physdev_pci_device_add, optarr)
909
910
#define CHECK_physdev_pci_mmcfg_reserved \
911
    CHECK_SIZE_(struct, physdev_pci_mmcfg_reserved); \
912
    CHECK_FIELD_(struct, physdev_pci_mmcfg_reserved, address); \
913
    CHECK_FIELD_(struct, physdev_pci_mmcfg_reserved, segment); \
914
    CHECK_FIELD_(struct, physdev_pci_mmcfg_reserved, start_bus); \
915
    CHECK_FIELD_(struct, physdev_pci_mmcfg_reserved, end_bus); \
916
    CHECK_FIELD_(struct, physdev_pci_mmcfg_reserved, flags)
917
918
#define CHECK_physdev_unmap_pirq \
919
    CHECK_SIZE_(struct, physdev_unmap_pirq); \
920
    CHECK_FIELD_(struct, physdev_unmap_pirq, domid); \
921
    CHECK_FIELD_(struct, physdev_unmap_pirq, pirq)
922
923
#define CHECK_physdev_restore_msi \
924
    CHECK_SIZE_(struct, physdev_restore_msi); \
925
    CHECK_FIELD_(struct, physdev_restore_msi, bus); \
926
    CHECK_FIELD_(struct, physdev_restore_msi, devfn)
927
928
#define CHECK_physdev_set_iopl \
929
    CHECK_SIZE_(struct, physdev_set_iopl); \
930
    CHECK_FIELD_(struct, physdev_set_iopl, iopl)
931
932
#define CHECK_physdev_setup_gsi \
933
    CHECK_SIZE_(struct, physdev_setup_gsi); \
934
    CHECK_FIELD_(struct, physdev_setup_gsi, gsi); \
935
    CHECK_FIELD_(struct, physdev_setup_gsi, triggering); \
936
    CHECK_FIELD_(struct, physdev_setup_gsi, polarity)
937
938
0
#define XLAT_pct_register(_d_, _s_) do { \
939
0
    (_d_)->descriptor = (_s_)->descriptor; \
940
0
    (_d_)->length = (_s_)->length; \
941
0
    (_d_)->space_id = (_s_)->space_id; \
942
0
    (_d_)->bit_width = (_s_)->bit_width; \
943
0
    (_d_)->bit_offset = (_s_)->bit_offset; \
944
0
    (_d_)->reserved = (_s_)->reserved; \
945
0
    (_d_)->address = (_s_)->address; \
946
0
} while (0)
947
948
0
#define XLAT_power_register(_d_, _s_) do { \
949
0
    (_d_)->space_id = (_s_)->space_id; \
950
0
    (_d_)->bit_width = (_s_)->bit_width; \
951
0
    (_d_)->bit_offset = (_s_)->bit_offset; \
952
0
    (_d_)->access_size = (_s_)->access_size; \
953
0
    (_d_)->address = (_s_)->address; \
954
0
} while (0)
955
956
#define CHECK_processor_csd \
957
    CHECK_SIZE_(struct, processor_csd); \
958
    CHECK_FIELD_(struct, processor_csd, domain); \
959
    CHECK_FIELD_(struct, processor_csd, coord_type); \
960
    CHECK_FIELD_(struct, processor_csd, num)
961
962
0
#define XLAT_processor_cx(_d_, _s_) do { \
963
0
    XLAT_power_register(&(_d_)->reg, &(_s_)->reg); \
964
0
    (_d_)->type = (_s_)->type; \
965
0
    (_d_)->latency = (_s_)->latency; \
966
0
    (_d_)->power = (_s_)->power; \
967
0
    (_d_)->dpcnt = (_s_)->dpcnt; \
968
0
    XLAT_processor_cx_HNDL_dp(_d_, _s_); \
969
0
} while (0)
970
971
0
#define XLAT_processor_flags(_d_, _s_) do { \
972
0
    (_d_)->bm_control = (_s_)->bm_control; \
973
0
    (_d_)->bm_check = (_s_)->bm_check; \
974
0
    (_d_)->has_cst = (_s_)->has_cst; \
975
0
    (_d_)->power_setup_done = (_s_)->power_setup_done; \
976
0
    (_d_)->bm_rld_set = (_s_)->bm_rld_set; \
977
0
} while (0)
978
979
0
#define XLAT_processor_performance(_d_, _s_) do { \
980
0
    (_d_)->flags = (_s_)->flags; \
981
0
    (_d_)->platform_limit = (_s_)->platform_limit; \
982
0
    XLAT_pct_register(&(_d_)->control_register, &(_s_)->control_register); \
983
0
    XLAT_pct_register(&(_d_)->status_register, &(_s_)->status_register); \
984
0
    (_d_)->state_count = (_s_)->state_count; \
985
0
    XLAT_processor_performance_HNDL_states(_d_, _s_); \
986
0
    XLAT_psd_package(&(_d_)->domain_info, &(_s_)->domain_info); \
987
0
    (_d_)->shared_type = (_s_)->shared_type; \
988
0
} while (0)
989
990
0
#define XLAT_processor_power(_d_, _s_) do { \
991
0
    (_d_)->count = (_s_)->count; \
992
0
    XLAT_processor_flags(&(_d_)->flags, &(_s_)->flags); \
993
0
    XLAT_processor_power_HNDL_states(_d_, _s_); \
994
0
} while (0)
995
996
#define CHECK_processor_px \
997
    CHECK_SIZE_(struct, processor_px); \
998
    CHECK_FIELD_(struct, processor_px, core_frequency); \
999
    CHECK_FIELD_(struct, processor_px, power); \
1000
    CHECK_FIELD_(struct, processor_px, transition_latency); \
1001
    CHECK_FIELD_(struct, processor_px, bus_master_latency); \
1002
    CHECK_FIELD_(struct, processor_px, control); \
1003
    CHECK_FIELD_(struct, processor_px, status)
1004
1005
0
#define XLAT_psd_package(_d_, _s_) do { \
1006
0
    (_d_)->num_entries = (_s_)->num_entries; \
1007
0
    (_d_)->revision = (_s_)->revision; \
1008
0
    (_d_)->domain = (_s_)->domain; \
1009
0
    (_d_)->coord_type = (_s_)->coord_type; \
1010
0
    (_d_)->num_processors = (_s_)->num_processors; \
1011
0
} while (0)
1012
1013
#define CHECK_pf_enter_acpi_sleep \
1014
    CHECK_SIZE_(struct, pf_enter_acpi_sleep); \
1015
    CHECK_FIELD_(struct, pf_enter_acpi_sleep, val_a); \
1016
    CHECK_FIELD_(struct, pf_enter_acpi_sleep, val_b); \
1017
    CHECK_FIELD_(struct, pf_enter_acpi_sleep, sleep_state); \
1018
    CHECK_FIELD_(struct, pf_enter_acpi_sleep, flags)
1019
1020
#define XLAT_pf_symdata(_d_, _s_) do { \
1021
    (_d_)->namelen = (_s_)->namelen; \
1022
    (_d_)->symnum = (_s_)->symnum; \
1023
    XLAT_pf_symdata_HNDL_name(_d_, _s_); \
1024
    (_d_)->address = (_s_)->address; \
1025
    (_d_)->type = (_s_)->type; \
1026
} while (0)
1027
1028
#define CHECK_pf_pcpuinfo \
1029
    CHECK_SIZE_(struct, pf_pcpuinfo); \
1030
    CHECK_FIELD_(struct, pf_pcpuinfo, xen_cpuid); \
1031
    CHECK_FIELD_(struct, pf_pcpuinfo, max_present); \
1032
    CHECK_FIELD_(struct, pf_pcpuinfo, flags); \
1033
    CHECK_FIELD_(struct, pf_pcpuinfo, apic_id); \
1034
    CHECK_FIELD_(struct, pf_pcpuinfo, acpi_id)
1035
1036
#define CHECK_pf_pcpu_version \
1037
    CHECK_SIZE_(struct, pf_pcpu_version); \
1038
    CHECK_FIELD_(struct, pf_pcpu_version, xen_cpuid); \
1039
    CHECK_FIELD_(struct, pf_pcpu_version, max_present); \
1040
    CHECK_FIELD_(struct, pf_pcpu_version, vendor_id); \
1041
    CHECK_FIELD_(struct, pf_pcpu_version, family); \
1042
    CHECK_FIELD_(struct, pf_pcpu_version, model); \
1043
    CHECK_FIELD_(struct, pf_pcpu_version, stepping)
1044
1045
#define CHECK_pf_resource_entry \
1046
    CHECK_SIZE_(struct, pf_resource_entry); \
1047
    CHECK_SUBFIELD_1_(struct, pf_resource_entry, u, cmd); \
1048
    CHECK_SUBFIELD_1_(struct, pf_resource_entry, u, ret); \
1049
    CHECK_FIELD_(struct, pf_resource_entry, rsvd); \
1050
    CHECK_FIELD_(struct, pf_resource_entry, idx); \
1051
    CHECK_FIELD_(struct, pf_resource_entry, val)
1052
1053
#define CHECK_pmu_data \
1054
    CHECK_SIZE_(struct, pmu_data); \
1055
    CHECK_FIELD_(struct, pmu_data, vcpu_id); \
1056
    CHECK_FIELD_(struct, pmu_data, pcpu_id); \
1057
    CHECK_FIELD_(struct, pmu_data, domain_id); \
1058
    CHECK_FIELD_(struct, pmu_data, pad); \
1059
    CHECK_pmu_arch
1060
1061
#define CHECK_pmu_params \
1062
    CHECK_SIZE_(struct, pmu_params); \
1063
    CHECK_SUBFIELD_1_(struct, pmu_params, version, maj); \
1064
    CHECK_SUBFIELD_1_(struct, pmu_params, version, min); \
1065
    CHECK_FIELD_(struct, pmu_params, val); \
1066
    CHECK_FIELD_(struct, pmu_params, vcpu); \
1067
    CHECK_FIELD_(struct, pmu_params, pad)
1068
1069
0
#define XLAT_sched_poll(_d_, _s_) do { \
1070
0
    XLAT_sched_poll_HNDL_ports(_d_, _s_); \
1071
0
    (_d_)->nr_ports = (_s_)->nr_ports; \
1072
0
    (_d_)->timeout = (_s_)->timeout; \
1073
0
} while (0)
1074
1075
#define CHECK_sched_pin_override \
1076
    CHECK_SIZE_(struct, sched_pin_override); \
1077
    CHECK_FIELD_(struct, sched_pin_override, pcpu)
1078
1079
#define CHECK_sched_remote_shutdown \
1080
    CHECK_SIZE_(struct, sched_remote_shutdown); \
1081
    CHECK_FIELD_(struct, sched_remote_shutdown, domain_id); \
1082
    CHECK_FIELD_(struct, sched_remote_shutdown, reason)
1083
1084
#define CHECK_sched_shutdown \
1085
    CHECK_SIZE_(struct, sched_shutdown); \
1086
    CHECK_FIELD_(struct, sched_shutdown, reason)
1087
1088
#define CHECK_tmem_oid \
1089
    CHECK_SIZE_(struct, tmem_oid); \
1090
    CHECK_FIELD_(struct, tmem_oid, oid)
1091
1092
enum XLAT_tmem_op_u {
1093
    XLAT_tmem_op_u_creat,
1094
    XLAT_tmem_op_u_gen,
1095
};
1096
1097
0
#define XLAT_tmem_op(_d_, _s_) do { \
1098
0
    (_d_)->cmd = (_s_)->cmd; \
1099
0
    (_d_)->pool_id = (_s_)->pool_id; \
1100
0
    switch (u) { \
1101
0
    case XLAT_tmem_op_u_creat: \
1102
0
        { \
1103
0
            unsigned int i0; \
1104
0
            for (i0 = 0; i0 < 2; ++i0) { \
1105
0
                (_d_)->u.creat.uuid[i0] = (_s_)->u.creat.uuid[i0]; \
1106
0
            } \
1107
0
        } \
1108
0
        (_d_)->u.creat.flags = (_s_)->u.creat.flags; \
1109
0
        (_d_)->u.creat.arg1 = (_s_)->u.creat.arg1; \
1110
0
        break; \
1111
0
    case XLAT_tmem_op_u_gen: \
1112
0
        (_d_)->u.gen.oid = (_s_)->u.gen.oid; \
1113
0
        (_d_)->u.gen.index = (_s_)->u.gen.index; \
1114
0
        (_d_)->u.gen.tmem_offset = (_s_)->u.gen.tmem_offset; \
1115
0
        (_d_)->u.gen.pfn_offset = (_s_)->u.gen.pfn_offset; \
1116
0
        (_d_)->u.gen.len = (_s_)->u.gen.len; \
1117
0
        (_d_)->u.gen.cmfn = (_s_)->u.gen.cmfn; \
1118
0
        break; \
1119
0
    } \
1120
0
} while (0)
1121
1122
#define CHECK_t_buf \
1123
    CHECK_SIZE_(struct, t_buf); \
1124
    CHECK_FIELD_(struct, t_buf, cons); \
1125
    CHECK_FIELD_(struct, t_buf, prod)
1126
1127
#define CHECK_vcpu_get_physid \
1128
    CHECK_SIZE_(struct, vcpu_get_physid); \
1129
    CHECK_FIELD_(struct, vcpu_get_physid, phys_id)
1130
1131
#define CHECK_vcpu_register_vcpu_info \
1132
    CHECK_SIZE_(struct, vcpu_register_vcpu_info); \
1133
    CHECK_FIELD_(struct, vcpu_register_vcpu_info, mfn); \
1134
    CHECK_FIELD_(struct, vcpu_register_vcpu_info, offset); \
1135
    CHECK_FIELD_(struct, vcpu_register_vcpu_info, rsvd)
1136
1137
0
#define XLAT_vcpu_runstate_info(_d_, _s_) do { \
1138
0
    (_d_)->state = (_s_)->state; \
1139
0
    (_d_)->state_entry_time = (_s_)->state_entry_time; \
1140
0
    { \
1141
0
        unsigned int i0; \
1142
0
        for (i0 = 0; i0 < 4; ++i0) { \
1143
0
            (_d_)->time[i0] = (_s_)->time[i0]; \
1144
0
        } \
1145
0
    } \
1146
0
} while (0)
1147
1148
#define CHECK_vcpu_set_periodic_timer \
1149
    CHECK_SIZE_(struct, vcpu_set_periodic_timer); \
1150
    CHECK_FIELD_(struct, vcpu_set_periodic_timer, period_ns)
1151
1152
0
#define XLAT_vcpu_set_singleshot_timer(_d_, _s_) do { \
1153
0
    (_d_)->timeout_abs_ns = (_s_)->timeout_abs_ns; \
1154
0
    (_d_)->flags = (_s_)->flags; \
1155
0
} while (0)
1156
1157
#define CHECK_oprof_init \
1158
    CHECK_SIZE_(struct, oprof_init); \
1159
    CHECK_FIELD_(struct, oprof_init, num_events); \
1160
    CHECK_FIELD_(struct, oprof_init, is_primary); \
1161
    CHECK_FIELD_(struct, oprof_init, cpu_type)
1162
1163
#define CHECK_oprof_passive \
1164
    CHECK_SIZE_(struct, oprof_passive); \
1165
    CHECK_FIELD_(struct, oprof_passive, domain_id); \
1166
    CHECK_FIELD_(struct, oprof_passive, max_samples); \
1167
    CHECK_FIELD_(struct, oprof_passive, nbuf); \
1168
    CHECK_FIELD_(struct, oprof_passive, bufsize); \
1169
    CHECK_FIELD_(struct, oprof_passive, buf_gmaddr)