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