1 /* SPDX-License-Identifier: MIT */
2 /******************************************************************************
3  * domctl.h
4  *
5  * Domain management operations. For use by node control stack.
6  *
7  * Copyright (c) 2002-2003, B Dragovic
8  * Copyright (c) 2002-2006, K Fraser
9  */
10 
11 #ifndef __XEN_PUBLIC_DOMCTL_H__
12 #define __XEN_PUBLIC_DOMCTL_H__
13 
14 #ifndef CONFIG_XEN_DOM0
15 #error "domctl operations are intended for use by node control tools only"
16 #endif
17 
18 #include "xen.h"
19 #include "event_channel.h"
20 #include "grant_table.h"
21 #include "memory.h"
22 
23 #define XEN_DOMCTL_INTERFACE_VERSION 0x00000015
24 
25 /*
26  * NB. xen_domctl.domain is an IN/OUT parameter for this operation.
27  * If it is specified as an invalid value (0 or >= DOMID_FIRST_RESERVED),
28  * an id is auto-allocated and returned.
29  */
30 /* XEN_DOMCTL_createdomain */
31 struct xen_domctl_createdomain {
32 	/* IN parameters */
33 	uint32_t ssidref;
34 	xen_domain_handle_t handle;
35 /* Is this an HVM guest (as opposed to a PV guest)? */
36 #define _XEN_DOMCTL_CDF_hvm		0
37 #define XEN_DOMCTL_CDF_hvm		(1U << _XEN_DOMCTL_CDF_hvm)
38 /* Use hardware-assisted paging if available? */
39 #define _XEN_DOMCTL_CDF_hap		1
40 #define XEN_DOMCTL_CDF_hap		(1U << _XEN_DOMCTL_CDF_hap)
41 /* Should domain memory integrity be verified by tboot during Sx? */
42 #define _XEN_DOMCTL_CDF_s3_integrity	2
43 #define XEN_DOMCTL_CDF_s3_integrity	(1U << _XEN_DOMCTL_CDF_s3_integrity)
44 /* Disable out-of-sync shadow page tables? */
45 #define _XEN_DOMCTL_CDF_oos_off		3
46 #define XEN_DOMCTL_CDF_oos_off		(1U << _XEN_DOMCTL_CDF_oos_off)
47 /* Is this a xenstore domain? */
48 #define _XEN_DOMCTL_CDF_xs_domain	4
49 #define XEN_DOMCTL_CDF_xs_domain	(1U << _XEN_DOMCTL_CDF_xs_domain)
50 /* Should this domain be permitted to use the IOMMU? */
51 #define _XEN_DOMCTL_CDF_iommu		5
52 #define XEN_DOMCTL_CDF_iommu		(1U << _XEN_DOMCTL_CDF_iommu)
53 #define _XEN_DOMCTL_CDF_nested_virt	6
54 #define XEN_DOMCTL_CDF_nested_virt	(1U << _XEN_DOMCTL_CDF_nested_virt)
55 /* Should we expose the vPMU to the guest? */
56 #define XEN_DOMCTL_CDF_vpmu		(1U << 7)
57 
58 /* Max XEN_DOMCTL_CDF_* constant.  Used for ABI checking. */
59 #define XEN_DOMCTL_CDF_MAX		XEN_DOMCTL_CDF_vpmu
60 
61 	uint32_t flags;
62 
63 #define _XEN_DOMCTL_IOMMU_no_sharept	0
64 #define XEN_DOMCTL_IOMMU_no_sharep	(1U << _XEN_DOMCTL_IOMMU_no_sharept)
65 
66 /* Max XEN_DOMCTL_IOMMU_* constant. Used for ABI checking. */
67 #define XEN_DOMCTL_IOMMU_MAX		XEN_DOMCTL_IOMMU_no_sharept
68 
69 	uint32_t iommu_opts;
70 
71 	/*
72 	 * Various domain limits, which impact the quantity of resources
73 	 * (global mapping space, xenheap, etc) a guest may consume.  For
74 	 * max_grant_frames and max_maptrack_frames, < 0 means "use the
75 	 * default maximum value in the hypervisor".
76 	 */
77 	uint32_t max_vcpus;
78 	uint32_t max_evtchn_port;
79 	int32_t max_grant_frames;
80 	int32_t max_maptrack_frames;
81 
82 /* Grant version, use low 4 bits. */
83 #define XEN_DOMCTL_GRANT_version_mask	0xf
84 #define XEN_DOMCTL_GRANT_version(v)	((v) & XEN_DOMCTL_GRANT_version_mask)
85 
86 	uint32_t grant_opts;
87 
88 	/* Per-vCPU buffer size in bytes.  0 to disable. */
89 	uint32_t vmtrace_size;
90 
91 	/* CPU pool to use; specify 0 or a specific existing pool */
92 	uint32_t cpupool_id;
93 
94 	struct xen_arch_domainconfig arch;
95 };
96 
97 /* XEN_DOMCTL_getdomaininfo */
98 struct xen_domctl_getdomaininfo {
99 	/* OUT variables. */
100 	domid_t  domain;	/* Also echoed in domctl.domain */
101 	uint16_t pad1;
102 /* Domain is scheduled to die. */
103 #define _XEN_DOMINF_dying		0
104 #define XEN_DOMINF_dying		(1U << _XEN_DOMINF_dying)
105 /* Domain is an HVM guest (as opposed to a PV guest). */
106 #define _XEN_DOMINF_hvm_guest		1
107 #define XEN_DOMINF_hvm_guest		(1U << _XEN_DOMINF_hvm_guest)
108 /* The guest OS has shut down. */
109 #define _XEN_DOMINF_shutdown		2
110 #define XEN_DOMINF_shutdown		(1U << _XEN_DOMINF_shutdown)
111 /* Currently paused by control software. */
112 #define _XEN_DOMINF_paused		3
113 #define XEN_DOMINF_paused		(1U << _XEN_DOMINF_paused)
114 /* Currently blocked pending an event. */
115 #define _XEN_DOMINF_blocked		4
116 #define XEN_DOMINF_blocked		(1U << _XEN_DOMINF_blocked)
117 /* Domain is currently running. */
118 #define _XEN_DOMINF_running		5
119 #define XEN_DOMINF_running		(1U << _XEN_DOMINF_running)
120 /* Being debugged.  */
121 #define _XEN_DOMINF_debugged		6
122 #define XEN_DOMINF_debugged		(1U << _XEN_DOMINF_debugged)
123 /* domain is a xenstore domain */
124 #define _XEN_DOMINF_xs_domain		7
125 #define XEN_DOMINF_xs_domain		(1U << _XEN_DOMINF_xs_domain)
126 /* domain has hardware assisted paging */
127 #define _XEN_DOMINF_hap			8
128 #define XEN_DOMINF_hap			(1U << _XEN_DOMINF_hap)
129 /* XEN_DOMINF_shutdown guest-supplied code.  */
130 #define XEN_DOMINF_shutdownmask		255
131 #define XEN_DOMINF_shutdownshift	16
132 	uint32_t flags; /* XEN_DOMINF_* */
133 	uint64_aligned_t tot_pages;
134 	uint64_aligned_t max_pages;
135 	uint64_aligned_t outstanding_pages;
136 	uint64_aligned_t shr_pages;
137 	uint64_aligned_t paged_pages;
138 	uint64_aligned_t shared_info_frame; /* GMFN of shared_info struct */
139 	uint64_aligned_t cpu_time;
140 	uint32_t nr_online_vcpus; /* Number of VCPUs currently online. */
141 #define XEN_INVALID_MAX_VCPU_ID (~0U) /* Domain has no vcpus? */
142 	uint32_t max_vcpu_id; /* Maximum VCPUID in use by this domain. */
143 	uint32_t ssidref;
144 	xen_domain_handle_t handle;
145 	uint32_t cpupool;
146 	uint8_t gpaddr_bits; /* Guest physical address space size. */
147 	uint8_t pad2[7];
148 	struct xen_arch_domainconfig arch_config;
149 };
150 typedef struct xen_domctl_getdomaininfo xen_domctl_getdomaininfo_t;
151 DEFINE_XEN_GUEST_HANDLE(xen_domctl_getdomaininfo_t);
152 
153 /*
154  * Control shadow pagetables operation
155  */
156 /* XEN_DOMCTL_shadow_op */
157 
158 /* Memory allocation accessors. */
159 #define XEN_DOMCTL_SHADOW_OP_GET_ALLOCATION	30
160 #define XEN_DOMCTL_SHADOW_OP_SET_ALLOCATION	31
161 
162 struct xen_domctl_shadow_op_stats {
163 	uint32_t fault_count;
164 	uint32_t dirty_count;
165 };
166 
167 struct xen_domctl_shadow_op {
168 	/* IN variables. */
169 	uint32_t op; /* XEN_DOMCTL_SHADOW_OP_* */
170 
171 	/* OP_ENABLE: XEN_DOMCTL_SHADOW_ENABLE_* */
172 	/* OP_PEAK / OP_CLEAN: XEN_DOMCTL_SHADOW_LOGDIRTY_* */
173 	uint32_t mode;
174 
175 	/* OP_GET_ALLOCATION / OP_SET_ALLOCATION */
176 	uint32_t mb; /* Shadow memory allocation in MB */
177 
178 	/* OP_PEEK / OP_CLEAN */
179 	XEN_GUEST_HANDLE_64(uint8_t) dirty_bitmap;
180 	uint64_aligned_t pages; /* Size of buffer. Updated with actual size. */
181 	struct xen_domctl_shadow_op_stats stats;
182 };
183 
184 /* XEN_DOMCTL_max_mem */
185 struct xen_domctl_max_mem {
186 	/* IN variables. */
187 	uint64_aligned_t max_memkb;
188 };
189 
190 /* XEN_DOMCTL_setvcpucontext */
191 /* XEN_DOMCTL_getvcpucontext */
192 struct xen_domctl_vcpucontext {
193 	uint32_t vcpu; /* IN */
194 
195 	XEN_GUEST_HANDLE_64(vcpu_guest_context_t) ctxt; /* IN/OUT */
196 };
197 
198 /*
199  * XEN_DOMCTL_max_vcpus:
200  *
201  * The parameter passed to XEN_DOMCTL_max_vcpus must match the value passed to
202  * XEN_DOMCTL_createdomain.  This hypercall is in the process of being removed
203  * (once the failure paths in domain_create() have been improved), but is
204  * still required in the short term to allocate the vcpus themselves.
205  */
206 struct xen_domctl_max_vcpus {
207 	uint32_t max;	   /* maximum number of vcpus */
208 };
209 
210 /* XEN_DOMCTL_scheduler_op */
211 /* Scheduler types. */
212 /* #define XEN_SCHEDULER_SEDF  4 (Removed) */
213 #define XEN_SCHEDULER_CREDIT	5
214 #define XEN_SCHEDULER_CREDIT2	6
215 #define XEN_SCHEDULER_ARINC653	7
216 #define XEN_SCHEDULER_RTDS	8
217 #define XEN_SCHEDULER_NULL	9
218 
219 struct xen_domctl_sched_credit {
220 	uint16_t weight;
221 	uint16_t cap;
222 };
223 
224 struct xen_domctl_sched_credit2 {
225 	uint16_t weight;
226 	uint16_t cap;
227 };
228 
229 struct xen_domctl_sched_rtds {
230 	uint32_t period;
231 	uint32_t budget;
232 /* Can this vCPU execute beyond its reserved amount of time? */
233 #define _XEN_DOMCTL_SCHEDRT_extra	0
234 #define XEN_DOMCTL_SCHEDRT_extra	(1U<<_XEN_DOMCTL_SCHEDRT_extra)
235 	uint32_t flags;
236 };
237 
238 typedef struct xen_domctl_schedparam_vcpu {
239 	union {
240 		struct xen_domctl_sched_credit credit;
241 		struct xen_domctl_sched_credit2 credit2;
242 		struct xen_domctl_sched_rtds rtds;
243 	} u;
244 	uint32_t vcpuid;
245 } xen_domctl_schedparam_vcpu_t;
246 DEFINE_XEN_GUEST_HANDLE(xen_domctl_schedparam_vcpu_t);
247 
248 /*
249  * Set or get info?
250  * For schedulers supporting per-vcpu settings (e.g., RTDS):
251  *  XEN_DOMCTL_SCHEDOP_putinfo sets params for all vcpus;
252  *  XEN_DOMCTL_SCHEDOP_getinfo gets default params;
253  *  XEN_DOMCTL_SCHEDOP_put(get)vcpuinfo sets (gets) params of vcpus;
254  *
255  * For schedulers not supporting per-vcpu settings:
256  *  XEN_DOMCTL_SCHEDOP_putinfo sets params for all vcpus;
257  *  XEN_DOMCTL_SCHEDOP_getinfo gets domain-wise params;
258  *  XEN_DOMCTL_SCHEDOP_put(get)vcpuinfo returns error;
259  */
260 #define XEN_DOMCTL_SCHEDOP_putinfo	0
261 #define XEN_DOMCTL_SCHEDOP_getinfo	1
262 #define XEN_DOMCTL_SCHEDOP_putvcpuinfo	2
263 #define XEN_DOMCTL_SCHEDOP_getvcpuinfo	3
264 struct xen_domctl_scheduler_op {
265 	uint32_t sched_id; /* XEN_SCHEDULER_* */
266 	uint32_t cmd; /* XEN_DOMCTL_SCHEDOP_* */
267 	/* IN/OUT */
268 	union {
269 		struct xen_domctl_sched_credit credit;
270 		struct xen_domctl_sched_credit2 credit2;
271 		struct xen_domctl_sched_rtds rtds;
272 		struct {
273 			XEN_GUEST_HANDLE_64(xen_domctl_schedparam_vcpu_t) vcpus;
274 			/*
275 			 * IN: Number of elements in vcpus array.
276 			 * OUT: Number of processed elements of vcpus array.
277 			 */
278 			uint32_t nr_vcpus;
279 			uint32_t padding;
280 		} v;
281 	} u;
282 };
283 
284 /* XEN_DOMCTL_iomem_permission */
285 struct xen_domctl_iomem_permission {
286 	uint64_aligned_t first_mfn;/* first page (physical page number) in range */
287 	uint64_aligned_t nr_mfns;  /* number of pages in range (>0) */
288 	uint8_t  allow_access;     /* allow (!0) or deny (0) access to range? */
289 };
290 
291 /* XEN_DOMCTL_set_address_size */
292 /* XEN_DOMCTL_get_address_size */
293 struct xen_domctl_address_size {
294 	uint32_t size;
295 };
296 
297 /* Assign a device to a guest. Sets up IOMMU structures. */
298 /* XEN_DOMCTL_assign_device */
299 /*
300  * XEN_DOMCTL_test_assign_device: Pass DOMID_INVALID to find out whether the
301  * given device is assigned to any DomU at all. Pass a specific domain ID to
302  * find out whether the given device can be assigned to that domain.
303  */
304 /*
305  * XEN_DOMCTL_deassign_device: The behavior of this DOMCTL differs
306  * between the different type of device:
307  *  - PCI device (XEN_DOMCTL_DEV_PCI) will be reassigned to DOM0
308  *  - DT device (XEN_DOMCTL_DEV_DT) will left unassigned. DOM0
309  *  will have to call XEN_DOMCTL_assign_device in order to use the
310  *  device.
311  */
312 #define XEN_DOMCTL_DEV_PCI	0
313 #define XEN_DOMCTL_DEV_DT	1
314 struct xen_domctl_assign_device {
315 	/* IN */
316 	uint32_t dev; /* XEN_DOMCTL_DEV_* */
317 	uint32_t flags;
318 #define XEN_DOMCTL_DEV_RDM_RELAXED	1 /* assign only */
319 	union {
320 		struct {
321 			uint32_t machine_sbdf; /* machine PCI ID of assigned device */
322 		} pci;
323 		struct {
324 			uint32_t size; /* Length of the path */
325 
326 			XEN_GUEST_HANDLE_64(char) path; /* path to the device tree node */
327 		} dt;
328 	} u;
329 };
330 
331 /* Pass-through interrupts: bind real irq -> hvm devfn. */
332 /* XEN_DOMCTL_bind_pt_irq */
333 /* XEN_DOMCTL_unbind_pt_irq */
334 enum pt_irq_type {
335 	PT_IRQ_TYPE_PCI,
336 	PT_IRQ_TYPE_ISA,
337 	PT_IRQ_TYPE_MSI,
338 	PT_IRQ_TYPE_MSI_TRANSLATE,
339 	PT_IRQ_TYPE_SPI, /* ARM: valid range 32-1019 */
340 };
341 struct xen_domctl_bind_pt_irq {
342 	uint32_t machine_irq;
343 	uint32_t irq_type; /* enum pt_irq_type */
344 
345 	union {
346 		struct {
347 			uint8_t isa_irq;
348 		} isa;
349 		struct {
350 			uint8_t bus;
351 			uint8_t device;
352 			uint8_t intx;
353 		} pci;
354 		struct {
355 			uint8_t gvec;
356 			uint32_t gflags;
357 #define XEN_DOMCTL_VMSI_X86_DEST_ID_MASK	0x0000ff
358 #define XEN_DOMCTL_VMSI_X86_RH_MASK		0x000100
359 #define XEN_DOMCTL_VMSI_X86_DM_MASK		0x000200
360 #define XEN_DOMCTL_VMSI_X86_DELIV_MASK		0x007000
361 #define XEN_DOMCTL_VMSI_X86_TRIG_MASK		0x008000
362 #define XEN_DOMCTL_VMSI_X86_UNMASKED		0x010000
363 
364 			uint64_aligned_t gtable;
365 		} msi;
366 		struct {
367 			uint16_t spi;
368 		} spi;
369 	} u;
370 };
371 
372 
373 /* Bind machine I/O address range -> HVM address range. */
374 /* XEN_DOMCTL_memory_mapping */
375 /* Returns
376  * - zero     success, everything done
377  * - -E2BIG   passed in nr_mfns value too large for the implementation
378  * - positive partial success for the first <result> page frames (with
379  *	    <result> less than nr_mfns), requiring re-invocation by the
380  *	    caller after updating inputs
381  * - negative error; other than -E2BIG
382  */
383 #define DPCI_ADD_MAPPING	1
384 #define DPCI_REMOVE_MAPPING	0
385 struct xen_domctl_memory_mapping {
386 	uint64_aligned_t first_gfn; /* first page (hvm guest phys page) in range */
387 	uint64_aligned_t first_mfn; /* first page (machine page) in range */
388 	uint64_aligned_t nr_mfns;   /* number of pages in range (>0) */
389 	uint32_t add_mapping;       /* add or remove mapping */
390 	uint32_t padding;           /* padding for 64-bit aligned structure */
391 };
392 
393 /*
394  * ARM: Clean and invalidate caches associated with given region of
395  * guest memory.
396  */
397 struct xen_domctl_cacheflush {
398 	/* IN: page range to flush. */
399 	xen_pfn_t start_pfn, nr_pfns;
400 };
401 
402 /*
403  * XEN_DOMCTL_get_paging_mempool_size / XEN_DOMCTL_set_paging_mempool_size.
404  *
405  * Get or set the paging memory pool size.  The size is in bytes.
406  *
407  * This is a dedicated pool of memory for Xen to use while managing the guest,
408  * typically containing pagetables.  As such, there is an implementation
409  * specific minimum granularity.
410  *
411  * The set operation can fail mid-way through the request (e.g. Xen running
412  * out of memory, no free memory to reclaim from the pool, etc.).
413  */
414 struct xen_domctl_paging_mempool {
415 	uint64_aligned_t size; /* Size in bytes. */
416 };
417 
418 struct xen_domctl {
419 	uint32_t cmd;
420 #define XEN_DOMCTL_createdomain			1
421 #define XEN_DOMCTL_destroydomain		2
422 #define XEN_DOMCTL_pausedomain			3
423 #define XEN_DOMCTL_unpausedomain		4
424 #define XEN_DOMCTL_getdomaininfo		5
425 #define XEN_DOMCTL_setvcpuaffinity		9
426 #define XEN_DOMCTL_shadow_op			10
427 #define XEN_DOMCTL_max_mem			11
428 #define XEN_DOMCTL_setvcpucontext		12
429 #define XEN_DOMCTL_getvcpucontext		13
430 #define XEN_DOMCTL_getvcpuinfo			14
431 #define XEN_DOMCTL_max_vcpus			15
432 #define XEN_DOMCTL_scheduler_op			16
433 #define XEN_DOMCTL_setdomainhandle		17
434 #define XEN_DOMCTL_setdebugging			18
435 #define XEN_DOMCTL_irq_permission		19
436 #define XEN_DOMCTL_iomem_permission		20
437 #define XEN_DOMCTL_ioport_permission		21
438 #define XEN_DOMCTL_hypercall_init		22
439 #define XEN_DOMCTL_settimeoffset		24
440 #define XEN_DOMCTL_getvcpuaffinity		25
441 #define XEN_DOMCTL_real_mode_area		26 /* Obsolete PPC only */
442 #define XEN_DOMCTL_resumedomain			27
443 #define XEN_DOMCTL_sendtrigger			28
444 #define XEN_DOMCTL_subscribe			29
445 #define XEN_DOMCTL_gethvmcontext		33
446 #define XEN_DOMCTL_sethvmcontext		34
447 #define XEN_DOMCTL_set_address_size		35
448 #define XEN_DOMCTL_get_address_size		36
449 #define XEN_DOMCTL_assign_device		37
450 #define XEN_DOMCTL_bind_pt_irq			38
451 #define XEN_DOMCTL_memory_mapping		39
452 #define XEN_DOMCTL_ioport_mapping		40
453 #define XEN_DOMCTL_set_ext_vcpucontext		42
454 #define XEN_DOMCTL_get_ext_vcpucontext		43
455 #define XEN_DOMCTL_set_opt_feature		44 /* Obsolete IA64 only */
456 #define XEN_DOMCTL_test_assign_device		45
457 #define XEN_DOMCTL_set_target			46
458 #define XEN_DOMCTL_deassign_device		47
459 #define XEN_DOMCTL_unbind_pt_irq		48
460 #define XEN_DOMCTL_get_device_group		50
461 #define XEN_DOMCTL_debug_op			54
462 #define XEN_DOMCTL_gethvmcontext_partial	55
463 #define XEN_DOMCTL_vm_event_op			56
464 #define XEN_DOMCTL_mem_sharing_op		57
465 #define XEN_DOMCTL_gettscinfo			59
466 #define XEN_DOMCTL_settscinfo			60
467 #define XEN_DOMCTL_getpageframeinfo3		61
468 #define XEN_DOMCTL_setvcpuextstate		62
469 #define XEN_DOMCTL_getvcpuextstate		63
470 #define XEN_DOMCTL_set_access_required		64
471 #define XEN_DOMCTL_audit_p2m			65
472 #define XEN_DOMCTL_set_virq_handler		66
473 #define XEN_DOMCTL_set_broken_page_p2m		67
474 #define XEN_DOMCTL_setnodeaffinity		68
475 #define XEN_DOMCTL_getnodeaffinity		69
476 #define XEN_DOMCTL_cacheflush			71
477 #define XEN_DOMCTL_get_vcpu_msrs		72
478 #define XEN_DOMCTL_set_vcpu_msrs		73
479 #define XEN_DOMCTL_setvnumainfo			74
480 #define XEN_DOMCTL_psr_cmt_op			75
481 #define XEN_DOMCTL_monitor_op			77
482 #define XEN_DOMCTL_psr_alloc			78
483 #define XEN_DOMCTL_soft_reset			79
484 #define XEN_DOMCTL_vuart_op			81
485 #define XEN_DOMCTL_get_cpu_policy		82
486 #define XEN_DOMCTL_set_cpu_policy		83
487 #define XEN_DOMCTL_vmtrace_op			84
488 #define XEN_DOMCTL_get_paging_mempool_size	85
489 #define XEN_DOMCTL_set_paging_mempool_size	86
490 #define XEN_DOMCTL_gdbsx_guestmemio		1000
491 #define XEN_DOMCTL_gdbsx_pausevcpu		1001
492 #define XEN_DOMCTL_gdbsx_unpausevcpu		1002
493 #define XEN_DOMCTL_gdbsx_domstatus		1003
494 	uint32_t interface_version; /* XEN_DOMCTL_INTERFACE_VERSION */
495 	domid_t  domain;
496 	uint16_t _pad[3];
497 	union {
498 		struct xen_domctl_createdomain createdomain;
499 		struct xen_domctl_getdomaininfo getdomaininfo;
500 		struct xen_domctl_max_mem max_mem;
501 		struct xen_domctl_vcpucontext vcpucontext;
502 		struct xen_domctl_max_vcpus max_vcpus;
503 		struct xen_domctl_scheduler_op scheduler_op;
504 		struct xen_domctl_iomem_permission iomem_permission;
505 		struct xen_domctl_address_size address_size;
506 		struct xen_domctl_assign_device assign_device;
507 		struct xen_domctl_bind_pt_irq bind_pt_irq;
508 		struct xen_domctl_memory_mapping memory_mapping;
509 		struct xen_domctl_cacheflush cacheflush;
510 		struct xen_domctl_paging_mempool paging_mempool;
511 		uint8_t pad[128];
512 	} u;
513 };
514 typedef struct xen_domctl xen_domctl_t;
515 DEFINE_XEN_GUEST_HANDLE(xen_domctl_t);
516 
517 #endif /* __XEN_PUBLIC_DOMCTL_H__ */
518