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_hypercall_init { 265 vki_xen_uint64_aligned_t gmfn; /* GMFN to be initialised */ 266 }; 267 268 struct vki_xen_domctl_settimeoffset { 269 vki_int32_t time_offset_seconds; 270 }; 271 272 struct vki_xen_domctl_cpuid { 273 vki_uint32_t input[2]; 274 vki_uint32_t eax; 275 vki_uint32_t ebx; 276 vki_uint32_t ecx; 277 vki_uint32_t edx; 278 }; 279 280 struct vki_xen_guest_tsc_info { 281 vki_uint32_t tsc_mode; 282 vki_uint32_t gtsc_khz; 283 vki_uint32_t incarnation; 284 vki_uint32_t pad; 285 vki_xen_uint64_aligned_t elapsed_nsec; 286 }; 287 typedef struct vki_xen_guest_tsc_info vki_xen_guest_tsc_info_t; 288 DEFINE_VKI_XEN_GUEST_HANDLE(vki_xen_guest_tsc_info_t); 289 290 struct vki_xen_domctl_hvmcontext { 291 vki_uint32_t size; /* IN/OUT size of buffer */ 292 VKI_XEN_GUEST_HANDLE_64(vki_uint8) buffer; /* IN/OUT */ 293 }; 294 typedef struct vki_xen_domctl_hvmcontext vki_xen_domctl_hvmcontext_t; 295 DEFINE_VKI_XEN_GUEST_HANDLE(vki_xen_domctl_hvmcontext_t); 296 297 struct vki_xen_domctl_tsc_info { 298 VKI_XEN_GUEST_HANDLE_64(vki_xen_guest_tsc_info_t) out_info; /* OUT */ 299 vki_xen_guest_tsc_info_t info; /* IN */ 300 }; 301 302 struct vki_xen_domctl_vcpuextstate { 303 vki_uint32_t vcpu; 304 vki_xen_uint64_aligned_t xfeature_mask; 305 vki_xen_uint64_aligned_t size; 306 VKI_XEN_GUEST_HANDLE_64(vki_uint64) buffer; 307 }; 308 309 struct vki_xen_domctl_address_size { 310 vki_uint32_t size; 311 }; 312 313 struct vki_xen_domctl_set_max_evtchn { 314 vki_uint32_t max_port; 315 }; 316 317 struct vki_xen_domctl_cacheflush { 318 /* IN: page range to flush. */ 319 vki_xen_pfn_t start_pfn, nr_pfns; 320 }; 321 322 struct vki_xen_domctl { 323 vki_uint32_t cmd; 324 vki_uint32_t interface_version; /* XEN_DOMCTL_INTERFACE_VERSION */ 325 vki_xen_domid_t domain; 326 union { 327 struct vki_xen_domctl_createdomain createdomain; 328 struct vki_xen_domctl_getdomaininfo_00000007 getdomaininfo_00000007; 329 struct vki_xen_domctl_getdomaininfo_00000008 getdomaininfo_00000008; 330 struct vki_xen_domctl_getdomaininfo_00000009 getdomaininfo_00000009; 331 //struct vki_xen_domctl_getmemlist getmemlist; 332 //struct vki_xen_domctl_getpageframeinfo getpageframeinfo; 333 //struct vki_xen_domctl_getpageframeinfo2 getpageframeinfo2; 334 struct vki_xen_domctl_getpageframeinfo3 getpageframeinfo3; 335 struct vki_xen_domctl_nodeaffinity nodeaffinity; 336 struct vki_xen_domctl_vcpuaffinity vcpuaffinity; 337 struct vki_xen_domctl_shadow_op shadow_op; 338 struct vki_xen_domctl_max_mem max_mem; 339 struct vki_xen_domctl_vcpucontext vcpucontext; 340 struct vki_xen_domctl_getvcpuinfo getvcpuinfo; 341 struct vki_xen_domctl_max_vcpus max_vcpus; 342 struct vki_xen_domctl_scheduler_op scheduler_op; 343 //struct vki_xen_domctl_setdomainhandle setdomainhandle; 344 //struct vki_xen_domctl_setdebugging setdebugging; 345 //struct vki_xen_domctl_irq_permission irq_permission; 346 //struct vki_xen_domctl_iomem_permission iomem_permission; 347 //struct vki_xen_domctl_ioport_permission ioport_permission; 348 struct vki_xen_domctl_hypercall_init hypercall_init; 349 //struct vki_xen_domctl_arch_setup arch_setup; 350 struct vki_xen_domctl_settimeoffset settimeoffset; 351 //struct vki_xen_domctl_disable_migrate disable_migrate; 352 struct vki_xen_domctl_tsc_info tsc_info; 353 //struct vki_xen_domctl_real_mode_area real_mode_area; 354 struct vki_xen_domctl_hvmcontext hvmcontext; 355 //struct vki_xen_domctl_hvmcontext_partial hvmcontext_partial; 356 struct vki_xen_domctl_address_size address_size; 357 //struct vki_xen_domctl_sendtrigger sendtrigger; 358 //struct vki_xen_domctl_get_device_group get_device_group; 359 //struct vki_xen_domctl_assign_device assign_device; 360 //struct vki_xen_domctl_bind_pt_irq bind_pt_irq; 361 //struct vki_xen_domctl_memory_mapping memory_mapping; 362 //struct vki_xen_domctl_ioport_mapping ioport_mapping; 363 //struct vki_xen_domctl_pin_mem_cacheattr pin_mem_cacheattr; 364 //struct vki_xen_domctl_ext_vcpucontext ext_vcpucontext; 365 //struct vki_xen_domctl_set_target set_target; 366 //struct vki_xen_domctl_subscribe subscribe; 367 //struct vki_xen_domctl_debug_op debug_op; 368 //struct vki_xen_domctl_mem_event_op mem_event_op; 369 //struct vki_xen_domctl_mem_sharing_op mem_sharing_op; 370 #if defined(__i386__) || defined(__x86_64__) 371 struct vki_xen_domctl_cpuid cpuid; 372 struct vki_xen_domctl_vcpuextstate vcpuextstate; 373 #endif 374 //struct vki_xen_domctl_set_access_required access_required; 375 //struct vki_xen_domctl_audit_p2m audit_p2m; 376 //struct vki_xen_domctl_set_virq_handler set_virq_handler; 377 struct vki_xen_domctl_set_max_evtchn set_max_evtchn; 378 //struct vki_xen_domctl_gdbsx_memio gdbsx_guest_memio; 379 //struct vki_xen_domctl_set_broken_page_p2m set_broken_page_p2m; 380 struct vki_xen_domctl_cacheflush cacheflush; 381 //struct vki_xen_domctl_gdbsx_pauseunp_vcpu gdbsx_pauseunp_vcpu; 382 //struct vki_xen_domctl_gdbsx_domstatus gdbsx_domstatus; 383 vki_uint8_t pad[128]; 384 } u; 385 }; 386 387 #endif // __VKI_XEN_DOMCTL_H 388 389 /*--------------------------------------------------------------------*/ 390 /*--- end ---*/ 391 /*--------------------------------------------------------------------*/ 392