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