Handle gcc __builtin_strcmp using 128/256 bit vectors with sse4.1, avx/avx2
[valgrind.git] / include / vki / vki-xen-domctl.h
blob3a544f556f8dd23db92e1f34d9e3e5b81c0001a6
1 /*
2 This file is part of Valgrind, a dynamic binary instrumentation
3 framework.
5 Copyright (C) 2012-2017 Citrix
7 This program is free software; you can redistribute it and/or
8 modify it under the terms of the GNU General Public License as
9 published by the Free Software Foundation; either version 2 of the
10 License, or (at your option) any later version.
12 This program is distributed in the hope that it will be useful, but
13 WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, see <http://www.gnu.org/licenses/>.
20 The GNU General Public License is contained in the file COPYING.
23 /* Contributed by Andrew Cooper <andrew.cooper3@citrix.com>
24 and Ian Campbell <ian.campbell@citrix.com> */
26 #ifndef __VKI_XEN_DOMCTL_H
27 #define __VKI_XEN_DOMCTL_H
30 * The domctl interface is versioned via the interface_version
31 * field. This structures in this header supports domctl interfaces:
33 * - 0x00000007: Xen 4.1
34 * - 0x00000008: Xen 4.2
35 * - 0x00000009: Xen 4.3 & 4.4
36 * - 0x0000000a: Xen 4.5
37 * - 0x0000000b: Xen 4.6
38 * - 0x0000000c: Xen 4.7
40 * When adding a new subop be sure to include the variants used by all
41 * of the above, both here and in syswrap-xen.c
43 * Structs which are identical in all supported versions have no
44 * version suffix. Structs which do differ are defined multiple times
45 * and use the suffix of the latest version to contain that particular
46 * variant.
49 #define VKI_XEN_DOMCTL_createdomain 1
50 #define VKI_XEN_DOMCTL_destroydomain 2
51 #define VKI_XEN_DOMCTL_pausedomain 3
52 #define VKI_XEN_DOMCTL_unpausedomain 4
53 #define VKI_XEN_DOMCTL_getdomaininfo 5
54 #define VKI_XEN_DOMCTL_getmemlist 6
55 #define VKI_XEN_DOMCTL_getpageframeinfo 7
56 #define VKI_XEN_DOMCTL_getpageframeinfo2 8
57 #define VKI_XEN_DOMCTL_setvcpuaffinity 9
58 #define VKI_XEN_DOMCTL_shadow_op 10
59 #define VKI_XEN_DOMCTL_max_mem 11
60 #define VKI_XEN_DOMCTL_setvcpucontext 12
61 #define VKI_XEN_DOMCTL_getvcpucontext 13
62 #define VKI_XEN_DOMCTL_getvcpuinfo 14
63 #define VKI_XEN_DOMCTL_max_vcpus 15
64 #define VKI_XEN_DOMCTL_scheduler_op 16
65 #define VKI_XEN_DOMCTL_setdomainhandle 17
66 #define VKI_XEN_DOMCTL_setdebugging 18
67 #define VKI_XEN_DOMCTL_irq_permission 19
68 #define VKI_XEN_DOMCTL_iomem_permission 20
69 #define VKI_XEN_DOMCTL_ioport_permission 21
70 #define VKI_XEN_DOMCTL_hypercall_init 22
71 #define VKI_XEN_DOMCTL_arch_setup 23
72 #define VKI_XEN_DOMCTL_settimeoffset 24
73 #define VKI_XEN_DOMCTL_getvcpuaffinity 25
74 #define VKI_XEN_DOMCTL_real_mode_area 26
75 #define VKI_XEN_DOMCTL_resumedomain 27
76 #define VKI_XEN_DOMCTL_sendtrigger 28
77 #define VKI_XEN_DOMCTL_subscribe 29
78 #define VKI_XEN_DOMCTL_gethvmcontext 33
79 #define VKI_XEN_DOMCTL_sethvmcontext 34
80 #define VKI_XEN_DOMCTL_set_address_size 35
81 #define VKI_XEN_DOMCTL_get_address_size 36
82 #define VKI_XEN_DOMCTL_assign_device 37
83 #define VKI_XEN_DOMCTL_bind_pt_irq 38
84 #define VKI_XEN_DOMCTL_memory_mapping 39
85 #define VKI_XEN_DOMCTL_ioport_mapping 40
86 #define VKI_XEN_DOMCTL_pin_mem_cacheattr 41
87 #define VKI_XEN_DOMCTL_set_ext_vcpucontext 42
88 #define VKI_XEN_DOMCTL_get_ext_vcpucontext 43
89 #define VKI_XEN_DOMCTL_set_opt_feature 44 /*Obsolete IA64 only */
90 #define VKI_XEN_DOMCTL_test_assign_device 45
91 #define VKI_XEN_DOMCTL_set_target 46
92 #define VKI_XEN_DOMCTL_deassign_device 47
93 #define VKI_XEN_DOMCTL_unbind_pt_irq 48
94 #define VKI_XEN_DOMCTL_set_cpuid 49
95 #define VKI_XEN_DOMCTL_get_device_group 50
96 #define VKI_XEN_DOMCTL_set_machine_address_size 51
97 #define VKI_XEN_DOMCTL_get_machine_address_size 52
98 #define VKI_XEN_DOMCTL_suppress_spurious_page_faults 53
99 #define VKI_XEN_DOMCTL_debug_op 54
100 #define VKI_XEN_DOMCTL_gethvmcontext_partial 55
101 #define VKI_XEN_DOMCTL_mem_event_op 56
102 #define VKI_XEN_DOMCTL_vm_event_op 56 /* name change in 4.6 */
103 #define VKI_XEN_DOMCTL_mem_sharing_op 57
104 #define VKI_XEN_DOMCTL_disable_migrate 58
105 #define VKI_XEN_DOMCTL_gettscinfo 59
106 #define VKI_XEN_DOMCTL_settscinfo 60
107 #define VKI_XEN_DOMCTL_getpageframeinfo3 61
108 #define VKI_XEN_DOMCTL_setvcpuextstate 62
109 #define VKI_XEN_DOMCTL_getvcpuextstate 63
110 #define VKI_XEN_DOMCTL_set_access_required 64
111 #define VKI_XEN_DOMCTL_audit_p2m 65
112 #define VKI_XEN_DOMCTL_set_virq_handler 66
113 #define VKI_XEN_DOMCTL_set_broken_page_p2m 67
114 #define VKI_XEN_DOMCTL_setnodeaffinity 68
115 #define VKI_XEN_DOMCTL_getnodeaffinity 69
116 #define VKI_XEN_DOMCTL_set_max_evtchn 70
117 #define VKI_XEN_DOMCTL_cacheflush 71
118 #define VKI_XEN_DOMCTL_get_vcpu_msrs 72
119 #define VKI_XEN_DOMCTL_set_vcpu_msrs 73
120 #define VKI_XEN_DOMCTL_monitor_op 77 /* new in 4.6 */
121 #define VKI_XEN_DOMCTL_gdbsx_guestmemio 1000
122 #define VKI_XEN_DOMCTL_gdbsx_pausevcpu 1001
123 #define VKI_XEN_DOMCTL_gdbsx_unpausevcpu 1002
124 #define VKI_XEN_DOMCTL_gdbsx_domstatus 1003
126 struct vki_xen_domctl_createdomain {
127 /* IN parameters */
128 vki_uint32_t ssidref;
129 vki_xen_domain_handle_t handle;
130 vki_uint32_t flags;
133 struct vki_xen_domctl_getdomaininfo_00000007 {
134 /* OUT variables. */
135 vki_xen_domid_t domain;
136 vki_uint32_t flags;
137 vki_xen_uint64_aligned_t tot_pages;
138 vki_xen_uint64_aligned_t max_pages;
139 vki_xen_uint64_aligned_t shr_pages;
140 vki_xen_uint64_aligned_t paged_pages;
141 vki_xen_uint64_aligned_t shared_info_frame;
142 vki_xen_uint64_aligned_t cpu_time;
143 vki_uint32_t nr_online_vcpus;
144 vki_uint32_t max_vcpu_id;
145 vki_uint32_t ssidref;
146 vki_xen_domain_handle_t handle;
147 vki_uint32_t cpupool;
149 typedef struct vki_xen_domctl_getdomaininfo_00000007 vki_xen_domctl_getdomaininfo_00000007_t;
150 DEFINE_VKI_XEN_GUEST_HANDLE(vki_xen_domctl_getdomaininfo_00000007_t);
152 struct vki_xen_domctl_getdomaininfo_00000008 {
153 /* OUT variables. */
154 vki_xen_domid_t domain;
155 vki_uint32_t flags;
156 vki_xen_uint64_aligned_t tot_pages;
157 vki_xen_uint64_aligned_t max_pages;
158 vki_xen_uint64_aligned_t shr_pages;
159 vki_xen_uint64_aligned_t paged_pages;
160 vki_xen_uint64_aligned_t shared_info_frame;
161 vki_xen_uint64_aligned_t cpu_time;
162 vki_uint32_t nr_online_vcpus;
163 vki_uint32_t max_vcpu_id;
164 vki_uint32_t ssidref;
165 vki_xen_domain_handle_t handle;
166 vki_uint32_t cpupool;
168 typedef struct vki_xen_domctl_getdomaininfo_00000008 vki_xen_domctl_getdomaininfo_00000008_t;
169 DEFINE_VKI_XEN_GUEST_HANDLE(vki_xen_domctl_getdomaininfo_00000008_t);
171 struct vki_xen_domctl_getdomaininfo_00000009 {
172 /* OUT variables. */
173 vki_xen_domid_t domain;
174 vki_uint32_t flags;
175 vki_xen_uint64_aligned_t tot_pages;
176 vki_xen_uint64_aligned_t max_pages;
177 vki_xen_uint64_aligned_t outstanding_pages;
178 vki_xen_uint64_aligned_t shr_pages;
179 vki_xen_uint64_aligned_t paged_pages;
180 vki_xen_uint64_aligned_t shared_info_frame;
181 vki_xen_uint64_aligned_t cpu_time;
182 vki_uint32_t nr_online_vcpus;
183 vki_uint32_t max_vcpu_id;
184 vki_uint32_t ssidref;
185 vki_xen_domain_handle_t handle;
186 vki_uint32_t cpupool;
188 typedef struct vki_xen_domctl_getdomaininfo_00000009 vki_xen_domctl_getdomaininfo_00000009_t;
189 DEFINE_VKI_XEN_GUEST_HANDLE(vki_xen_domctl_getdomaininfo_00000009_t);
191 // x86 version only for now
192 struct vki_xen_arch_domainconfig_00000010 {
193 vki_uint32_t emulation_flags;
196 struct vki_xen_domctl_getdomaininfo_00000010 {
197 /* OUT variables. */
198 vki_xen_domid_t domain;
199 vki_uint32_t flags;
200 vki_xen_uint64_aligned_t tot_pages;
201 vki_xen_uint64_aligned_t max_pages;
202 vki_xen_uint64_aligned_t outstanding_pages;
203 vki_xen_uint64_aligned_t shr_pages;
204 vki_xen_uint64_aligned_t paged_pages;
205 vki_xen_uint64_aligned_t shared_info_frame;
206 vki_xen_uint64_aligned_t cpu_time;
207 vki_uint32_t nr_online_vcpus;
208 vki_uint32_t max_vcpu_id;
209 vki_uint32_t ssidref;
210 vki_xen_domain_handle_t handle;
211 vki_uint32_t cpupool;
212 struct vki_xen_arch_domainconfig_00000010 arch;
214 typedef struct vki_xen_domctl_getdomaininfo_00000010 vki_xen_domctl_getdomaininfo_00000010_t;
215 DEFINE_VKI_XEN_GUEST_HANDLE(vki_xen_domctl_getdomaininfo_00000010_t);
217 /* vki_xen_domctl_getdomaininfo_0000000a is the same as 00000009 */
219 /* Get/set the NUMA node(s) with which the guest has affinity with. */
220 /* XEN_DOMCTL_setnodeaffinity */
221 /* XEN_DOMCTL_getnodeaffinity */
222 struct vki_xen_domctl_nodeaffinity {
223 struct vki_xenctl_bitmap nodemap;/* IN */
225 typedef struct vki_xen_domctl_nodeaffinity vki_xen_domctl_nodeaffinity_t;
226 DEFINE_VKI_XEN_GUEST_HANDLE(vki_xen_domctl_nodeaffinity_t);
228 struct vki_xen_domctl_getpageframeinfo3 {
229 vki_xen_uint64_aligned_t num; /* IN */
230 VKI_XEN_GUEST_HANDLE_64(vki_xen_pfn_t) array; /* IN/OUT */
233 struct vki_xen_domctl_vcpuaffinity_00000009 {
234 vki_uint32_t vcpu; /* IN */
235 struct vki_xenctl_bitmap cpumap; /* IN/OUT */
238 struct vki_xen_domctl_vcpuaffinity_0000000a {
239 vki_uint32_t vcpu; /* IN */
240 #define VKI_XEN_VCPUAFFINITY_HARD (1U<<0)
241 #define VKI_XEN_VCPUAFFINITY_SOFT (1U<<1)
242 vki_uint32_t flags; /* IN */
243 struct vki_xenctl_bitmap cpumap_hard; /* IN/OUT */
244 struct vki_xenctl_bitmap cpumap_soft; /* IN/OUT */
247 struct vki_xen_domctl_shadow_op_stats {
248 vki_uint32_t fault_count;
249 vki_uint32_t dirty_count;
252 /* vki_xen_domctl_shadow_op.op is an utter mess for compatibily reasons. */
254 struct vki_xen_domctl_shadow_op {
255 vki_uint32_t op; /* IN */
257 #define VKI_XEN_DOMCTL_SHADOW_OP_OFF 0
258 #define VKI_XEN_DOMCTL_SHADOW_OP_ENABLE 32
259 #define VKI_XEN_DOMCTL_SHADOW_OP_CLEAN 11
260 #define VKI_XEN_DOMCTL_SHADOW_OP_PEEK 12
261 #define VKI_XEN_DOMCTL_SHADOW_OP_GET_ALLOCATION 30
262 #define VKI_XEN_DOMCTL_SHADOW_OP_SET_ALLOCATION 31
264 #define VKI_XEN_DOMCTL_SHADOW_OP_ENABLE_TEST 1
265 #define VKI_XEN_DOMCTL_SHADOW_OP_ENABLE_LOGDIRTY 2
266 #define VKI_XEN_DOMCTL_SHADOW_OP_ENABLE_TRANSLATE 3
268 vki_uint32_t mode;
270 #define XEN_DOMCTL_SHADOW_ENABLE_REFCOUNT (1 << 1)
271 #define XEN_DOMCTL_SHADOW_ENABLE_LOG_DIRTY (1 << 2)
272 #define XEN_DOMCTL_SHADOW_ENABLE_TRANSLATE (1 << 3)
273 #define XEN_DOMCTL_SHADOW_ENABLE_EXTERNAL (1 << 4)
275 vki_uint32_t mb;
276 VKI_XEN_GUEST_HANDLE_64(vki_uint8) dirty_bitmap;
277 vki_xen_uint64_aligned_t pages;
278 struct vki_xen_domctl_shadow_op_stats stats;
281 struct vki_xen_domctl_max_mem {
282 /* IN variables. */
283 vki_xen_uint64_aligned_t max_memkb;
286 struct vki_xen_domctl_vcpucontext {
287 vki_uint32_t vcpu; /* IN */
288 VKI_XEN_GUEST_HANDLE_64(vki_xen_vcpu_guest_context_t) ctxt; /* IN/OUT */
291 struct vki_xen_domctl_getvcpuinfo {
292 /* IN variables. */
293 vki_uint32_t vcpu;
294 /* OUT variables. */
295 vki_uint8_t online; /* currently online (not hotplugged)? */
296 vki_uint8_t blocked; /* blocked waiting for an event? */
297 vki_uint8_t running; /* currently scheduled on its CPU? */
298 vki_xen_uint64_aligned_t cpu_time;/* total cpu time consumed (ns) */
299 vki_uint32_t cpu; /* current mapping */
302 struct vki_xen_domctl_scheduler_op {
303 vki_uint32_t sched_id; /* VKI_XEN_SCHEDULER_* */
304 #define VKI_XEN_SCHEDULER_SEDF 4
305 #define VKI_XEN_SCHEDULER_CREDIT 5
306 #define VKI_XEN_SCHEDULER_CREDIT2 6
307 #define VKI_XEN_SCHEDULER_ARINC653 7
308 #define VKI_XEN_SCHEDULER_RTDS 8
309 vki_uint32_t cmd; /* VKI_XEN_DOMCTL_SCHEDOP_* */
310 #define VKI_XEN_DOMCTL_SCHEDOP_putinfo 0
311 #define VKI_XEN_DOMCTL_SCHEDOP_getinfo 1
312 union {
313 struct xen_domctl_sched_sedf {
314 vki_xen_uint64_aligned_t period;
315 vki_xen_uint64_aligned_t slice;
316 vki_xen_uint64_aligned_t latency;
317 vki_uint32_t extratime;
318 vki_uint32_t weight;
319 } sedf;
320 struct xen_domctl_sched_credit {
321 vki_uint16_t weight;
322 vki_uint16_t cap;
323 } credit;
324 struct xen_domctl_sched_credit2 {
325 vki_uint16_t weight;
326 } credit2;
327 struct xen_domctl_sched_rtds {
328 vki_uint32_t period;
329 vki_uint32_t budget;
330 } rtds;
331 } u;
334 struct vki_xen_domctl_max_vcpus {
335 vki_uint32_t max; /* maximum number of vcpus */
338 /* XEN_DOMCTL_irq_permission */
339 struct vki_xen_domctl_irq_permission {
340 vki_uint8_t pirq;
341 vki_uint8_t allow_access; /* flag to specify enable/disable of IRQ access */
344 struct vki_xen_domctl_iomem_permission {
345 vki_xen_uint64_aligned_t first_mfn;/* first page (physical page number) in range */
346 vki_xen_uint64_aligned_t nr_mfns; /* number of pages in range (>0) */
347 vki_uint8_t allow_access; /* allow (!0) or deny (0) access to range? */
350 struct vki_xen_domctl_ioport_permission {
351 vki_uint32_t first_port; /* IN */
352 vki_uint32_t nr_ports; /* IN */
353 vki_uint8_t allow_access; /* IN */
356 struct vki_xen_domctl_hypercall_init {
357 vki_xen_uint64_aligned_t gmfn; /* GMFN to be initialised */
360 struct vki_xen_domctl_settimeoffset {
361 vki_int32_t time_offset_seconds;
364 struct vki_xen_domctl_cpuid {
365 vki_uint32_t input[2];
366 vki_uint32_t eax;
367 vki_uint32_t ebx;
368 vki_uint32_t ecx;
369 vki_uint32_t edx;
372 struct vki_xen_guest_tsc_info {
373 vki_uint32_t tsc_mode;
374 vki_uint32_t gtsc_khz;
375 vki_uint32_t incarnation;
376 vki_uint32_t pad;
377 vki_xen_uint64_aligned_t elapsed_nsec;
379 typedef struct vki_xen_guest_tsc_info vki_xen_guest_tsc_info_t;
380 DEFINE_VKI_XEN_GUEST_HANDLE(vki_xen_guest_tsc_info_t);
382 struct vki_xen_domctl_tsc_info_00000007 {
383 VKI_XEN_GUEST_HANDLE_64(vki_xen_guest_tsc_info_t) out_info; /* OUT */
384 vki_xen_guest_tsc_info_t info; /* IN */
387 /* 4.6 removed the output pointer */
388 struct vki_xen_domctl_tsc_info_0000000b {
389 /* IN/OUT */
390 vki_uint32_t tsc_mode;
391 vki_uint32_t gtsc_khz;
392 vki_uint32_t incarnation;
393 vki_uint32_t pad;
394 vki_xen_uint64_aligned_t elapsed_nsec;
398 struct vki_xen_domctl_hvmcontext {
399 vki_uint32_t size; /* IN/OUT size of buffer */
400 VKI_XEN_GUEST_HANDLE_64(vki_uint8) buffer; /* IN/OUT */
402 typedef struct vki_xen_domctl_hvmcontext vki_xen_domctl_hvmcontext_t;
403 DEFINE_VKI_XEN_GUEST_HANDLE(vki_xen_domctl_hvmcontext_t);
405 struct vki_xen_domctl_hvmcontext_partial_00000007 {
406 vki_uint32_t type; /* IN */
407 vki_uint32_t instance; /* IN */
408 VKI_XEN_GUEST_HANDLE_64(vki_uint8) buffer; /* IN/OUT buffer */
410 typedef struct vki_xen_domctl_hvmcontext_partial_00000007 vki_xen_domctl_hvmcontext_partial_00000007_t;
411 DEFINE_VKI_XEN_GUEST_HANDLE(vki_xen_domctl_hvmcontext_partial_00000007_t);
413 struct vki_xen_domctl_hvmcontext_partial_0000000e {
414 vki_uint32_t type; /* IN */
415 vki_uint32_t instance; /* IN */
416 vki_xen_uint64_aligned_t bufsz; /* IN */
417 VKI_XEN_GUEST_HANDLE_64(vki_uint8) buffer; /* OUT buffer */
419 typedef struct vki_xen_domctl_hvmcontext_partial_0000000e vki_xen_domctl_hvmcontext_partial_0000000e_t;
420 DEFINE_VKI_XEN_GUEST_HANDLE(vki_xen_domctl_hvmcontext_partial_0000000e_t);
422 struct vki_xen_domctl_pin_mem_cacheattr {
423 vki_xen_uint64_aligned_t start, end; /* IN */
424 vki_uint32_t type; /* IN */
427 struct vki_xen_domctl_ext_vcpucontext_00000008 {
428 vki_uint32_t vcpu; /* IN */
430 /* IN for XEN_DOMCTL_set_ext_vcpucontext
431 * OUT for XEN_DOMCTL_get_ext_vcpucontext */
432 vki_uint32_t size;
433 #if defined(__i386__) || defined(__x86_64__)
434 vki_xen_uint64_aligned_t syscall32_callback_eip;
435 vki_xen_uint64_aligned_t sysenter_callback_eip;
436 vki_uint16_t syscall32_callback_cs;
437 vki_uint16_t sysenter_callback_cs;
438 vki_uint8_t syscall32_disables_events;
439 vki_uint8_t sysenter_disables_events;
440 vki_xen_uint64_aligned_t mcg_cap;
441 #endif
444 struct vki_xen_domctl_ext_vcpucontext_00000009 {
445 vki_uint32_t vcpu; /* IN */
447 /* IN for XEN_DOMCTL_set_ext_vcpucontext
448 * OUT for XEN_DOMCTL_get_ext_vcpucontext */
449 vki_uint32_t size;
450 #if defined(__i386__) || defined(__x86_64__)
451 vki_xen_uint64_aligned_t syscall32_callback_eip;
452 vki_xen_uint64_aligned_t sysenter_callback_eip;
453 vki_uint16_t syscall32_callback_cs;
454 vki_uint16_t sysenter_callback_cs;
455 vki_uint8_t syscall32_disables_events;
456 vki_uint8_t sysenter_disables_events;
457 vki_uint64_t caps;
458 vki_uint64_t mci_ctl2_bank0;
459 vki_uint64_t mci_ctl2_bank1;
460 #endif
463 /* vki_xen_domctl_ext_vcpucontext_0000000a is the same as 00000009 */
465 struct vki_xen_domctl_vcpuextstate {
466 vki_uint32_t vcpu;
467 vki_xen_uint64_aligned_t xfeature_mask;
468 vki_xen_uint64_aligned_t size;
469 VKI_XEN_GUEST_HANDLE_64(vki_uint64) buffer;
472 struct vki_xen_domctl_address_size {
473 vki_uint32_t size;
476 /* vki_xen_domctl_assign_device_00000007 is the same up to version 0x0000000b */
477 struct vki_xen_domctl_assign_device_00000007 {
478 vki_uint32_t machine_sbdf; /* machine PCI ID of assigned device */
481 #define VKI_XEN_DOMCTL_DEV_PCI 0
482 #define VKI_XEN_DOMCTL_DEV_DT 1
483 struct vki_xen_domctl_assign_device_0000000b {
484 vki_uint32_t dev; /* XEN_DOMCTL_DEV_* */
485 union {
486 struct {
487 vki_uint32_t machine_sbdf; /* machine PCI ID of assigned device */
488 } pci;
489 struct {
490 vki_uint32_t size; /* Length of the path */
491 VKI_XEN_GUEST_HANDLE_64(vki_uint8) path; /* path to the device tree node */
492 } dt;
493 } u;
494 /* IN */
495 //#define XEN_DOMCTL_DEV_RDM_RELAXED 1
496 vki_uint32_t flag; /* flag of assigned device */
499 struct vki_xen_domctl_debug_op {
500 vki_uint32_t op; /* IN */
501 vki_uint32_t vcpu; /* IN */
503 typedef struct vki_xen_domctl_debug_op vki_xen_domctl_debug_op_t;
505 struct vki_xen_domctl_mem_event_op_00000007 {
506 vki_uint32_t op; /* IN */
507 vki_uint32_t mode; /* IN */
508 vki_uint32_t port; /* OUT */
511 /* only a name change in 4.6 */
512 typedef struct vki_xen_domctl_mem_event_op_00000007 vki_xen_domctl_vm_event_op_0000000b;
514 struct vki_xen_domctl_vm_event_op_00000012 {
515 vki_uint32_t op; /* IN */
516 vki_uint32_t mode; /* IN */
518 union {
519 struct {
520 vki_uint32_t port; /* OUT */
521 } enable;
523 vki_uint32_t version;
524 } u;
527 struct vki_xen_domctl_set_access_required {
528 vki_uint8_t access_required; /* IN */
531 struct vki_xen_domctl_set_max_evtchn {
532 vki_uint32_t max_port;
535 struct vki_xen_domctl_cacheflush {
536 /* IN: page range to flush. */
537 vki_xen_pfn_t start_pfn, nr_pfns;
540 struct vki_xen_domctl_vcpu_msr {
541 vki_uint32_t index;
542 vki_uint32_t reserved;
543 vki_xen_uint64_aligned_t value;
545 typedef struct vki_xen_domctl_vcpu_msr vki_xen_domctl_vcpu_msr_t;
546 DEFINE_VKI_XEN_GUEST_HANDLE(vki_xen_domctl_vcpu_msr_t);
548 struct vki_xen_domctl_vcpu_msrs {
549 vki_uint32_t vcpu;
550 vki_uint32_t msr_count;
551 VKI_XEN_GUEST_HANDLE_64(vki_xen_domctl_vcpu_msr_t) msrs;
554 #define VKI_XEN_DOMCTL_MONITOR_OP_ENABLE 0
555 #define VKI_XEN_DOMCTL_MONITOR_OP_DISABLE 1
556 #define VKI_XEN_DOMCTL_MONITOR_OP_GET_CAPABILITIES 2
557 #define VKI_XEN_DOMCTL_MONITOR_OP_EMULATE_EACH_REP 3
559 #define VKI_XEN_DOMCTL_MONITOR_EVENT_WRITE_CTRLREG 0
560 #define VKI_XEN_DOMCTL_MONITOR_EVENT_MOV_TO_MSR 1
561 #define VKI_XEN_DOMCTL_MONITOR_EVENT_SINGLESTEP 2
562 #define VKI_XEN_DOMCTL_MONITOR_EVENT_SOFTWARE_BREAKPOINT 3
563 #define VKI_XEN_DOMCTL_MONITOR_EVENT_GUEST_REQUEST 4
564 #define VKI_XEN_DOMCTL_MONITOR_EVENT_DEBUG_EXCEPTION 5
565 #define VKI_XEN_DOMCTL_MONITOR_EVENT_CPUID 6
566 #define VKI_XEN_DOMCTL_MONITOR_EVENT_PRIVILEGED_CALL 7
567 #define VKI_XEN_DOMCTL_MONITOR_EVENT_INTERRUPT 8
568 #define VKI_XEN_DOMCTL_MONITOR_EVENT_DESC_ACCESS 9
569 #define VKI_XEN_DOMCTL_MONITOR_EVENT_EMUL_UNIMPLEMENTED 10
570 #define VKI_XEN_DOMCTL_MONITOR_EVENT_INGUEST_PAGEFAULT 11
572 struct vki_xen_domctl_monitor_op_0000000b {
573 vki_uint32_t op; /* vki_xen_DOMCTL_MONITOR_OP_* */
576 * When used with ENABLE/DISABLE this has to be set to
577 * the requested vki_xen_DOMCTL_MONITOR_EVENT_* value.
578 * With GET_CAPABILITIES this field returns a bitmap of
579 * events supported by the platform, in the format
580 * (1 << vki_xen_DOMCTL_MONITOR_EVENT_*).
582 vki_uint32_t event;
585 * Further options when issuing vki_xen_DOMCTL_MONITOR_OP_ENABLE.
587 union {
588 struct {
589 /* Which control register */
590 vki_uint8_t index;
591 /* Pause vCPU until response */
592 vki_uint8_t sync;
593 /* Send event only on a change of value */
594 vki_uint8_t onchangeonly;
595 } mov_to_cr;
597 struct {
598 /* Enable the capture of an extended set of MSRs */
599 vki_uint8_t extended_capture;
600 } mov_to_msr;
602 struct {
603 /* Pause vCPU until response */
604 vki_uint8_t sync;
605 } guest_request;
606 } u;
609 struct vki_xen_domctl_monitor_op_00000011 {
610 vki_uint32_t op; /* vki_xen_DOMCTL_MONITOR_OP_* */
613 * When used with ENABLE/DISABLE this has to be set to
614 * the requested vki_xen_DOMCTL_MONITOR_EVENT_* value.
615 * With GET_CAPABILITIES this field returns a bitmap of
616 * events supported by the platform, in the format
617 * (1 << vki_xen_DOMCTL_MONITOR_EVENT_*).
619 vki_uint32_t event;
622 * Further options when issuing vki_xen_DOMCTL_MONITOR_OP_ENABLE.
624 union {
625 struct {
626 /* Which control register */
627 vki_uint8_t index;
628 /* Pause vCPU until response */
629 vki_uint8_t sync;
630 /* Send event only on a change of value */
631 vki_uint8_t onchangeonly;
632 /* Allignment padding */
633 vki_uint8_t pad1;
634 vki_uint32_t pad2;
636 * Send event only if the changed bit in the control register
637 * is not masked.
639 vki_xen_uint64_aligned_t bitmask;
640 } mov_to_cr;
642 struct {
643 vki_uint32_t msr;
644 vki_uint8_t onchangeonly;
645 } mov_to_msr;
647 struct {
648 /* Pause vCPU until response */
649 vki_uint8_t sync;
650 vki_uint8_t allow_userspace;
651 } guest_request;
653 struct {
654 /* Pause vCPU until response */
655 vki_uint8_t sync;
656 } debug_exception;
657 } u;
660 struct vki_xen_domctl {
661 vki_uint32_t cmd;
662 vki_uint32_t interface_version; /* XEN_DOMCTL_INTERFACE_VERSION */
663 vki_xen_domid_t domain;
664 union {
665 struct vki_xen_domctl_createdomain createdomain;
666 struct vki_xen_domctl_getdomaininfo_00000007 getdomaininfo_00000007;
667 struct vki_xen_domctl_getdomaininfo_00000008 getdomaininfo_00000008;
668 struct vki_xen_domctl_getdomaininfo_00000009 getdomaininfo_00000009;
669 //struct vki_xen_domctl_getmemlist getmemlist;
670 //struct vki_xen_domctl_getpageframeinfo getpageframeinfo;
671 //struct vki_xen_domctl_getpageframeinfo2 getpageframeinfo2;
672 struct vki_xen_domctl_getpageframeinfo3 getpageframeinfo3;
673 struct vki_xen_domctl_nodeaffinity nodeaffinity;
674 struct vki_xen_domctl_vcpuaffinity_00000009 vcpuaffinity_00000009;
675 struct vki_xen_domctl_vcpuaffinity_0000000a vcpuaffinity_0000000a;
676 struct vki_xen_domctl_shadow_op shadow_op;
677 struct vki_xen_domctl_max_mem max_mem;
678 struct vki_xen_domctl_vcpucontext vcpucontext;
679 struct vki_xen_domctl_getvcpuinfo getvcpuinfo;
680 struct vki_xen_domctl_max_vcpus max_vcpus;
681 struct vki_xen_domctl_scheduler_op scheduler_op;
682 //struct vki_xen_domctl_setdomainhandle setdomainhandle;
683 //struct vki_xen_domctl_setdebugging setdebugging;
684 struct vki_xen_domctl_irq_permission irq_permission;
685 struct vki_xen_domctl_iomem_permission iomem_permission;
686 struct vki_xen_domctl_ioport_permission ioport_permission;
687 struct vki_xen_domctl_hypercall_init hypercall_init;
688 //struct vki_xen_domctl_arch_setup arch_setup;
689 struct vki_xen_domctl_settimeoffset settimeoffset;
690 //struct vki_xen_domctl_disable_migrate disable_migrate;
691 struct vki_xen_domctl_tsc_info_00000007 tsc_info_00000007;
692 struct vki_xen_domctl_tsc_info_0000000b tsc_info_0000000b;
693 //struct vki_xen_domctl_real_mode_area real_mode_area;
694 struct vki_xen_domctl_hvmcontext hvmcontext;
695 struct vki_xen_domctl_hvmcontext_partial_0000000e hvmcontext_partial_00000007;
696 struct vki_xen_domctl_hvmcontext_partial_0000000e hvmcontext_partial_0000000e;
697 struct vki_xen_domctl_address_size address_size;
698 //struct vki_xen_domctl_sendtrigger sendtrigger;
699 //struct vki_xen_domctl_get_device_group get_device_group;
700 struct vki_xen_domctl_assign_device_00000007 assign_device_00000007;
701 struct vki_xen_domctl_assign_device_0000000b assign_device_0000000b;
702 //struct vki_xen_domctl_bind_pt_irq bind_pt_irq;
703 //struct vki_xen_domctl_memory_mapping memory_mapping;
704 //struct vki_xen_domctl_ioport_mapping ioport_mapping;
705 struct vki_xen_domctl_pin_mem_cacheattr pin_mem_cacheattr;
706 struct vki_xen_domctl_ext_vcpucontext_00000008 ext_vcpucontext_00000008;
707 struct vki_xen_domctl_ext_vcpucontext_00000009 ext_vcpucontext_00000009;
708 //struct vki_xen_domctl_set_target set_target;
709 //struct vki_xen_domctl_subscribe subscribe;
710 struct vki_xen_domctl_debug_op debug_op;
711 struct vki_xen_domctl_mem_event_op_00000007 mem_event_op_00000007;
712 vki_xen_domctl_vm_event_op_0000000b vm_event_op_0000000b;
713 struct vki_xen_domctl_vm_event_op_00000012 vm_event_op_00000012;
714 //struct vki_xen_domctl_mem_sharing_op mem_sharing_op;
715 #if defined(__i386__) || defined(__x86_64__)
716 struct vki_xen_domctl_cpuid cpuid;
717 struct vki_xen_domctl_vcpuextstate vcpuextstate;
718 struct vki_xen_domctl_vcpu_msrs vcpu_msrs;
719 #endif
720 struct vki_xen_domctl_set_access_required access_required;
721 //struct vki_xen_domctl_audit_p2m audit_p2m;
722 //struct vki_xen_domctl_set_virq_handler set_virq_handler;
723 struct vki_xen_domctl_set_max_evtchn set_max_evtchn;
724 //struct vki_xen_domctl_gdbsx_memio gdbsx_guest_memio;
725 //struct vki_xen_domctl_set_broken_page_p2m set_broken_page_p2m;
726 struct vki_xen_domctl_cacheflush cacheflush;
727 //struct vki_xen_domctl_gdbsx_pauseunp_vcpu gdbsx_pauseunp_vcpu;
728 //struct vki_xen_domctl_gdbsx_domstatus gdbsx_domstatus;
729 struct vki_xen_domctl_monitor_op_0000000b monitor_op_0000000b;
730 struct vki_xen_domctl_monitor_op_00000011 monitor_op_00000011;
731 vki_uint8_t pad[128];
732 } u;
735 #endif // __VKI_XEN_DOMCTL_H
737 /*--------------------------------------------------------------------*/
738 /*--- end ---*/
739 /*--------------------------------------------------------------------*/