blob: 9e8b5ef1f9011a06f0b8a0fa9e8aea8476a03694 [file] [log] [blame]
sewardj35130ac2015-09-01 13:32:21 +00001/*
2 This file is part of Valgrind, a dynamic binary instrumentation
3 framework.
4
Elliott Hughesed398002017-06-21 14:41:24 -07005 Copyright (C) 2012-2017 Citrix
sewardj35130ac2015-09-01 13:32:21 +00006
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.
11
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.
16
17 You should have received a copy of the GNU General Public License
18 along with this program; if not, write to the Free Software
19 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
20 02111-1307, USA.
21
22 The GNU General Public License is contained in the file COPYING.
23*/
24
25/* Contributed by Andrew Cooper <andrew.cooper3@citrix.com>
26 and Ian Campbell <ian.campbell@citrix.com> */
27
bart51e61da2012-10-23 18:03:28 +000028#ifndef __VKI_XEN_DOMCTL_H
29#define __VKI_XEN_DOMCTL_H
30
31/*
32 * The domctl interface is versioned via the interface_version
33 * field. This structures in this header supports domctl interfaces:
34 *
bart0364d0c2015-06-28 16:31:54 +000035 * - 0x00000007: Xen 4.1
36 * - 0x00000008: Xen 4.2
37 * - 0x00000009: Xen 4.3 & 4.4
38 * - 0x0000000a: Xen 4.5
Elliott Hughesed398002017-06-21 14:41:24 -070039 * - 0x0000000b: Xen 4.6
40 * - 0x0000000c: Xen 4.7
bart51e61da2012-10-23 18:03:28 +000041 *
42 * When adding a new subop be sure to include the variants used by all
43 * of the above, both here and in syswrap-xen.c
44 *
45 * Structs which are identical in all supported versions have no
46 * version suffix. Structs which do differ are defined multiple times
47 * and use the suffix of the latest version to contain that particular
48 * variant.
49 */
50
51#define VKI_XEN_DOMCTL_createdomain 1
52#define VKI_XEN_DOMCTL_destroydomain 2
53#define VKI_XEN_DOMCTL_pausedomain 3
54#define VKI_XEN_DOMCTL_unpausedomain 4
55#define VKI_XEN_DOMCTL_getdomaininfo 5
56#define VKI_XEN_DOMCTL_getmemlist 6
57#define VKI_XEN_DOMCTL_getpageframeinfo 7
58#define VKI_XEN_DOMCTL_getpageframeinfo2 8
59#define VKI_XEN_DOMCTL_setvcpuaffinity 9
60#define VKI_XEN_DOMCTL_shadow_op 10
61#define VKI_XEN_DOMCTL_max_mem 11
62#define VKI_XEN_DOMCTL_setvcpucontext 12
63#define VKI_XEN_DOMCTL_getvcpucontext 13
64#define VKI_XEN_DOMCTL_getvcpuinfo 14
65#define VKI_XEN_DOMCTL_max_vcpus 15
66#define VKI_XEN_DOMCTL_scheduler_op 16
67#define VKI_XEN_DOMCTL_setdomainhandle 17
68#define VKI_XEN_DOMCTL_setdebugging 18
69#define VKI_XEN_DOMCTL_irq_permission 19
70#define VKI_XEN_DOMCTL_iomem_permission 20
71#define VKI_XEN_DOMCTL_ioport_permission 21
72#define VKI_XEN_DOMCTL_hypercall_init 22
73#define VKI_XEN_DOMCTL_arch_setup 23
74#define VKI_XEN_DOMCTL_settimeoffset 24
75#define VKI_XEN_DOMCTL_getvcpuaffinity 25
76#define VKI_XEN_DOMCTL_real_mode_area 26
77#define VKI_XEN_DOMCTL_resumedomain 27
78#define VKI_XEN_DOMCTL_sendtrigger 28
79#define VKI_XEN_DOMCTL_subscribe 29
80#define VKI_XEN_DOMCTL_gethvmcontext 33
81#define VKI_XEN_DOMCTL_sethvmcontext 34
82#define VKI_XEN_DOMCTL_set_address_size 35
83#define VKI_XEN_DOMCTL_get_address_size 36
84#define VKI_XEN_DOMCTL_assign_device 37
85#define VKI_XEN_DOMCTL_bind_pt_irq 38
86#define VKI_XEN_DOMCTL_memory_mapping 39
87#define VKI_XEN_DOMCTL_ioport_mapping 40
88#define VKI_XEN_DOMCTL_pin_mem_cacheattr 41
89#define VKI_XEN_DOMCTL_set_ext_vcpucontext 42
90#define VKI_XEN_DOMCTL_get_ext_vcpucontext 43
bart68495eb2013-06-30 07:58:19 +000091#define VKI_XEN_DOMCTL_set_opt_feature 44 /*Obsolete IA64 only */
bart51e61da2012-10-23 18:03:28 +000092#define VKI_XEN_DOMCTL_test_assign_device 45
93#define VKI_XEN_DOMCTL_set_target 46
94#define VKI_XEN_DOMCTL_deassign_device 47
95#define VKI_XEN_DOMCTL_unbind_pt_irq 48
96#define VKI_XEN_DOMCTL_set_cpuid 49
97#define VKI_XEN_DOMCTL_get_device_group 50
98#define VKI_XEN_DOMCTL_set_machine_address_size 51
99#define VKI_XEN_DOMCTL_get_machine_address_size 52
100#define VKI_XEN_DOMCTL_suppress_spurious_page_faults 53
101#define VKI_XEN_DOMCTL_debug_op 54
102#define VKI_XEN_DOMCTL_gethvmcontext_partial 55
103#define VKI_XEN_DOMCTL_mem_event_op 56
Elliott Hughesed398002017-06-21 14:41:24 -0700104#define VKI_XEN_DOMCTL_vm_event_op 56 /* name change in 4.6 */
bart51e61da2012-10-23 18:03:28 +0000105#define VKI_XEN_DOMCTL_mem_sharing_op 57
106#define VKI_XEN_DOMCTL_disable_migrate 58
107#define VKI_XEN_DOMCTL_gettscinfo 59
108#define VKI_XEN_DOMCTL_settscinfo 60
109#define VKI_XEN_DOMCTL_getpageframeinfo3 61
110#define VKI_XEN_DOMCTL_setvcpuextstate 62
111#define VKI_XEN_DOMCTL_getvcpuextstate 63
112#define VKI_XEN_DOMCTL_set_access_required 64
113#define VKI_XEN_DOMCTL_audit_p2m 65
114#define VKI_XEN_DOMCTL_set_virq_handler 66
bart68495eb2013-06-30 07:58:19 +0000115#define VKI_XEN_DOMCTL_set_broken_page_p2m 67
116#define VKI_XEN_DOMCTL_setnodeaffinity 68
117#define VKI_XEN_DOMCTL_getnodeaffinity 69
bart03f77d22013-12-01 10:59:07 +0000118#define VKI_XEN_DOMCTL_set_max_evtchn 70
bart331b3f02014-05-01 08:04:18 +0000119#define VKI_XEN_DOMCTL_cacheflush 71
bart2ca78302015-06-28 16:37:54 +0000120#define VKI_XEN_DOMCTL_get_vcpu_msrs 72
121#define VKI_XEN_DOMCTL_set_vcpu_msrs 73
Elliott Hughesed398002017-06-21 14:41:24 -0700122#define VKI_XEN_DOMCTL_monitor_op 77 /* new in 4.6 */
bart51e61da2012-10-23 18:03:28 +0000123#define VKI_XEN_DOMCTL_gdbsx_guestmemio 1000
124#define VKI_XEN_DOMCTL_gdbsx_pausevcpu 1001
125#define VKI_XEN_DOMCTL_gdbsx_unpausevcpu 1002
126#define VKI_XEN_DOMCTL_gdbsx_domstatus 1003
127
128struct vki_xen_domctl_createdomain {
129 /* IN parameters */
130 vki_uint32_t ssidref;
131 vki_xen_domain_handle_t handle;
132 vki_uint32_t flags;
133};
134
135struct vki_xen_domctl_getdomaininfo_00000007 {
136 /* OUT variables. */
137 vki_xen_domid_t domain;
138 vki_uint32_t flags;
139 vki_xen_uint64_aligned_t tot_pages;
140 vki_xen_uint64_aligned_t max_pages;
141 vki_xen_uint64_aligned_t shr_pages;
142 vki_xen_uint64_aligned_t paged_pages;
143 vki_xen_uint64_aligned_t shared_info_frame;
144 vki_xen_uint64_aligned_t cpu_time;
145 vki_uint32_t nr_online_vcpus;
146 vki_uint32_t max_vcpu_id;
147 vki_uint32_t ssidref;
148 vki_xen_domain_handle_t handle;
149 vki_uint32_t cpupool;
150};
151typedef struct vki_xen_domctl_getdomaininfo_00000007 vki_xen_domctl_getdomaininfo_00000007_t;
152DEFINE_VKI_XEN_GUEST_HANDLE(vki_xen_domctl_getdomaininfo_00000007_t);
153
154struct vki_xen_domctl_getdomaininfo_00000008 {
155 /* OUT variables. */
156 vki_xen_domid_t domain;
157 vki_uint32_t flags;
158 vki_xen_uint64_aligned_t tot_pages;
159 vki_xen_uint64_aligned_t max_pages;
160 vki_xen_uint64_aligned_t shr_pages;
161 vki_xen_uint64_aligned_t paged_pages;
162 vki_xen_uint64_aligned_t shared_info_frame;
163 vki_xen_uint64_aligned_t cpu_time;
164 vki_uint32_t nr_online_vcpus;
165 vki_uint32_t max_vcpu_id;
166 vki_uint32_t ssidref;
167 vki_xen_domain_handle_t handle;
168 vki_uint32_t cpupool;
169};
170typedef struct vki_xen_domctl_getdomaininfo_00000008 vki_xen_domctl_getdomaininfo_00000008_t;
171DEFINE_VKI_XEN_GUEST_HANDLE(vki_xen_domctl_getdomaininfo_00000008_t);
172
bart68495eb2013-06-30 07:58:19 +0000173struct vki_xen_domctl_getdomaininfo_00000009 {
174 /* OUT variables. */
175 vki_xen_domid_t domain;
176 vki_uint32_t flags;
177 vki_xen_uint64_aligned_t tot_pages;
178 vki_xen_uint64_aligned_t max_pages;
179 vki_xen_uint64_aligned_t outstanding_pages;
180 vki_xen_uint64_aligned_t shr_pages;
181 vki_xen_uint64_aligned_t paged_pages;
182 vki_xen_uint64_aligned_t shared_info_frame;
183 vki_xen_uint64_aligned_t cpu_time;
184 vki_uint32_t nr_online_vcpus;
185 vki_uint32_t max_vcpu_id;
186 vki_uint32_t ssidref;
187 vki_xen_domain_handle_t handle;
188 vki_uint32_t cpupool;
189};
190typedef struct vki_xen_domctl_getdomaininfo_00000009 vki_xen_domctl_getdomaininfo_00000009_t;
191DEFINE_VKI_XEN_GUEST_HANDLE(vki_xen_domctl_getdomaininfo_00000009_t);
192
bart0364d0c2015-06-28 16:31:54 +0000193/* vki_xen_domctl_getdomaininfo_0000000a is the same as 00000009 */
194
bart68495eb2013-06-30 07:58:19 +0000195/* Get/set the NUMA node(s) with which the guest has affinity with. */
196/* XEN_DOMCTL_setnodeaffinity */
197/* XEN_DOMCTL_getnodeaffinity */
198struct vki_xen_domctl_nodeaffinity {
199 struct vki_xenctl_bitmap nodemap;/* IN */
200};
201typedef struct vki_xen_domctl_nodeaffinity vki_xen_domctl_nodeaffinity_t;
202DEFINE_VKI_XEN_GUEST_HANDLE(vki_xen_domctl_nodeaffinity_t);
203
bart14c44a92013-12-01 10:56:28 +0000204struct vki_xen_domctl_getpageframeinfo3 {
205 vki_xen_uint64_aligned_t num; /* IN */
206 VKI_XEN_GUEST_HANDLE_64(vki_xen_pfn_t) array; /* IN/OUT */
207};
bart68495eb2013-06-30 07:58:19 +0000208
bartf853f562015-06-28 16:33:04 +0000209struct vki_xen_domctl_vcpuaffinity_00000009 {
bart51e61da2012-10-23 18:03:28 +0000210 vki_uint32_t vcpu; /* IN */
bart68495eb2013-06-30 07:58:19 +0000211 struct vki_xenctl_bitmap cpumap; /* IN/OUT */
bart51e61da2012-10-23 18:03:28 +0000212};
213
bartf853f562015-06-28 16:33:04 +0000214struct vki_xen_domctl_vcpuaffinity_0000000a {
215 vki_uint32_t vcpu; /* IN */
216#define VKI_XEN_VCPUAFFINITY_HARD (1U<<0)
217#define VKI_XEN_VCPUAFFINITY_SOFT (1U<<1)
218 vki_uint32_t flags; /* IN */
219 struct vki_xenctl_bitmap cpumap_hard; /* IN/OUT */
220 struct vki_xenctl_bitmap cpumap_soft; /* IN/OUT */
221};
222
bart189ade72013-12-01 10:57:43 +0000223struct vki_xen_domctl_shadow_op_stats {
224 vki_uint32_t fault_count;
225 vki_uint32_t dirty_count;
226};
227
228/* vki_xen_domctl_shadow_op.op is an utter mess for compatibily reasons. */
229
230struct vki_xen_domctl_shadow_op {
231 vki_uint32_t op; /* IN */
232
233#define VKI_XEN_DOMCTL_SHADOW_OP_OFF 0
234#define VKI_XEN_DOMCTL_SHADOW_OP_ENABLE 32
235#define VKI_XEN_DOMCTL_SHADOW_OP_CLEAN 11
236#define VKI_XEN_DOMCTL_SHADOW_OP_PEEK 12
237#define VKI_XEN_DOMCTL_SHADOW_OP_GET_ALLOCATION 30
238#define VKI_XEN_DOMCTL_SHADOW_OP_SET_ALLOCATION 31
239
240#define VKI_XEN_DOMCTL_SHADOW_OP_ENABLE_TEST 1
241#define VKI_XEN_DOMCTL_SHADOW_OP_ENABLE_LOGDIRTY 2
242#define VKI_XEN_DOMCTL_SHADOW_OP_ENABLE_TRANSLATE 3
243
244 vki_uint32_t mode;
245
246#define XEN_DOMCTL_SHADOW_ENABLE_REFCOUNT (1 << 1)
247#define XEN_DOMCTL_SHADOW_ENABLE_LOG_DIRTY (1 << 2)
248#define XEN_DOMCTL_SHADOW_ENABLE_TRANSLATE (1 << 3)
249#define XEN_DOMCTL_SHADOW_ENABLE_EXTERNAL (1 << 4)
250
251 vki_uint32_t mb;
252 VKI_XEN_GUEST_HANDLE_64(vki_uint8) dirty_bitmap;
253 vki_xen_uint64_aligned_t pages;
254 struct vki_xen_domctl_shadow_op_stats stats;
255};
256
bart51e61da2012-10-23 18:03:28 +0000257struct vki_xen_domctl_max_mem {
258 /* IN variables. */
259 vki_xen_uint64_aligned_t max_memkb;
260};
261
262struct vki_xen_domctl_vcpucontext {
263 vki_uint32_t vcpu; /* IN */
264 VKI_XEN_GUEST_HANDLE_64(vki_xen_vcpu_guest_context_t) ctxt; /* IN/OUT */
265};
266
267struct vki_xen_domctl_getvcpuinfo {
268 /* IN variables. */
269 vki_uint32_t vcpu;
270 /* OUT variables. */
271 vki_uint8_t online; /* currently online (not hotplugged)? */
272 vki_uint8_t blocked; /* blocked waiting for an event? */
273 vki_uint8_t running; /* currently scheduled on its CPU? */
274 vki_xen_uint64_aligned_t cpu_time;/* total cpu time consumed (ns) */
275 vki_uint32_t cpu; /* current mapping */
276};
277
278struct vki_xen_domctl_scheduler_op {
279 vki_uint32_t sched_id; /* VKI_XEN_SCHEDULER_* */
280#define VKI_XEN_SCHEDULER_SEDF 4
281#define VKI_XEN_SCHEDULER_CREDIT 5
282#define VKI_XEN_SCHEDULER_CREDIT2 6
283#define VKI_XEN_SCHEDULER_ARINC653 7
bartf853f562015-06-28 16:33:04 +0000284#define VKI_XEN_SCHEDULER_RTDS 8
bart51e61da2012-10-23 18:03:28 +0000285 vki_uint32_t cmd; /* VKI_XEN_DOMCTL_SCHEDOP_* */
286#define VKI_XEN_DOMCTL_SCHEDOP_putinfo 0
287#define VKI_XEN_DOMCTL_SCHEDOP_getinfo 1
288 union {
289 struct xen_domctl_sched_sedf {
290 vki_xen_uint64_aligned_t period;
291 vki_xen_uint64_aligned_t slice;
292 vki_xen_uint64_aligned_t latency;
293 vki_uint32_t extratime;
294 vki_uint32_t weight;
295 } sedf;
296 struct xen_domctl_sched_credit {
297 vki_uint16_t weight;
298 vki_uint16_t cap;
299 } credit;
300 struct xen_domctl_sched_credit2 {
301 vki_uint16_t weight;
302 } credit2;
bartf853f562015-06-28 16:33:04 +0000303 struct xen_domctl_sched_rtds {
304 vki_uint32_t period;
305 vki_uint32_t budget;
306 } rtds;
bart51e61da2012-10-23 18:03:28 +0000307 } u;
308};
309
310struct vki_xen_domctl_max_vcpus {
311 vki_uint32_t max; /* maximum number of vcpus */
312};
313
bart174e8c42015-06-28 16:42:38 +0000314/* XEN_DOMCTL_irq_permission */
315struct vki_xen_domctl_irq_permission {
316 vki_uint8_t pirq;
317 vki_uint8_t allow_access; /* flag to specify enable/disable of IRQ access */
318};
319
bart6d2d0932015-06-28 16:42:05 +0000320struct vki_xen_domctl_iomem_permission {
321 vki_xen_uint64_aligned_t first_mfn;/* first page (physical page number) in range */
322 vki_xen_uint64_aligned_t nr_mfns; /* number of pages in range (>0) */
323 vki_uint8_t allow_access; /* allow (!0) or deny (0) access to range? */
324};
325
sewardj9e4ec3a2014-09-04 10:59:50 +0000326struct vki_xen_domctl_ioport_permission {
327 vki_uint32_t first_port; /* IN */
328 vki_uint32_t nr_ports; /* IN */
329 vki_uint8_t allow_access; /* IN */
330};
331
bart51e61da2012-10-23 18:03:28 +0000332struct vki_xen_domctl_hypercall_init {
333 vki_xen_uint64_aligned_t gmfn; /* GMFN to be initialised */
334};
335
bart718b0fb2014-05-01 08:03:13 +0000336struct vki_xen_domctl_settimeoffset {
337 vki_int32_t time_offset_seconds;
338};
339
bart51e61da2012-10-23 18:03:28 +0000340struct vki_xen_domctl_cpuid {
341 vki_uint32_t input[2];
342 vki_uint32_t eax;
343 vki_uint32_t ebx;
344 vki_uint32_t ecx;
345 vki_uint32_t edx;
346};
347
348struct vki_xen_guest_tsc_info {
349 vki_uint32_t tsc_mode;
350 vki_uint32_t gtsc_khz;
351 vki_uint32_t incarnation;
352 vki_uint32_t pad;
353 vki_xen_uint64_aligned_t elapsed_nsec;
354};
355typedef struct vki_xen_guest_tsc_info vki_xen_guest_tsc_info_t;
356DEFINE_VKI_XEN_GUEST_HANDLE(vki_xen_guest_tsc_info_t);
357
Elliott Hughesed398002017-06-21 14:41:24 -0700358struct vki_xen_domctl_tsc_info_00000007 {
359 VKI_XEN_GUEST_HANDLE_64(vki_xen_guest_tsc_info_t) out_info; /* OUT */
360 vki_xen_guest_tsc_info_t info; /* IN */
361};
362
363/* 4.6 removed the output pointer */
364struct vki_xen_domctl_tsc_info_0000000b {
365 /* IN/OUT */
366 vki_uint32_t tsc_mode;
367 vki_uint32_t gtsc_khz;
368 vki_uint32_t incarnation;
369 vki_uint32_t pad;
370 vki_xen_uint64_aligned_t elapsed_nsec;
371};
372
373
barte65212e2013-12-01 10:55:54 +0000374struct vki_xen_domctl_hvmcontext {
375 vki_uint32_t size; /* IN/OUT size of buffer */
376 VKI_XEN_GUEST_HANDLE_64(vki_uint8) buffer; /* IN/OUT */
377};
378typedef struct vki_xen_domctl_hvmcontext vki_xen_domctl_hvmcontext_t;
379DEFINE_VKI_XEN_GUEST_HANDLE(vki_xen_domctl_hvmcontext_t);
380
sewardj9e4ec3a2014-09-04 10:59:50 +0000381struct vki_xen_domctl_hvmcontext_partial {
382 vki_uint32_t type; /* IN */
383 vki_uint32_t instance; /* IN */
384 VKI_XEN_GUEST_HANDLE_64(vki_uint8) buffer; /* IN/OUT buffer */
385};
386typedef struct vki_xen_domctl_hvmcontext_partial vki_xen_domctl_hvmcontext_partial_t;
387DEFINE_VKI_XEN_GUEST_HANDLE(vki_xen_domctl_hvmcontext_partial_t);
388
bart51e61da2012-10-23 18:03:28 +0000389
bart9058c852015-06-28 16:38:40 +0000390struct vki_xen_domctl_pin_mem_cacheattr {
391 vki_xen_uint64_aligned_t start, end; /* IN */
392 vki_uint32_t type; /* IN */
393};
394
bart368c0102015-06-28 16:36:30 +0000395struct vki_xen_domctl_ext_vcpucontext_00000008 {
396 vki_uint32_t vcpu; /* IN */
397
398 /* IN for XEN_DOMCTL_set_ext_vcpucontext
399 * OUT for XEN_DOMCTL_get_ext_vcpucontext */
400 vki_uint32_t size;
401#if defined(__i386__) || defined(__x86_64__)
402 vki_xen_uint64_aligned_t syscall32_callback_eip;
403 vki_xen_uint64_aligned_t sysenter_callback_eip;
404 vki_uint16_t syscall32_callback_cs;
405 vki_uint16_t sysenter_callback_cs;
406 vki_uint8_t syscall32_disables_events;
407 vki_uint8_t sysenter_disables_events;
408 vki_xen_uint64_aligned_t mcg_cap;
409#endif
410};
411
412struct vki_xen_domctl_ext_vcpucontext_00000009 {
413 vki_uint32_t vcpu; /* IN */
414
415 /* IN for XEN_DOMCTL_set_ext_vcpucontext
416 * OUT for XEN_DOMCTL_get_ext_vcpucontext */
417 vki_uint32_t size;
418#if defined(__i386__) || defined(__x86_64__)
419 vki_xen_uint64_aligned_t syscall32_callback_eip;
420 vki_xen_uint64_aligned_t sysenter_callback_eip;
421 vki_uint16_t syscall32_callback_cs;
422 vki_uint16_t sysenter_callback_cs;
423 vki_uint8_t syscall32_disables_events;
424 vki_uint8_t sysenter_disables_events;
425 vki_uint64_t caps;
426 vki_uint64_t mci_ctl2_bank0;
427 vki_uint64_t mci_ctl2_bank1;
428#endif
429};
430
431/* vki_xen_domctl_ext_vcpucontext_0000000a is the same as 00000009 */
432
bart51e61da2012-10-23 18:03:28 +0000433struct vki_xen_domctl_vcpuextstate {
434 vki_uint32_t vcpu;
435 vki_xen_uint64_aligned_t xfeature_mask;
436 vki_xen_uint64_aligned_t size;
437 VKI_XEN_GUEST_HANDLE_64(vki_uint64) buffer;
438};
439
440struct vki_xen_domctl_address_size {
441 vki_uint32_t size;
442};
443
Elliott Hughesed398002017-06-21 14:41:24 -0700444/* vki_xen_domctl_assign_device_00000007 is the same up to version 0x0000000b */
445struct vki_xen_domctl_assign_device_00000007 {
bartc1e82ce2015-06-28 16:41:06 +0000446 vki_uint32_t machine_sbdf; /* machine PCI ID of assigned device */
447};
448
Elliott Hughesed398002017-06-21 14:41:24 -0700449#define VKI_XEN_DOMCTL_DEV_PCI 0
450#define VKI_XEN_DOMCTL_DEV_DT 1
451struct vki_xen_domctl_assign_device_0000000b {
452 vki_uint32_t dev; /* XEN_DOMCTL_DEV_* */
453 union {
454 struct {
455 vki_uint32_t machine_sbdf; /* machine PCI ID of assigned device */
456 } pci;
457 struct {
458 vki_uint32_t size; /* Length of the path */
459 VKI_XEN_GUEST_HANDLE_64(vki_uint8) path; /* path to the device tree node */
460 } dt;
461 } u;
462 /* IN */
463//#define XEN_DOMCTL_DEV_RDM_RELAXED 1
464 vki_uint32_t flag; /* flag of assigned device */
465};
466
sewardj9e4ec3a2014-09-04 10:59:50 +0000467struct vki_xen_domctl_debug_op {
468 vki_uint32_t op; /* IN */
469 vki_uint32_t vcpu; /* IN */
470};
471typedef struct vki_xen_domctl_debug_op vki_xen_domctl_debug_op_t;
472
Elliott Hughesed398002017-06-21 14:41:24 -0700473struct vki_xen_domctl_mem_event_op_00000007 {
sewardj9e4ec3a2014-09-04 10:59:50 +0000474 vki_uint32_t op; /* IN */
475 vki_uint32_t mode; /* IN */
476 vki_uint32_t port; /* OUT */
477};
478
Elliott Hughesed398002017-06-21 14:41:24 -0700479/* only a name change in 4.6 */
480typedef struct vki_xen_domctl_mem_event_op_00000007 vki_xen_domctl_vm_event_op_0000000b;
481
sewardj9e4ec3a2014-09-04 10:59:50 +0000482struct vki_xen_domctl_set_access_required {
483 vki_uint8_t access_required; /* IN */
484};
485
bart03f77d22013-12-01 10:59:07 +0000486struct vki_xen_domctl_set_max_evtchn {
487 vki_uint32_t max_port;
488};
489
bart331b3f02014-05-01 08:04:18 +0000490struct vki_xen_domctl_cacheflush {
491 /* IN: page range to flush. */
492 vki_xen_pfn_t start_pfn, nr_pfns;
493};
494
bart2ca78302015-06-28 16:37:54 +0000495struct vki_xen_domctl_vcpu_msr {
496 vki_uint32_t index;
497 vki_uint32_t reserved;
498 vki_xen_uint64_aligned_t value;
499};
500typedef struct vki_xen_domctl_vcpu_msr vki_xen_domctl_vcpu_msr_t;
501DEFINE_VKI_XEN_GUEST_HANDLE(vki_xen_domctl_vcpu_msr_t);
502
503struct vki_xen_domctl_vcpu_msrs {
504 vki_uint32_t vcpu;
505 vki_uint32_t msr_count;
506 VKI_XEN_GUEST_HANDLE_64(vki_xen_domctl_vcpu_msr_t) msrs;
507};
508
Elliott Hughesed398002017-06-21 14:41:24 -0700509#define VKI_XEN_DOMCTL_MONITOR_OP_ENABLE 0
510#define VKI_XEN_DOMCTL_MONITOR_OP_DISABLE 1
511#define VKI_XEN_DOMCTL_MONITOR_OP_GET_CAPABILITIES 2
512
513#define VKI_XEN_DOMCTL_MONITOR_EVENT_WRITE_CTRLREG 0
514#define VKI_XEN_DOMCTL_MONITOR_EVENT_MOV_TO_MSR 1
515#define VKI_XEN_DOMCTL_MONITOR_EVENT_SINGLESTEP 2
516#define VKI_XEN_DOMCTL_MONITOR_EVENT_SOFTWARE_BREAKPOINT 3
517#define VKI_XEN_DOMCTL_MONITOR_EVENT_GUEST_REQUEST 4
518
519struct vki_xen_domctl_monitor_op_0000000b {
520 vki_uint32_t op; /* vki_xen_DOMCTL_MONITOR_OP_* */
521
522 /*
523 * When used with ENABLE/DISABLE this has to be set to
524 * the requested vki_xen_DOMCTL_MONITOR_EVENT_* value.
525 * With GET_CAPABILITIES this field returns a bitmap of
526 * events supported by the platform, in the format
527 * (1 << vki_xen_DOMCTL_MONITOR_EVENT_*).
528 */
529 vki_uint32_t event;
530
531 /*
532 * Further options when issuing vki_xen_DOMCTL_MONITOR_OP_ENABLE.
533 */
534 union {
535 struct {
536 /* Which control register */
537 vki_uint8_t index;
538 /* Pause vCPU until response */
539 vki_uint8_t sync;
540 /* Send event only on a change of value */
541 vki_uint8_t onchangeonly;
542 } mov_to_cr;
543
544 struct {
545 /* Enable the capture of an extended set of MSRs */
546 vki_uint8_t extended_capture;
547 } mov_to_msr;
548
549 struct {
550 /* Pause vCPU until response */
551 vki_uint8_t sync;
552 } guest_request;
553 } u;
554};
555
556
557struct vki_xen_domctl_monitor_op {
558 vki_uint32_t op;
559#define VKI_XEN_DOMCTL_MONITOR_OP_ENABLE 0
560#define VKI_XEN_DOMCTL_MONITOR_OP_DISABLE 1
561#define VKI_XEN_DOMCTL_MONITOR_OP_GET_CAPABILITIES 2
562#define VKI_XEN_DOMCTL_MONITOR_OP_EMULATE_EACH_REP 3
563 vki_uint32_t event;
564 union {
565 struct {
566 vki_uint8_t index;
567 vki_uint8_t sync;
568 vki_uint8_t onchangeonly;
569 } mov_to_cr;
570 struct {
571 vki_uint8_t extended_capture;
572 } mov_to_msr;
573 struct {
574 vki_uint8_t sync;
575 } guest_request;
576 } u;
577};
578
bart51e61da2012-10-23 18:03:28 +0000579struct vki_xen_domctl {
580 vki_uint32_t cmd;
581 vki_uint32_t interface_version; /* XEN_DOMCTL_INTERFACE_VERSION */
582 vki_xen_domid_t domain;
583 union {
584 struct vki_xen_domctl_createdomain createdomain;
585 struct vki_xen_domctl_getdomaininfo_00000007 getdomaininfo_00000007;
586 struct vki_xen_domctl_getdomaininfo_00000008 getdomaininfo_00000008;
bart68495eb2013-06-30 07:58:19 +0000587 struct vki_xen_domctl_getdomaininfo_00000009 getdomaininfo_00000009;
bart51e61da2012-10-23 18:03:28 +0000588 //struct vki_xen_domctl_getmemlist getmemlist;
589 //struct vki_xen_domctl_getpageframeinfo getpageframeinfo;
590 //struct vki_xen_domctl_getpageframeinfo2 getpageframeinfo2;
bart14c44a92013-12-01 10:56:28 +0000591 struct vki_xen_domctl_getpageframeinfo3 getpageframeinfo3;
bart68495eb2013-06-30 07:58:19 +0000592 struct vki_xen_domctl_nodeaffinity nodeaffinity;
bartf853f562015-06-28 16:33:04 +0000593 struct vki_xen_domctl_vcpuaffinity_00000009 vcpuaffinity_00000009;
594 struct vki_xen_domctl_vcpuaffinity_0000000a vcpuaffinity_0000000a;
bart189ade72013-12-01 10:57:43 +0000595 struct vki_xen_domctl_shadow_op shadow_op;
bart51e61da2012-10-23 18:03:28 +0000596 struct vki_xen_domctl_max_mem max_mem;
597 struct vki_xen_domctl_vcpucontext vcpucontext;
598 struct vki_xen_domctl_getvcpuinfo getvcpuinfo;
599 struct vki_xen_domctl_max_vcpus max_vcpus;
600 struct vki_xen_domctl_scheduler_op scheduler_op;
601 //struct vki_xen_domctl_setdomainhandle setdomainhandle;
602 //struct vki_xen_domctl_setdebugging setdebugging;
bart174e8c42015-06-28 16:42:38 +0000603 struct vki_xen_domctl_irq_permission irq_permission;
bart6d2d0932015-06-28 16:42:05 +0000604 struct vki_xen_domctl_iomem_permission iomem_permission;
sewardj9e4ec3a2014-09-04 10:59:50 +0000605 struct vki_xen_domctl_ioport_permission ioport_permission;
bart51e61da2012-10-23 18:03:28 +0000606 struct vki_xen_domctl_hypercall_init hypercall_init;
607 //struct vki_xen_domctl_arch_setup arch_setup;
bart718b0fb2014-05-01 08:03:13 +0000608 struct vki_xen_domctl_settimeoffset settimeoffset;
bart51e61da2012-10-23 18:03:28 +0000609 //struct vki_xen_domctl_disable_migrate disable_migrate;
Elliott Hughesed398002017-06-21 14:41:24 -0700610 struct vki_xen_domctl_tsc_info_00000007 tsc_info_00000007;
611 struct vki_xen_domctl_tsc_info_0000000b tsc_info_0000000b;
bart51e61da2012-10-23 18:03:28 +0000612 //struct vki_xen_domctl_real_mode_area real_mode_area;
barte65212e2013-12-01 10:55:54 +0000613 struct vki_xen_domctl_hvmcontext hvmcontext;
sewardj9e4ec3a2014-09-04 10:59:50 +0000614 struct vki_xen_domctl_hvmcontext_partial hvmcontext_partial;
bart51e61da2012-10-23 18:03:28 +0000615 struct vki_xen_domctl_address_size address_size;
616 //struct vki_xen_domctl_sendtrigger sendtrigger;
617 //struct vki_xen_domctl_get_device_group get_device_group;
Elliott Hughesed398002017-06-21 14:41:24 -0700618 struct vki_xen_domctl_assign_device_00000007 assign_device_00000007;
619 struct vki_xen_domctl_assign_device_0000000b assign_device_0000000b;
bart51e61da2012-10-23 18:03:28 +0000620 //struct vki_xen_domctl_bind_pt_irq bind_pt_irq;
621 //struct vki_xen_domctl_memory_mapping memory_mapping;
622 //struct vki_xen_domctl_ioport_mapping ioport_mapping;
bart9058c852015-06-28 16:38:40 +0000623 struct vki_xen_domctl_pin_mem_cacheattr pin_mem_cacheattr;
bart368c0102015-06-28 16:36:30 +0000624 struct vki_xen_domctl_ext_vcpucontext_00000008 ext_vcpucontext_00000008;
625 struct vki_xen_domctl_ext_vcpucontext_00000009 ext_vcpucontext_00000009;
bart51e61da2012-10-23 18:03:28 +0000626 //struct vki_xen_domctl_set_target set_target;
627 //struct vki_xen_domctl_subscribe subscribe;
sewardj9e4ec3a2014-09-04 10:59:50 +0000628 struct vki_xen_domctl_debug_op debug_op;
Elliott Hughesed398002017-06-21 14:41:24 -0700629 struct vki_xen_domctl_mem_event_op_00000007 mem_event_op_00000007;
630 vki_xen_domctl_vm_event_op_0000000b vm_event_op_0000000b;
bart51e61da2012-10-23 18:03:28 +0000631 //struct vki_xen_domctl_mem_sharing_op mem_sharing_op;
632#if defined(__i386__) || defined(__x86_64__)
633 struct vki_xen_domctl_cpuid cpuid;
634 struct vki_xen_domctl_vcpuextstate vcpuextstate;
bart2ca78302015-06-28 16:37:54 +0000635 struct vki_xen_domctl_vcpu_msrs vcpu_msrs;
bart51e61da2012-10-23 18:03:28 +0000636#endif
sewardj9e4ec3a2014-09-04 10:59:50 +0000637 struct vki_xen_domctl_set_access_required access_required;
bart51e61da2012-10-23 18:03:28 +0000638 //struct vki_xen_domctl_audit_p2m audit_p2m;
639 //struct vki_xen_domctl_set_virq_handler set_virq_handler;
bart03f77d22013-12-01 10:59:07 +0000640 struct vki_xen_domctl_set_max_evtchn set_max_evtchn;
bart51e61da2012-10-23 18:03:28 +0000641 //struct vki_xen_domctl_gdbsx_memio gdbsx_guest_memio;
bart68495eb2013-06-30 07:58:19 +0000642 //struct vki_xen_domctl_set_broken_page_p2m set_broken_page_p2m;
bart331b3f02014-05-01 08:04:18 +0000643 struct vki_xen_domctl_cacheflush cacheflush;
bart51e61da2012-10-23 18:03:28 +0000644 //struct vki_xen_domctl_gdbsx_pauseunp_vcpu gdbsx_pauseunp_vcpu;
645 //struct vki_xen_domctl_gdbsx_domstatus gdbsx_domstatus;
Elliott Hughesed398002017-06-21 14:41:24 -0700646 struct vki_xen_domctl_monitor_op_0000000b monitor_op_0000000b;
bart51e61da2012-10-23 18:03:28 +0000647 vki_uint8_t pad[128];
648 } u;
649};
650
651#endif // __VKI_XEN_DOMCTL_H
652
653/*--------------------------------------------------------------------*/
654/*--- end ---*/
655/*--------------------------------------------------------------------*/