|
|
1.1 ! root 1: /****************************************************************************** ! 2: * domctl.h ! 3: * ! 4: * Domain management operations. For use by node control stack. ! 5: * ! 6: * Permission is hereby granted, free of charge, to any person obtaining a copy ! 7: * of this software and associated documentation files (the "Software"), to ! 8: * deal in the Software without restriction, including without limitation the ! 9: * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or ! 10: * sell copies of the Software, and to permit persons to whom the Software is ! 11: * furnished to do so, subject to the following conditions: ! 12: * ! 13: * The above copyright notice and this permission notice shall be included in ! 14: * all copies or substantial portions of the Software. ! 15: * ! 16: * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ! 17: * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ! 18: * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE ! 19: * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER ! 20: * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING ! 21: * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER ! 22: * DEALINGS IN THE SOFTWARE. ! 23: * ! 24: * Copyright (c) 2002-2003, B Dragovic ! 25: * Copyright (c) 2002-2006, K Fraser ! 26: */ ! 27: ! 28: #ifndef __XEN_PUBLIC_DOMCTL_H__ ! 29: #define __XEN_PUBLIC_DOMCTL_H__ ! 30: ! 31: #if !defined(__XEN__) && !defined(__XEN_TOOLS__) ! 32: #error "domctl operations are intended for use by node control tools only" ! 33: #endif ! 34: ! 35: #include "xen.h" ! 36: ! 37: #define XEN_DOMCTL_INTERFACE_VERSION 0x00000005 ! 38: ! 39: struct xenctl_cpumap { ! 40: XEN_GUEST_HANDLE_64(uint8) bitmap; ! 41: uint32_t nr_cpus; ! 42: }; ! 43: ! 44: /* ! 45: * NB. xen_domctl.domain is an IN/OUT parameter for this operation. ! 46: * If it is specified as zero, an id is auto-allocated and returned. ! 47: */ ! 48: #define XEN_DOMCTL_createdomain 1 ! 49: struct xen_domctl_createdomain { ! 50: /* IN parameters */ ! 51: uint32_t ssidref; ! 52: xen_domain_handle_t handle; ! 53: /* Is this an HVM guest (as opposed to a PV guest)? */ ! 54: #define _XEN_DOMCTL_CDF_hvm_guest 0 ! 55: #define XEN_DOMCTL_CDF_hvm_guest (1U<<_XEN_DOMCTL_CDF_hvm_guest) ! 56: /* Use hardware-assisted paging if available? */ ! 57: #define _XEN_DOMCTL_CDF_hap 1 ! 58: #define XEN_DOMCTL_CDF_hap (1U<<_XEN_DOMCTL_CDF_hap) ! 59: uint32_t flags; ! 60: }; ! 61: typedef struct xen_domctl_createdomain xen_domctl_createdomain_t; ! 62: DEFINE_XEN_GUEST_HANDLE(xen_domctl_createdomain_t); ! 63: ! 64: #define XEN_DOMCTL_destroydomain 2 ! 65: #define XEN_DOMCTL_pausedomain 3 ! 66: #define XEN_DOMCTL_unpausedomain 4 ! 67: #define XEN_DOMCTL_resumedomain 27 ! 68: ! 69: #define XEN_DOMCTL_getdomaininfo 5 ! 70: struct xen_domctl_getdomaininfo { ! 71: /* OUT variables. */ ! 72: domid_t domain; /* Also echoed in domctl.domain */ ! 73: /* Domain is scheduled to die. */ ! 74: #define _XEN_DOMINF_dying 0 ! 75: #define XEN_DOMINF_dying (1U<<_XEN_DOMINF_dying) ! 76: /* Domain is an HVM guest (as opposed to a PV guest). */ ! 77: #define _XEN_DOMINF_hvm_guest 1 ! 78: #define XEN_DOMINF_hvm_guest (1U<<_XEN_DOMINF_hvm_guest) ! 79: /* The guest OS has shut down. */ ! 80: #define _XEN_DOMINF_shutdown 2 ! 81: #define XEN_DOMINF_shutdown (1U<<_XEN_DOMINF_shutdown) ! 82: /* Currently paused by control software. */ ! 83: #define _XEN_DOMINF_paused 3 ! 84: #define XEN_DOMINF_paused (1U<<_XEN_DOMINF_paused) ! 85: /* Currently blocked pending an event. */ ! 86: #define _XEN_DOMINF_blocked 4 ! 87: #define XEN_DOMINF_blocked (1U<<_XEN_DOMINF_blocked) ! 88: /* Domain is currently running. */ ! 89: #define _XEN_DOMINF_running 5 ! 90: #define XEN_DOMINF_running (1U<<_XEN_DOMINF_running) ! 91: /* Being debugged. */ ! 92: #define _XEN_DOMINF_debugged 6 ! 93: #define XEN_DOMINF_debugged (1U<<_XEN_DOMINF_debugged) ! 94: /* CPU to which this domain is bound. */ ! 95: #define XEN_DOMINF_cpumask 255 ! 96: #define XEN_DOMINF_cpushift 8 ! 97: /* XEN_DOMINF_shutdown guest-supplied code. */ ! 98: #define XEN_DOMINF_shutdownmask 255 ! 99: #define XEN_DOMINF_shutdownshift 16 ! 100: uint32_t flags; /* XEN_DOMINF_* */ ! 101: uint64_aligned_t tot_pages; ! 102: uint64_aligned_t max_pages; ! 103: uint64_aligned_t shared_info_frame; /* GMFN of shared_info struct */ ! 104: uint64_aligned_t cpu_time; ! 105: uint32_t nr_online_vcpus; /* Number of VCPUs currently online. */ ! 106: uint32_t max_vcpu_id; /* Maximum VCPUID in use by this domain. */ ! 107: uint32_t ssidref; ! 108: xen_domain_handle_t handle; ! 109: }; ! 110: typedef struct xen_domctl_getdomaininfo xen_domctl_getdomaininfo_t; ! 111: DEFINE_XEN_GUEST_HANDLE(xen_domctl_getdomaininfo_t); ! 112: ! 113: ! 114: #define XEN_DOMCTL_getmemlist 6 ! 115: struct xen_domctl_getmemlist { ! 116: /* IN variables. */ ! 117: /* Max entries to write to output buffer. */ ! 118: uint64_aligned_t max_pfns; ! 119: /* Start index in guest's page list. */ ! 120: uint64_aligned_t start_pfn; ! 121: XEN_GUEST_HANDLE_64(uint64) buffer; ! 122: /* OUT variables. */ ! 123: uint64_aligned_t num_pfns; ! 124: }; ! 125: typedef struct xen_domctl_getmemlist xen_domctl_getmemlist_t; ! 126: DEFINE_XEN_GUEST_HANDLE(xen_domctl_getmemlist_t); ! 127: ! 128: ! 129: #define XEN_DOMCTL_getpageframeinfo 7 ! 130: ! 131: #define XEN_DOMCTL_PFINFO_LTAB_SHIFT 28 ! 132: #define XEN_DOMCTL_PFINFO_NOTAB (0x0U<<28) ! 133: #define XEN_DOMCTL_PFINFO_L1TAB (0x1U<<28) ! 134: #define XEN_DOMCTL_PFINFO_L2TAB (0x2U<<28) ! 135: #define XEN_DOMCTL_PFINFO_L3TAB (0x3U<<28) ! 136: #define XEN_DOMCTL_PFINFO_L4TAB (0x4U<<28) ! 137: #define XEN_DOMCTL_PFINFO_LTABTYPE_MASK (0x7U<<28) ! 138: #define XEN_DOMCTL_PFINFO_LPINTAB (0x1U<<31) ! 139: #define XEN_DOMCTL_PFINFO_XTAB (0xfU<<28) /* invalid page */ ! 140: #define XEN_DOMCTL_PFINFO_LTAB_MASK (0xfU<<28) ! 141: ! 142: struct xen_domctl_getpageframeinfo { ! 143: /* IN variables. */ ! 144: uint64_aligned_t gmfn; /* GMFN to query */ ! 145: /* OUT variables. */ ! 146: /* Is the page PINNED to a type? */ ! 147: uint32_t type; /* see above type defs */ ! 148: }; ! 149: typedef struct xen_domctl_getpageframeinfo xen_domctl_getpageframeinfo_t; ! 150: DEFINE_XEN_GUEST_HANDLE(xen_domctl_getpageframeinfo_t); ! 151: ! 152: ! 153: #define XEN_DOMCTL_getpageframeinfo2 8 ! 154: struct xen_domctl_getpageframeinfo2 { ! 155: /* IN variables. */ ! 156: uint64_aligned_t num; ! 157: /* IN/OUT variables. */ ! 158: XEN_GUEST_HANDLE_64(uint32) array; ! 159: }; ! 160: typedef struct xen_domctl_getpageframeinfo2 xen_domctl_getpageframeinfo2_t; ! 161: DEFINE_XEN_GUEST_HANDLE(xen_domctl_getpageframeinfo2_t); ! 162: ! 163: ! 164: /* ! 165: * Control shadow pagetables operation ! 166: */ ! 167: #define XEN_DOMCTL_shadow_op 10 ! 168: ! 169: /* Disable shadow mode. */ ! 170: #define XEN_DOMCTL_SHADOW_OP_OFF 0 ! 171: ! 172: /* Enable shadow mode (mode contains ORed XEN_DOMCTL_SHADOW_ENABLE_* flags). */ ! 173: #define XEN_DOMCTL_SHADOW_OP_ENABLE 32 ! 174: ! 175: /* Log-dirty bitmap operations. */ ! 176: /* Return the bitmap and clean internal copy for next round. */ ! 177: #define XEN_DOMCTL_SHADOW_OP_CLEAN 11 ! 178: /* Return the bitmap but do not modify internal copy. */ ! 179: #define XEN_DOMCTL_SHADOW_OP_PEEK 12 ! 180: ! 181: /* Memory allocation accessors. */ ! 182: #define XEN_DOMCTL_SHADOW_OP_GET_ALLOCATION 30 ! 183: #define XEN_DOMCTL_SHADOW_OP_SET_ALLOCATION 31 ! 184: ! 185: /* Legacy enable operations. */ ! 186: /* Equiv. to ENABLE with no mode flags. */ ! 187: #define XEN_DOMCTL_SHADOW_OP_ENABLE_TEST 1 ! 188: /* Equiv. to ENABLE with mode flag ENABLE_LOG_DIRTY. */ ! 189: #define XEN_DOMCTL_SHADOW_OP_ENABLE_LOGDIRTY 2 ! 190: /* Equiv. to ENABLE with mode flags ENABLE_REFCOUNT and ENABLE_TRANSLATE. */ ! 191: #define XEN_DOMCTL_SHADOW_OP_ENABLE_TRANSLATE 3 ! 192: ! 193: /* Mode flags for XEN_DOMCTL_SHADOW_OP_ENABLE. */ ! 194: /* ! 195: * Shadow pagetables are refcounted: guest does not use explicit mmu ! 196: * operations nor write-protect its pagetables. ! 197: */ ! 198: #define XEN_DOMCTL_SHADOW_ENABLE_REFCOUNT (1 << 1) ! 199: /* ! 200: * Log pages in a bitmap as they are dirtied. ! 201: * Used for live relocation to determine which pages must be re-sent. ! 202: */ ! 203: #define XEN_DOMCTL_SHADOW_ENABLE_LOG_DIRTY (1 << 2) ! 204: /* ! 205: * Automatically translate GPFNs into MFNs. ! 206: */ ! 207: #define XEN_DOMCTL_SHADOW_ENABLE_TRANSLATE (1 << 3) ! 208: /* ! 209: * Xen does not steal virtual address space from the guest. ! 210: * Requires HVM support. ! 211: */ ! 212: #define XEN_DOMCTL_SHADOW_ENABLE_EXTERNAL (1 << 4) ! 213: ! 214: struct xen_domctl_shadow_op_stats { ! 215: uint32_t fault_count; ! 216: uint32_t dirty_count; ! 217: }; ! 218: typedef struct xen_domctl_shadow_op_stats xen_domctl_shadow_op_stats_t; ! 219: DEFINE_XEN_GUEST_HANDLE(xen_domctl_shadow_op_stats_t); ! 220: ! 221: struct xen_domctl_shadow_op { ! 222: /* IN variables. */ ! 223: uint32_t op; /* XEN_DOMCTL_SHADOW_OP_* */ ! 224: ! 225: /* OP_ENABLE */ ! 226: uint32_t mode; /* XEN_DOMCTL_SHADOW_ENABLE_* */ ! 227: ! 228: /* OP_GET_ALLOCATION / OP_SET_ALLOCATION */ ! 229: uint32_t mb; /* Shadow memory allocation in MB */ ! 230: ! 231: /* OP_PEEK / OP_CLEAN */ ! 232: XEN_GUEST_HANDLE_64(uint8) dirty_bitmap; ! 233: uint64_aligned_t pages; /* Size of buffer. Updated with actual size. */ ! 234: struct xen_domctl_shadow_op_stats stats; ! 235: }; ! 236: typedef struct xen_domctl_shadow_op xen_domctl_shadow_op_t; ! 237: DEFINE_XEN_GUEST_HANDLE(xen_domctl_shadow_op_t); ! 238: ! 239: ! 240: #define XEN_DOMCTL_max_mem 11 ! 241: struct xen_domctl_max_mem { ! 242: /* IN variables. */ ! 243: uint64_aligned_t max_memkb; ! 244: }; ! 245: typedef struct xen_domctl_max_mem xen_domctl_max_mem_t; ! 246: DEFINE_XEN_GUEST_HANDLE(xen_domctl_max_mem_t); ! 247: ! 248: ! 249: #define XEN_DOMCTL_setvcpucontext 12 ! 250: #define XEN_DOMCTL_getvcpucontext 13 ! 251: struct xen_domctl_vcpucontext { ! 252: uint32_t vcpu; /* IN */ ! 253: XEN_GUEST_HANDLE_64(vcpu_guest_context_t) ctxt; /* IN/OUT */ ! 254: }; ! 255: typedef struct xen_domctl_vcpucontext xen_domctl_vcpucontext_t; ! 256: DEFINE_XEN_GUEST_HANDLE(xen_domctl_vcpucontext_t); ! 257: ! 258: ! 259: #define XEN_DOMCTL_getvcpuinfo 14 ! 260: struct xen_domctl_getvcpuinfo { ! 261: /* IN variables. */ ! 262: uint32_t vcpu; ! 263: /* OUT variables. */ ! 264: uint8_t online; /* currently online (not hotplugged)? */ ! 265: uint8_t blocked; /* blocked waiting for an event? */ ! 266: uint8_t running; /* currently scheduled on its CPU? */ ! 267: uint64_aligned_t cpu_time; /* total cpu time consumed (ns) */ ! 268: uint32_t cpu; /* current mapping */ ! 269: }; ! 270: typedef struct xen_domctl_getvcpuinfo xen_domctl_getvcpuinfo_t; ! 271: DEFINE_XEN_GUEST_HANDLE(xen_domctl_getvcpuinfo_t); ! 272: ! 273: ! 274: /* Get/set which physical cpus a vcpu can execute on. */ ! 275: #define XEN_DOMCTL_setvcpuaffinity 9 ! 276: #define XEN_DOMCTL_getvcpuaffinity 25 ! 277: struct xen_domctl_vcpuaffinity { ! 278: uint32_t vcpu; /* IN */ ! 279: struct xenctl_cpumap cpumap; /* IN/OUT */ ! 280: }; ! 281: typedef struct xen_domctl_vcpuaffinity xen_domctl_vcpuaffinity_t; ! 282: DEFINE_XEN_GUEST_HANDLE(xen_domctl_vcpuaffinity_t); ! 283: ! 284: ! 285: #define XEN_DOMCTL_max_vcpus 15 ! 286: struct xen_domctl_max_vcpus { ! 287: uint32_t max; /* maximum number of vcpus */ ! 288: }; ! 289: typedef struct xen_domctl_max_vcpus xen_domctl_max_vcpus_t; ! 290: DEFINE_XEN_GUEST_HANDLE(xen_domctl_max_vcpus_t); ! 291: ! 292: ! 293: #define XEN_DOMCTL_scheduler_op 16 ! 294: /* Scheduler types. */ ! 295: #define XEN_SCHEDULER_SEDF 4 ! 296: #define XEN_SCHEDULER_CREDIT 5 ! 297: /* Set or get info? */ ! 298: #define XEN_DOMCTL_SCHEDOP_putinfo 0 ! 299: #define XEN_DOMCTL_SCHEDOP_getinfo 1 ! 300: struct xen_domctl_scheduler_op { ! 301: uint32_t sched_id; /* XEN_SCHEDULER_* */ ! 302: uint32_t cmd; /* XEN_DOMCTL_SCHEDOP_* */ ! 303: union { ! 304: struct xen_domctl_sched_sedf { ! 305: uint64_aligned_t period; ! 306: uint64_aligned_t slice; ! 307: uint64_aligned_t latency; ! 308: uint32_t extratime; ! 309: uint32_t weight; ! 310: } sedf; ! 311: struct xen_domctl_sched_credit { ! 312: uint16_t weight; ! 313: uint16_t cap; ! 314: } credit; ! 315: } u; ! 316: }; ! 317: typedef struct xen_domctl_scheduler_op xen_domctl_scheduler_op_t; ! 318: DEFINE_XEN_GUEST_HANDLE(xen_domctl_scheduler_op_t); ! 319: ! 320: ! 321: #define XEN_DOMCTL_setdomainhandle 17 ! 322: struct xen_domctl_setdomainhandle { ! 323: xen_domain_handle_t handle; ! 324: }; ! 325: typedef struct xen_domctl_setdomainhandle xen_domctl_setdomainhandle_t; ! 326: DEFINE_XEN_GUEST_HANDLE(xen_domctl_setdomainhandle_t); ! 327: ! 328: ! 329: #define XEN_DOMCTL_setdebugging 18 ! 330: struct xen_domctl_setdebugging { ! 331: uint8_t enable; ! 332: }; ! 333: typedef struct xen_domctl_setdebugging xen_domctl_setdebugging_t; ! 334: DEFINE_XEN_GUEST_HANDLE(xen_domctl_setdebugging_t); ! 335: ! 336: ! 337: #define XEN_DOMCTL_irq_permission 19 ! 338: struct xen_domctl_irq_permission { ! 339: uint8_t pirq; ! 340: uint8_t allow_access; /* flag to specify enable/disable of IRQ access */ ! 341: }; ! 342: typedef struct xen_domctl_irq_permission xen_domctl_irq_permission_t; ! 343: DEFINE_XEN_GUEST_HANDLE(xen_domctl_irq_permission_t); ! 344: ! 345: ! 346: #define XEN_DOMCTL_iomem_permission 20 ! 347: struct xen_domctl_iomem_permission { ! 348: uint64_aligned_t first_mfn;/* first page (physical page number) in range */ ! 349: uint64_aligned_t nr_mfns; /* number of pages in range (>0) */ ! 350: uint8_t allow_access; /* allow (!0) or deny (0) access to range? */ ! 351: }; ! 352: typedef struct xen_domctl_iomem_permission xen_domctl_iomem_permission_t; ! 353: DEFINE_XEN_GUEST_HANDLE(xen_domctl_iomem_permission_t); ! 354: ! 355: ! 356: #define XEN_DOMCTL_ioport_permission 21 ! 357: struct xen_domctl_ioport_permission { ! 358: uint32_t first_port; /* first port int range */ ! 359: uint32_t nr_ports; /* size of port range */ ! 360: uint8_t allow_access; /* allow or deny access to range? */ ! 361: }; ! 362: typedef struct xen_domctl_ioport_permission xen_domctl_ioport_permission_t; ! 363: DEFINE_XEN_GUEST_HANDLE(xen_domctl_ioport_permission_t); ! 364: ! 365: ! 366: #define XEN_DOMCTL_hypercall_init 22 ! 367: struct xen_domctl_hypercall_init { ! 368: uint64_aligned_t gmfn; /* GMFN to be initialised */ ! 369: }; ! 370: typedef struct xen_domctl_hypercall_init xen_domctl_hypercall_init_t; ! 371: DEFINE_XEN_GUEST_HANDLE(xen_domctl_hypercall_init_t); ! 372: ! 373: ! 374: #define XEN_DOMCTL_arch_setup 23 ! 375: #define _XEN_DOMAINSETUP_hvm_guest 0 ! 376: #define XEN_DOMAINSETUP_hvm_guest (1UL<<_XEN_DOMAINSETUP_hvm_guest) ! 377: #define _XEN_DOMAINSETUP_query 1 /* Get parameters (for save) */ ! 378: #define XEN_DOMAINSETUP_query (1UL<<_XEN_DOMAINSETUP_query) ! 379: #define _XEN_DOMAINSETUP_sioemu_guest 2 ! 380: #define XEN_DOMAINSETUP_sioemu_guest (1UL<<_XEN_DOMAINSETUP_sioemu_guest) ! 381: typedef struct xen_domctl_arch_setup { ! 382: uint64_aligned_t flags; /* XEN_DOMAINSETUP_* */ ! 383: #ifdef __ia64__ ! 384: uint64_aligned_t bp; /* mpaddr of boot param area */ ! 385: uint64_aligned_t maxmem; /* Highest memory address for MDT. */ ! 386: uint64_aligned_t xsi_va; /* Xen shared_info area virtual address. */ ! 387: uint32_t hypercall_imm; /* Break imm for Xen hypercalls. */ ! 388: int8_t vhpt_size_log2; /* Log2 of VHPT size. */ ! 389: #endif ! 390: } xen_domctl_arch_setup_t; ! 391: DEFINE_XEN_GUEST_HANDLE(xen_domctl_arch_setup_t); ! 392: ! 393: ! 394: #define XEN_DOMCTL_settimeoffset 24 ! 395: struct xen_domctl_settimeoffset { ! 396: int32_t time_offset_seconds; /* applied to domain wallclock time */ ! 397: }; ! 398: typedef struct xen_domctl_settimeoffset xen_domctl_settimeoffset_t; ! 399: DEFINE_XEN_GUEST_HANDLE(xen_domctl_settimeoffset_t); ! 400: ! 401: ! 402: #define XEN_DOMCTL_gethvmcontext 33 ! 403: #define XEN_DOMCTL_sethvmcontext 34 ! 404: typedef struct xen_domctl_hvmcontext { ! 405: uint32_t size; /* IN/OUT: size of buffer / bytes filled */ ! 406: XEN_GUEST_HANDLE_64(uint8) buffer; /* IN/OUT: data, or call ! 407: * gethvmcontext with NULL ! 408: * buffer to get size req'd */ ! 409: } xen_domctl_hvmcontext_t; ! 410: DEFINE_XEN_GUEST_HANDLE(xen_domctl_hvmcontext_t); ! 411: ! 412: ! 413: #define XEN_DOMCTL_set_address_size 35 ! 414: #define XEN_DOMCTL_get_address_size 36 ! 415: typedef struct xen_domctl_address_size { ! 416: uint32_t size; ! 417: } xen_domctl_address_size_t; ! 418: DEFINE_XEN_GUEST_HANDLE(xen_domctl_address_size_t); ! 419: ! 420: ! 421: #define XEN_DOMCTL_real_mode_area 26 ! 422: struct xen_domctl_real_mode_area { ! 423: uint32_t log; /* log2 of Real Mode Area size */ ! 424: }; ! 425: typedef struct xen_domctl_real_mode_area xen_domctl_real_mode_area_t; ! 426: DEFINE_XEN_GUEST_HANDLE(xen_domctl_real_mode_area_t); ! 427: ! 428: ! 429: #define XEN_DOMCTL_sendtrigger 28 ! 430: #define XEN_DOMCTL_SENDTRIGGER_NMI 0 ! 431: #define XEN_DOMCTL_SENDTRIGGER_RESET 1 ! 432: #define XEN_DOMCTL_SENDTRIGGER_INIT 2 ! 433: struct xen_domctl_sendtrigger { ! 434: uint32_t trigger; /* IN */ ! 435: uint32_t vcpu; /* IN */ ! 436: }; ! 437: typedef struct xen_domctl_sendtrigger xen_domctl_sendtrigger_t; ! 438: DEFINE_XEN_GUEST_HANDLE(xen_domctl_sendtrigger_t); ! 439: ! 440: ! 441: /* Assign PCI device to HVM guest. Sets up IOMMU structures. */ ! 442: #define XEN_DOMCTL_assign_device 37 ! 443: #define XEN_DOMCTL_test_assign_device 45 ! 444: #define XEN_DOMCTL_deassign_device 47 ! 445: struct xen_domctl_assign_device { ! 446: uint32_t machine_bdf; /* machine PCI ID of assigned device */ ! 447: }; ! 448: typedef struct xen_domctl_assign_device xen_domctl_assign_device_t; ! 449: DEFINE_XEN_GUEST_HANDLE(xen_domctl_assign_device_t); ! 450: ! 451: /* Retrieve sibling devices infomation of machine_bdf */ ! 452: #define XEN_DOMCTL_get_device_group 50 ! 453: struct xen_domctl_get_device_group { ! 454: uint32_t machine_bdf; /* IN */ ! 455: uint32_t max_sdevs; /* IN */ ! 456: uint32_t num_sdevs; /* OUT */ ! 457: XEN_GUEST_HANDLE_64(uint32) sdev_array; /* OUT */ ! 458: }; ! 459: typedef struct xen_domctl_get_device_group xen_domctl_get_device_group_t; ! 460: DEFINE_XEN_GUEST_HANDLE(xen_domctl_get_device_group_t); ! 461: ! 462: /* Pass-through interrupts: bind real irq -> hvm devfn. */ ! 463: #define XEN_DOMCTL_bind_pt_irq 38 ! 464: #define XEN_DOMCTL_unbind_pt_irq 48 ! 465: typedef enum pt_irq_type_e { ! 466: PT_IRQ_TYPE_PCI, ! 467: PT_IRQ_TYPE_ISA, ! 468: PT_IRQ_TYPE_MSI, ! 469: } pt_irq_type_t; ! 470: struct xen_domctl_bind_pt_irq { ! 471: uint32_t machine_irq; ! 472: pt_irq_type_t irq_type; ! 473: uint32_t hvm_domid; ! 474: ! 475: union { ! 476: struct { ! 477: uint8_t isa_irq; ! 478: } isa; ! 479: struct { ! 480: uint8_t bus; ! 481: uint8_t device; ! 482: uint8_t intx; ! 483: } pci; ! 484: struct { ! 485: uint8_t gvec; ! 486: uint32_t gflags; ! 487: } msi; ! 488: } u; ! 489: }; ! 490: typedef struct xen_domctl_bind_pt_irq xen_domctl_bind_pt_irq_t; ! 491: DEFINE_XEN_GUEST_HANDLE(xen_domctl_bind_pt_irq_t); ! 492: ! 493: ! 494: /* Bind machine I/O address range -> HVM address range. */ ! 495: #define XEN_DOMCTL_memory_mapping 39 ! 496: #define DPCI_ADD_MAPPING 1 ! 497: #define DPCI_REMOVE_MAPPING 0 ! 498: struct xen_domctl_memory_mapping { ! 499: uint64_aligned_t first_gfn; /* first page (hvm guest phys page) in range */ ! 500: uint64_aligned_t first_mfn; /* first page (machine page) in range */ ! 501: uint64_aligned_t nr_mfns; /* number of pages in range (>0) */ ! 502: uint32_t add_mapping; /* add or remove mapping */ ! 503: uint32_t padding; /* padding for 64-bit aligned structure */ ! 504: }; ! 505: typedef struct xen_domctl_memory_mapping xen_domctl_memory_mapping_t; ! 506: DEFINE_XEN_GUEST_HANDLE(xen_domctl_memory_mapping_t); ! 507: ! 508: ! 509: /* Bind machine I/O port range -> HVM I/O port range. */ ! 510: #define XEN_DOMCTL_ioport_mapping 40 ! 511: struct xen_domctl_ioport_mapping { ! 512: uint32_t first_gport; /* first guest IO port*/ ! 513: uint32_t first_mport; /* first machine IO port */ ! 514: uint32_t nr_ports; /* size of port range */ ! 515: uint32_t add_mapping; /* add or remove mapping */ ! 516: }; ! 517: typedef struct xen_domctl_ioport_mapping xen_domctl_ioport_mapping_t; ! 518: DEFINE_XEN_GUEST_HANDLE(xen_domctl_ioport_mapping_t); ! 519: ! 520: ! 521: /* ! 522: * Pin caching type of RAM space for x86 HVM domU. ! 523: */ ! 524: #define XEN_DOMCTL_pin_mem_cacheattr 41 ! 525: /* Caching types: these happen to be the same as x86 MTRR/PAT type codes. */ ! 526: #define XEN_DOMCTL_MEM_CACHEATTR_UC 0 ! 527: #define XEN_DOMCTL_MEM_CACHEATTR_WC 1 ! 528: #define XEN_DOMCTL_MEM_CACHEATTR_WT 4 ! 529: #define XEN_DOMCTL_MEM_CACHEATTR_WP 5 ! 530: #define XEN_DOMCTL_MEM_CACHEATTR_WB 6 ! 531: #define XEN_DOMCTL_MEM_CACHEATTR_UCM 7 ! 532: struct xen_domctl_pin_mem_cacheattr { ! 533: uint64_aligned_t start, end; ! 534: unsigned int type; /* XEN_DOMCTL_MEM_CACHEATTR_* */ ! 535: }; ! 536: typedef struct xen_domctl_pin_mem_cacheattr xen_domctl_pin_mem_cacheattr_t; ! 537: DEFINE_XEN_GUEST_HANDLE(xen_domctl_pin_mem_cacheattr_t); ! 538: ! 539: ! 540: #define XEN_DOMCTL_set_ext_vcpucontext 42 ! 541: #define XEN_DOMCTL_get_ext_vcpucontext 43 ! 542: struct xen_domctl_ext_vcpucontext { ! 543: /* IN: VCPU that this call applies to. */ ! 544: uint32_t vcpu; ! 545: /* ! 546: * SET: Size of struct (IN) ! 547: * GET: Size of struct (OUT) ! 548: */ ! 549: uint32_t size; ! 550: #if defined(__i386__) || defined(__x86_64__) ! 551: /* SYSCALL from 32-bit mode and SYSENTER callback information. */ ! 552: /* NB. SYSCALL from 64-bit mode is contained in vcpu_guest_context_t */ ! 553: uint64_aligned_t syscall32_callback_eip; ! 554: uint64_aligned_t sysenter_callback_eip; ! 555: uint16_t syscall32_callback_cs; ! 556: uint16_t sysenter_callback_cs; ! 557: uint8_t syscall32_disables_events; ! 558: uint8_t sysenter_disables_events; ! 559: #endif ! 560: }; ! 561: typedef struct xen_domctl_ext_vcpucontext xen_domctl_ext_vcpucontext_t; ! 562: DEFINE_XEN_GUEST_HANDLE(xen_domctl_ext_vcpucontext_t); ! 563: ! 564: /* ! 565: * Set optimizaton features for a domain ! 566: */ ! 567: #define XEN_DOMCTL_set_opt_feature 44 ! 568: struct xen_domctl_set_opt_feature { ! 569: #if defined(__ia64__) ! 570: struct xen_ia64_opt_feature optf; ! 571: #else ! 572: /* Make struct non-empty: do not depend on this field name! */ ! 573: uint64_t dummy; ! 574: #endif ! 575: }; ! 576: typedef struct xen_domctl_set_opt_feature xen_domctl_set_opt_feature_t; ! 577: DEFINE_XEN_GUEST_HANDLE(xen_domctl_set_opt_feature_t); ! 578: ! 579: /* ! 580: * Set the target domain for a domain ! 581: */ ! 582: #define XEN_DOMCTL_set_target 46 ! 583: struct xen_domctl_set_target { ! 584: domid_t target; ! 585: }; ! 586: typedef struct xen_domctl_set_target xen_domctl_set_target_t; ! 587: DEFINE_XEN_GUEST_HANDLE(xen_domctl_set_target_t); ! 588: ! 589: #if defined(__i386__) || defined(__x86_64__) ! 590: # define XEN_CPUID_INPUT_UNUSED 0xFFFFFFFF ! 591: # define XEN_DOMCTL_set_cpuid 49 ! 592: struct xen_domctl_cpuid { ! 593: unsigned int input[2]; ! 594: unsigned int eax; ! 595: unsigned int ebx; ! 596: unsigned int ecx; ! 597: unsigned int edx; ! 598: }; ! 599: typedef struct xen_domctl_cpuid xen_domctl_cpuid_t; ! 600: DEFINE_XEN_GUEST_HANDLE(xen_domctl_cpuid_t); ! 601: #endif ! 602: ! 603: #define XEN_DOMCTL_subscribe 29 ! 604: struct xen_domctl_subscribe { ! 605: uint32_t port; /* IN */ ! 606: }; ! 607: typedef struct xen_domctl_subscribe xen_domctl_subscribe_t; ! 608: DEFINE_XEN_GUEST_HANDLE(xen_domctl_subscribe_t); ! 609: ! 610: /* ! 611: * Define the maximum machine address size which should be allocated ! 612: * to a guest. ! 613: */ ! 614: #define XEN_DOMCTL_set_machine_address_size 51 ! 615: #define XEN_DOMCTL_get_machine_address_size 52 ! 616: ! 617: /* ! 618: * Do not inject spurious page faults into this domain. ! 619: */ ! 620: #define XEN_DOMCTL_suppress_spurious_page_faults 53 ! 621: ! 622: struct xen_domctl { ! 623: uint32_t cmd; ! 624: uint32_t interface_version; /* XEN_DOMCTL_INTERFACE_VERSION */ ! 625: domid_t domain; ! 626: union { ! 627: struct xen_domctl_createdomain createdomain; ! 628: struct xen_domctl_getdomaininfo getdomaininfo; ! 629: struct xen_domctl_getmemlist getmemlist; ! 630: struct xen_domctl_getpageframeinfo getpageframeinfo; ! 631: struct xen_domctl_getpageframeinfo2 getpageframeinfo2; ! 632: struct xen_domctl_vcpuaffinity vcpuaffinity; ! 633: struct xen_domctl_shadow_op shadow_op; ! 634: struct xen_domctl_max_mem max_mem; ! 635: struct xen_domctl_vcpucontext vcpucontext; ! 636: struct xen_domctl_getvcpuinfo getvcpuinfo; ! 637: struct xen_domctl_max_vcpus max_vcpus; ! 638: struct xen_domctl_scheduler_op scheduler_op; ! 639: struct xen_domctl_setdomainhandle setdomainhandle; ! 640: struct xen_domctl_setdebugging setdebugging; ! 641: struct xen_domctl_irq_permission irq_permission; ! 642: struct xen_domctl_iomem_permission iomem_permission; ! 643: struct xen_domctl_ioport_permission ioport_permission; ! 644: struct xen_domctl_hypercall_init hypercall_init; ! 645: struct xen_domctl_arch_setup arch_setup; ! 646: struct xen_domctl_settimeoffset settimeoffset; ! 647: struct xen_domctl_real_mode_area real_mode_area; ! 648: struct xen_domctl_hvmcontext hvmcontext; ! 649: struct xen_domctl_address_size address_size; ! 650: struct xen_domctl_sendtrigger sendtrigger; ! 651: struct xen_domctl_get_device_group get_device_group; ! 652: struct xen_domctl_assign_device assign_device; ! 653: struct xen_domctl_bind_pt_irq bind_pt_irq; ! 654: struct xen_domctl_memory_mapping memory_mapping; ! 655: struct xen_domctl_ioport_mapping ioport_mapping; ! 656: struct xen_domctl_pin_mem_cacheattr pin_mem_cacheattr; ! 657: struct xen_domctl_ext_vcpucontext ext_vcpucontext; ! 658: struct xen_domctl_set_opt_feature set_opt_feature; ! 659: struct xen_domctl_set_target set_target; ! 660: struct xen_domctl_subscribe subscribe; ! 661: #if defined(__i386__) || defined(__x86_64__) ! 662: struct xen_domctl_cpuid cpuid; ! 663: #endif ! 664: uint8_t pad[128]; ! 665: } u; ! 666: }; ! 667: typedef struct xen_domctl xen_domctl_t; ! 668: DEFINE_XEN_GUEST_HANDLE(xen_domctl_t); ! 669: ! 670: #endif /* __XEN_PUBLIC_DOMCTL_H__ */ ! 671: ! 672: /* ! 673: * Local variables: ! 674: * mode: C ! 675: * c-set-style: "BSD" ! 676: * c-basic-offset: 4 ! 677: * tab-width: 4 ! 678: * indent-tabs-mode: nil ! 679: * End: ! 680: */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.