blob: b5037f202be8b4869776c5c01d5c4aec6767a05a (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
|
#ifndef __VKI_XEN_DOMCTL_H
#define __VKI_XEN_DOMCTL_H
/*
* The domctl interface is versioned via the interface_version
* field. This structures in this header supports domctl interfaces:
*
* - 00000007: Xen 4.1
* - 00000008: Xen 4.2
* - 00000009: Xen 4.3
*
* When adding a new subop be sure to include the variants used by all
* of the above, both here and in syswrap-xen.c
*
* Structs which are identical in all supported versions have no
* version suffix. Structs which do differ are defined multiple times
* and use the suffix of the latest version to contain that particular
* variant.
*/
#define VKI_XEN_DOMCTL_createdomain 1
#define VKI_XEN_DOMCTL_destroydomain 2
#define VKI_XEN_DOMCTL_pausedomain 3
#define VKI_XEN_DOMCTL_unpausedomain 4
#define VKI_XEN_DOMCTL_getdomaininfo 5
#define VKI_XEN_DOMCTL_getmemlist 6
#define VKI_XEN_DOMCTL_getpageframeinfo 7
#define VKI_XEN_DOMCTL_getpageframeinfo2 8
#define VKI_XEN_DOMCTL_setvcpuaffinity 9
#define VKI_XEN_DOMCTL_shadow_op 10
#define VKI_XEN_DOMCTL_max_mem 11
#define VKI_XEN_DOMCTL_setvcpucontext 12
#define VKI_XEN_DOMCTL_getvcpucontext 13
#define VKI_XEN_DOMCTL_getvcpuinfo 14
#define VKI_XEN_DOMCTL_max_vcpus 15
#define VKI_XEN_DOMCTL_scheduler_op 16
#define VKI_XEN_DOMCTL_setdomainhandle 17
#define VKI_XEN_DOMCTL_setdebugging 18
#define VKI_XEN_DOMCTL_irq_permission 19
#define VKI_XEN_DOMCTL_iomem_permission 20
#define VKI_XEN_DOMCTL_ioport_permission 21
#define VKI_XEN_DOMCTL_hypercall_init 22
#define VKI_XEN_DOMCTL_arch_setup 23
#define VKI_XEN_DOMCTL_settimeoffset 24
#define VKI_XEN_DOMCTL_getvcpuaffinity 25
#define VKI_XEN_DOMCTL_real_mode_area 26
#define VKI_XEN_DOMCTL_resumedomain 27
#define VKI_XEN_DOMCTL_sendtrigger 28
#define VKI_XEN_DOMCTL_subscribe 29
#define VKI_XEN_DOMCTL_gethvmcontext 33
#define VKI_XEN_DOMCTL_sethvmcontext 34
#define VKI_XEN_DOMCTL_set_address_size 35
#define VKI_XEN_DOMCTL_get_address_size 36
#define VKI_XEN_DOMCTL_assign_device 37
#define VKI_XEN_DOMCTL_bind_pt_irq 38
#define VKI_XEN_DOMCTL_memory_mapping 39
#define VKI_XEN_DOMCTL_ioport_mapping 40
#define VKI_XEN_DOMCTL_pin_mem_cacheattr 41
#define VKI_XEN_DOMCTL_set_ext_vcpucontext 42
#define VKI_XEN_DOMCTL_get_ext_vcpucontext 43
#define VKI_XEN_DOMCTL_set_opt_feature 44 /*Obsolete IA64 only */
#define VKI_XEN_DOMCTL_test_assign_device 45
#define VKI_XEN_DOMCTL_set_target 46
#define VKI_XEN_DOMCTL_deassign_device 47
#define VKI_XEN_DOMCTL_unbind_pt_irq 48
#define VKI_XEN_DOMCTL_set_cpuid 49
#define VKI_XEN_DOMCTL_get_device_group 50
#define VKI_XEN_DOMCTL_set_machine_address_size 51
#define VKI_XEN_DOMCTL_get_machine_address_size 52
#define VKI_XEN_DOMCTL_suppress_spurious_page_faults 53
#define VKI_XEN_DOMCTL_debug_op 54
#define VKI_XEN_DOMCTL_gethvmcontext_partial 55
#define VKI_XEN_DOMCTL_mem_event_op 56
#define VKI_XEN_DOMCTL_mem_sharing_op 57
#define VKI_XEN_DOMCTL_disable_migrate 58
#define VKI_XEN_DOMCTL_gettscinfo 59
#define VKI_XEN_DOMCTL_settscinfo 60
#define VKI_XEN_DOMCTL_getpageframeinfo3 61
#define VKI_XEN_DOMCTL_setvcpuextstate 62
#define VKI_XEN_DOMCTL_getvcpuextstate 63
#define VKI_XEN_DOMCTL_set_access_required 64
#define VKI_XEN_DOMCTL_audit_p2m 65
#define VKI_XEN_DOMCTL_set_virq_handler 66
#define VKI_XEN_DOMCTL_set_broken_page_p2m 67
#define VKI_XEN_DOMCTL_setnodeaffinity 68
#define VKI_XEN_DOMCTL_getnodeaffinity 69
#define VKI_XEN_DOMCTL_set_max_evtchn 70
#define VKI_XEN_DOMCTL_cacheflush 71
#define VKI_XEN_DOMCTL_gdbsx_guestmemio 1000
#define VKI_XEN_DOMCTL_gdbsx_pausevcpu 1001
#define VKI_XEN_DOMCTL_gdbsx_unpausevcpu 1002
#define VKI_XEN_DOMCTL_gdbsx_domstatus 1003
struct vki_xen_domctl_createdomain {
/* IN parameters */
vki_uint32_t ssidref;
vki_xen_domain_handle_t handle;
vki_uint32_t flags;
};
struct vki_xen_domctl_getdomaininfo_00000007 {
/* OUT variables. */
vki_xen_domid_t domain;
vki_uint32_t flags;
vki_xen_uint64_aligned_t tot_pages;
vki_xen_uint64_aligned_t max_pages;
vki_xen_uint64_aligned_t shr_pages;
vki_xen_uint64_aligned_t paged_pages;
vki_xen_uint64_aligned_t shared_info_frame;
vki_xen_uint64_aligned_t cpu_time;
vki_uint32_t nr_online_vcpus;
vki_uint32_t max_vcpu_id;
vki_uint32_t ssidref;
vki_xen_domain_handle_t handle;
vki_uint32_t cpupool;
};
typedef struct vki_xen_domctl_getdomaininfo_00000007 vki_xen_domctl_getdomaininfo_00000007_t;
DEFINE_VKI_XEN_GUEST_HANDLE(vki_xen_domctl_getdomaininfo_00000007_t);
struct vki_xen_domctl_getdomaininfo_00000008 {
/* OUT variables. */
vki_xen_domid_t domain;
vki_uint32_t flags;
vki_xen_uint64_aligned_t tot_pages;
vki_xen_uint64_aligned_t max_pages;
vki_xen_uint64_aligned_t shr_pages;
vki_xen_uint64_aligned_t paged_pages;
vki_xen_uint64_aligned_t shared_info_frame;
vki_xen_uint64_aligned_t cpu_time;
vki_uint32_t nr_online_vcpus;
vki_uint32_t max_vcpu_id;
vki_uint32_t ssidref;
vki_xen_domain_handle_t handle;
vki_uint32_t cpupool;
};
typedef struct vki_xen_domctl_getdomaininfo_00000008 vki_xen_domctl_getdomaininfo_00000008_t;
DEFINE_VKI_XEN_GUEST_HANDLE(vki_xen_domctl_getdomaininfo_00000008_t);
struct vki_xen_domctl_getdomaininfo_00000009 {
/* OUT variables. */
vki_xen_domid_t domain;
vki_uint32_t flags;
vki_xen_uint64_aligned_t tot_pages;
vki_xen_uint64_aligned_t max_pages;
vki_xen_uint64_aligned_t outstanding_pages;
vki_xen_uint64_aligned_t shr_pages;
vki_xen_uint64_aligned_t paged_pages;
vki_xen_uint64_aligned_t shared_info_frame;
vki_xen_uint64_aligned_t cpu_time;
vki_uint32_t nr_online_vcpus;
vki_uint32_t max_vcpu_id;
vki_uint32_t ssidref;
vki_xen_domain_handle_t handle;
vki_uint32_t cpupool;
};
typedef struct vki_xen_domctl_getdomaininfo_00000009 vki_xen_domctl_getdomaininfo_00000009_t;
DEFINE_VKI_XEN_GUEST_HANDLE(vki_xen_domctl_getdomaininfo_00000009_t);
/* Get/set the NUMA node(s) with which the guest has affinity with. */
/* XEN_DOMCTL_setnodeaffinity */
/* XEN_DOMCTL_getnodeaffinity */
struct vki_xen_domctl_nodeaffinity {
struct vki_xenctl_bitmap nodemap;/* IN */
};
typedef struct vki_xen_domctl_nodeaffinity vki_xen_domctl_nodeaffinity_t;
DEFINE_VKI_XEN_GUEST_HANDLE(vki_xen_domctl_nodeaffinity_t);
struct vki_xen_domctl_getpageframeinfo3 {
vki_xen_uint64_aligned_t num; /* IN */
VKI_XEN_GUEST_HANDLE_64(vki_xen_pfn_t) array; /* IN/OUT */
};
struct vki_xen_domctl_vcpuaffinity {
vki_uint32_t vcpu; /* IN */
struct vki_xenctl_bitmap cpumap; /* IN/OUT */
};
struct vki_xen_domctl_shadow_op_stats {
vki_uint32_t fault_count;
vki_uint32_t dirty_count;
};
/* vki_xen_domctl_shadow_op.op is an utter mess for compatibily reasons. */
struct vki_xen_domctl_shadow_op {
vki_uint32_t op; /* IN */
#define VKI_XEN_DOMCTL_SHADOW_OP_OFF 0
#define VKI_XEN_DOMCTL_SHADOW_OP_ENABLE 32
#define VKI_XEN_DOMCTL_SHADOW_OP_CLEAN 11
#define VKI_XEN_DOMCTL_SHADOW_OP_PEEK 12
#define VKI_XEN_DOMCTL_SHADOW_OP_GET_ALLOCATION 30
#define VKI_XEN_DOMCTL_SHADOW_OP_SET_ALLOCATION 31
#define VKI_XEN_DOMCTL_SHADOW_OP_ENABLE_TEST 1
#define VKI_XEN_DOMCTL_SHADOW_OP_ENABLE_LOGDIRTY 2
#define VKI_XEN_DOMCTL_SHADOW_OP_ENABLE_TRANSLATE 3
vki_uint32_t mode;
#define XEN_DOMCTL_SHADOW_ENABLE_REFCOUNT (1 << 1)
#define XEN_DOMCTL_SHADOW_ENABLE_LOG_DIRTY (1 << 2)
#define XEN_DOMCTL_SHADOW_ENABLE_TRANSLATE (1 << 3)
#define XEN_DOMCTL_SHADOW_ENABLE_EXTERNAL (1 << 4)
vki_uint32_t mb;
VKI_XEN_GUEST_HANDLE_64(vki_uint8) dirty_bitmap;
vki_xen_uint64_aligned_t pages;
struct vki_xen_domctl_shadow_op_stats stats;
};
struct vki_xen_domctl_max_mem {
/* IN variables. */
vki_xen_uint64_aligned_t max_memkb;
};
struct vki_xen_domctl_vcpucontext {
vki_uint32_t vcpu; /* IN */
VKI_XEN_GUEST_HANDLE_64(vki_xen_vcpu_guest_context_t) ctxt; /* IN/OUT */
};
struct vki_xen_domctl_getvcpuinfo {
/* IN variables. */
vki_uint32_t vcpu;
/* OUT variables. */
vki_uint8_t online; /* currently online (not hotplugged)? */
vki_uint8_t blocked; /* blocked waiting for an event? */
vki_uint8_t running; /* currently scheduled on its CPU? */
vki_xen_uint64_aligned_t cpu_time;/* total cpu time consumed (ns) */
vki_uint32_t cpu; /* current mapping */
};
struct vki_xen_domctl_scheduler_op {
vki_uint32_t sched_id; /* VKI_XEN_SCHEDULER_* */
#define VKI_XEN_SCHEDULER_SEDF 4
#define VKI_XEN_SCHEDULER_CREDIT 5
#define VKI_XEN_SCHEDULER_CREDIT2 6
#define VKI_XEN_SCHEDULER_ARINC653 7
vki_uint32_t cmd; /* VKI_XEN_DOMCTL_SCHEDOP_* */
#define VKI_XEN_DOMCTL_SCHEDOP_putinfo 0
#define VKI_XEN_DOMCTL_SCHEDOP_getinfo 1
union {
struct xen_domctl_sched_sedf {
vki_xen_uint64_aligned_t period;
vki_xen_uint64_aligned_t slice;
vki_xen_uint64_aligned_t latency;
vki_uint32_t extratime;
vki_uint32_t weight;
} sedf;
struct xen_domctl_sched_credit {
vki_uint16_t weight;
vki_uint16_t cap;
} credit;
struct xen_domctl_sched_credit2 {
vki_uint16_t weight;
} credit2;
} u;
};
struct vki_xen_domctl_max_vcpus {
vki_uint32_t max; /* maximum number of vcpus */
};
struct vki_xen_domctl_ioport_permission {
vki_uint32_t first_port; /* IN */
vki_uint32_t nr_ports; /* IN */
vki_uint8_t allow_access; /* IN */
};
struct vki_xen_domctl_hypercall_init {
vki_xen_uint64_aligned_t gmfn; /* GMFN to be initialised */
};
struct vki_xen_domctl_settimeoffset {
vki_int32_t time_offset_seconds;
};
struct vki_xen_domctl_cpuid {
vki_uint32_t input[2];
vki_uint32_t eax;
vki_uint32_t ebx;
vki_uint32_t ecx;
vki_uint32_t edx;
};
struct vki_xen_guest_tsc_info {
vki_uint32_t tsc_mode;
vki_uint32_t gtsc_khz;
vki_uint32_t incarnation;
vki_uint32_t pad;
vki_xen_uint64_aligned_t elapsed_nsec;
};
typedef struct vki_xen_guest_tsc_info vki_xen_guest_tsc_info_t;
DEFINE_VKI_XEN_GUEST_HANDLE(vki_xen_guest_tsc_info_t);
struct vki_xen_domctl_hvmcontext {
vki_uint32_t size; /* IN/OUT size of buffer */
VKI_XEN_GUEST_HANDLE_64(vki_uint8) buffer; /* IN/OUT */
};
typedef struct vki_xen_domctl_hvmcontext vki_xen_domctl_hvmcontext_t;
DEFINE_VKI_XEN_GUEST_HANDLE(vki_xen_domctl_hvmcontext_t);
struct vki_xen_domctl_hvmcontext_partial {
vki_uint32_t type; /* IN */
vki_uint32_t instance; /* IN */
VKI_XEN_GUEST_HANDLE_64(vki_uint8) buffer; /* IN/OUT buffer */
};
typedef struct vki_xen_domctl_hvmcontext_partial vki_xen_domctl_hvmcontext_partial_t;
DEFINE_VKI_XEN_GUEST_HANDLE(vki_xen_domctl_hvmcontext_partial_t);
struct vki_xen_domctl_tsc_info {
VKI_XEN_GUEST_HANDLE_64(vki_xen_guest_tsc_info_t) out_info; /* OUT */
vki_xen_guest_tsc_info_t info; /* IN */
};
struct vki_xen_domctl_vcpuextstate {
vki_uint32_t vcpu;
vki_xen_uint64_aligned_t xfeature_mask;
vki_xen_uint64_aligned_t size;
VKI_XEN_GUEST_HANDLE_64(vki_uint64) buffer;
};
struct vki_xen_domctl_address_size {
vki_uint32_t size;
};
struct vki_xen_domctl_debug_op {
vki_uint32_t op; /* IN */
vki_uint32_t vcpu; /* IN */
};
typedef struct vki_xen_domctl_debug_op vki_xen_domctl_debug_op_t;
struct vki_xen_domctl_mem_event_op {
vki_uint32_t op; /* IN */
vki_uint32_t mode; /* IN */
vki_uint32_t port; /* OUT */
};
struct vki_xen_domctl_set_access_required {
vki_uint8_t access_required; /* IN */
};
struct vki_xen_domctl_set_max_evtchn {
vki_uint32_t max_port;
};
struct vki_xen_domctl_cacheflush {
/* IN: page range to flush. */
vki_xen_pfn_t start_pfn, nr_pfns;
};
struct vki_xen_domctl {
vki_uint32_t cmd;
vki_uint32_t interface_version; /* XEN_DOMCTL_INTERFACE_VERSION */
vki_xen_domid_t domain;
union {
struct vki_xen_domctl_createdomain createdomain;
struct vki_xen_domctl_getdomaininfo_00000007 getdomaininfo_00000007;
struct vki_xen_domctl_getdomaininfo_00000008 getdomaininfo_00000008;
struct vki_xen_domctl_getdomaininfo_00000009 getdomaininfo_00000009;
//struct vki_xen_domctl_getmemlist getmemlist;
//struct vki_xen_domctl_getpageframeinfo getpageframeinfo;
//struct vki_xen_domctl_getpageframeinfo2 getpageframeinfo2;
struct vki_xen_domctl_getpageframeinfo3 getpageframeinfo3;
struct vki_xen_domctl_nodeaffinity nodeaffinity;
struct vki_xen_domctl_vcpuaffinity vcpuaffinity;
struct vki_xen_domctl_shadow_op shadow_op;
struct vki_xen_domctl_max_mem max_mem;
struct vki_xen_domctl_vcpucontext vcpucontext;
struct vki_xen_domctl_getvcpuinfo getvcpuinfo;
struct vki_xen_domctl_max_vcpus max_vcpus;
struct vki_xen_domctl_scheduler_op scheduler_op;
//struct vki_xen_domctl_setdomainhandle setdomainhandle;
//struct vki_xen_domctl_setdebugging setdebugging;
//struct vki_xen_domctl_irq_permission irq_permission;
//struct vki_xen_domctl_iomem_permission iomem_permission;
struct vki_xen_domctl_ioport_permission ioport_permission;
struct vki_xen_domctl_hypercall_init hypercall_init;
//struct vki_xen_domctl_arch_setup arch_setup;
struct vki_xen_domctl_settimeoffset settimeoffset;
//struct vki_xen_domctl_disable_migrate disable_migrate;
struct vki_xen_domctl_tsc_info tsc_info;
//struct vki_xen_domctl_real_mode_area real_mode_area;
struct vki_xen_domctl_hvmcontext hvmcontext;
struct vki_xen_domctl_hvmcontext_partial hvmcontext_partial;
struct vki_xen_domctl_address_size address_size;
//struct vki_xen_domctl_sendtrigger sendtrigger;
//struct vki_xen_domctl_get_device_group get_device_group;
//struct vki_xen_domctl_assign_device assign_device;
//struct vki_xen_domctl_bind_pt_irq bind_pt_irq;
//struct vki_xen_domctl_memory_mapping memory_mapping;
//struct vki_xen_domctl_ioport_mapping ioport_mapping;
//struct vki_xen_domctl_pin_mem_cacheattr pin_mem_cacheattr;
//struct vki_xen_domctl_ext_vcpucontext ext_vcpucontext;
//struct vki_xen_domctl_set_target set_target;
//struct vki_xen_domctl_subscribe subscribe;
struct vki_xen_domctl_debug_op debug_op;
struct vki_xen_domctl_mem_event_op mem_event_op;
//struct vki_xen_domctl_mem_sharing_op mem_sharing_op;
#if defined(__i386__) || defined(__x86_64__)
struct vki_xen_domctl_cpuid cpuid;
struct vki_xen_domctl_vcpuextstate vcpuextstate;
#endif
struct vki_xen_domctl_set_access_required access_required;
//struct vki_xen_domctl_audit_p2m audit_p2m;
//struct vki_xen_domctl_set_virq_handler set_virq_handler;
struct vki_xen_domctl_set_max_evtchn set_max_evtchn;
//struct vki_xen_domctl_gdbsx_memio gdbsx_guest_memio;
//struct vki_xen_domctl_set_broken_page_p2m set_broken_page_p2m;
struct vki_xen_domctl_cacheflush cacheflush;
//struct vki_xen_domctl_gdbsx_pauseunp_vcpu gdbsx_pauseunp_vcpu;
//struct vki_xen_domctl_gdbsx_domstatus gdbsx_domstatus;
vki_uint8_t pad[128];
} u;
};
#endif // __VKI_XEN_DOMCTL_H
/*--------------------------------------------------------------------*/
/*--- end ---*/
/*--------------------------------------------------------------------*/
|