Home | History | Annotate | Download | only in vki
      1 /*
      2    This file is part of Valgrind, a dynamic binary instrumentation
      3    framework.
      4 
      5    Copyright (C) 2012-2015 Citrix
      6 
      7    This program is free software; you can redistribute it and/or
      8    modify it under the terms of the GNU General Public License as
      9    published by the Free Software Foundation; either version 2 of the
     10    License, or (at your option) any later version.
     11 
     12    This program is distributed in the hope that it will be useful, but
     13    WITHOUT ANY WARRANTY; without even the implied warranty of
     14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     15    General Public License for more details.
     16 
     17    You should have received a copy of the GNU General Public License
     18    along with this program; if not, write to the Free Software
     19    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
     20    02111-1307, USA.
     21 
     22    The GNU General Public License is contained in the file COPYING.
     23 */
     24 
     25 /* Contributed by Andrew Cooper <andrew.cooper3 (at) citrix.com>
     26    and Ian Campbell <ian.campbell (at) citrix.com> */
     27 
     28 #ifndef __VKI_XEN_DOMCTL_H
     29 #define __VKI_XEN_DOMCTL_H
     30 
     31 /*
     32  * The domctl interface is versioned via the interface_version
     33  * field. This structures in this header supports domctl interfaces:
     34  *
     35  * - 0x00000007: Xen 4.1
     36  * - 0x00000008: Xen 4.2
     37  * - 0x00000009: Xen 4.3 & 4.4
     38  * - 0x0000000a: Xen 4.5
     39  *
     40  * When adding a new subop be sure to include the variants used by all
     41  * of the above, both here and in syswrap-xen.c
     42  *
     43  * Structs which are identical in all supported versions have no
     44  * version suffix. Structs which do differ are defined multiple times
     45  * and use the suffix of the latest version to contain that particular
     46  * variant.
     47  */
     48 
     49 #define VKI_XEN_DOMCTL_createdomain                   1
     50 #define VKI_XEN_DOMCTL_destroydomain                  2
     51 #define VKI_XEN_DOMCTL_pausedomain                    3
     52 #define VKI_XEN_DOMCTL_unpausedomain                  4
     53 #define VKI_XEN_DOMCTL_getdomaininfo                  5
     54 #define VKI_XEN_DOMCTL_getmemlist                     6
     55 #define VKI_XEN_DOMCTL_getpageframeinfo               7
     56 #define VKI_XEN_DOMCTL_getpageframeinfo2              8
     57 #define VKI_XEN_DOMCTL_setvcpuaffinity                9
     58 #define VKI_XEN_DOMCTL_shadow_op                     10
     59 #define VKI_XEN_DOMCTL_max_mem                       11
     60 #define VKI_XEN_DOMCTL_setvcpucontext                12
     61 #define VKI_XEN_DOMCTL_getvcpucontext                13
     62 #define VKI_XEN_DOMCTL_getvcpuinfo                   14
     63 #define VKI_XEN_DOMCTL_max_vcpus                     15
     64 #define VKI_XEN_DOMCTL_scheduler_op                  16
     65 #define VKI_XEN_DOMCTL_setdomainhandle               17
     66 #define VKI_XEN_DOMCTL_setdebugging                  18
     67 #define VKI_XEN_DOMCTL_irq_permission                19
     68 #define VKI_XEN_DOMCTL_iomem_permission              20
     69 #define VKI_XEN_DOMCTL_ioport_permission             21
     70 #define VKI_XEN_DOMCTL_hypercall_init                22
     71 #define VKI_XEN_DOMCTL_arch_setup                    23
     72 #define VKI_XEN_DOMCTL_settimeoffset                 24
     73 #define VKI_XEN_DOMCTL_getvcpuaffinity               25
     74 #define VKI_XEN_DOMCTL_real_mode_area                26
     75 #define VKI_XEN_DOMCTL_resumedomain                  27
     76 #define VKI_XEN_DOMCTL_sendtrigger                   28
     77 #define VKI_XEN_DOMCTL_subscribe                     29
     78 #define VKI_XEN_DOMCTL_gethvmcontext                 33
     79 #define VKI_XEN_DOMCTL_sethvmcontext                 34
     80 #define VKI_XEN_DOMCTL_set_address_size              35
     81 #define VKI_XEN_DOMCTL_get_address_size              36
     82 #define VKI_XEN_DOMCTL_assign_device                 37
     83 #define VKI_XEN_DOMCTL_bind_pt_irq                   38
     84 #define VKI_XEN_DOMCTL_memory_mapping                39
     85 #define VKI_XEN_DOMCTL_ioport_mapping                40
     86 #define VKI_XEN_DOMCTL_pin_mem_cacheattr             41
     87 #define VKI_XEN_DOMCTL_set_ext_vcpucontext           42
     88 #define VKI_XEN_DOMCTL_get_ext_vcpucontext           43
     89 #define VKI_XEN_DOMCTL_set_opt_feature               44 /*Obsolete IA64 only */
     90 #define VKI_XEN_DOMCTL_test_assign_device            45
     91 #define VKI_XEN_DOMCTL_set_target                    46
     92 #define VKI_XEN_DOMCTL_deassign_device               47
     93 #define VKI_XEN_DOMCTL_unbind_pt_irq                 48
     94 #define VKI_XEN_DOMCTL_set_cpuid                     49
     95 #define VKI_XEN_DOMCTL_get_device_group              50
     96 #define VKI_XEN_DOMCTL_set_machine_address_size      51
     97 #define VKI_XEN_DOMCTL_get_machine_address_size      52
     98 #define VKI_XEN_DOMCTL_suppress_spurious_page_faults 53
     99 #define VKI_XEN_DOMCTL_debug_op                      54
    100 #define VKI_XEN_DOMCTL_gethvmcontext_partial         55
    101 #define VKI_XEN_DOMCTL_mem_event_op                  56
    102 #define VKI_XEN_DOMCTL_mem_sharing_op                57
    103 #define VKI_XEN_DOMCTL_disable_migrate               58
    104 #define VKI_XEN_DOMCTL_gettscinfo                    59
    105 #define VKI_XEN_DOMCTL_settscinfo                    60
    106 #define VKI_XEN_DOMCTL_getpageframeinfo3             61
    107 #define VKI_XEN_DOMCTL_setvcpuextstate               62
    108 #define VKI_XEN_DOMCTL_getvcpuextstate               63
    109 #define VKI_XEN_DOMCTL_set_access_required           64
    110 #define VKI_XEN_DOMCTL_audit_p2m                     65
    111 #define VKI_XEN_DOMCTL_set_virq_handler              66
    112 #define VKI_XEN_DOMCTL_set_broken_page_p2m           67
    113 #define VKI_XEN_DOMCTL_setnodeaffinity               68
    114 #define VKI_XEN_DOMCTL_getnodeaffinity               69
    115 #define VKI_XEN_DOMCTL_set_max_evtchn                70
    116 #define VKI_XEN_DOMCTL_cacheflush                    71
    117 #define VKI_XEN_DOMCTL_get_vcpu_msrs                 72
    118 #define VKI_XEN_DOMCTL_set_vcpu_msrs                 73
    119 #define VKI_XEN_DOMCTL_gdbsx_guestmemio            1000
    120 #define VKI_XEN_DOMCTL_gdbsx_pausevcpu             1001
    121 #define VKI_XEN_DOMCTL_gdbsx_unpausevcpu           1002
    122 #define VKI_XEN_DOMCTL_gdbsx_domstatus             1003
    123 
    124 struct vki_xen_domctl_createdomain {
    125     /* IN parameters */
    126     vki_uint32_t ssidref;
    127     vki_xen_domain_handle_t handle;
    128     vki_uint32_t flags;
    129 };
    130 
    131 struct vki_xen_domctl_getdomaininfo_00000007 {
    132     /* OUT variables. */
    133     vki_xen_domid_t  domain;
    134     vki_uint32_t flags;
    135     vki_xen_uint64_aligned_t tot_pages;
    136     vki_xen_uint64_aligned_t max_pages;
    137     vki_xen_uint64_aligned_t shr_pages;
    138     vki_xen_uint64_aligned_t paged_pages;
    139     vki_xen_uint64_aligned_t shared_info_frame;
    140     vki_xen_uint64_aligned_t cpu_time;
    141     vki_uint32_t nr_online_vcpus;
    142     vki_uint32_t max_vcpu_id;
    143     vki_uint32_t ssidref;
    144     vki_xen_domain_handle_t handle;
    145     vki_uint32_t cpupool;
    146 };
    147 typedef struct vki_xen_domctl_getdomaininfo_00000007 vki_xen_domctl_getdomaininfo_00000007_t;
    148 DEFINE_VKI_XEN_GUEST_HANDLE(vki_xen_domctl_getdomaininfo_00000007_t);
    149 
    150 struct vki_xen_domctl_getdomaininfo_00000008 {
    151     /* OUT variables. */
    152     vki_xen_domid_t  domain;
    153     vki_uint32_t flags;
    154     vki_xen_uint64_aligned_t tot_pages;
    155     vki_xen_uint64_aligned_t max_pages;
    156     vki_xen_uint64_aligned_t shr_pages;
    157     vki_xen_uint64_aligned_t paged_pages;
    158     vki_xen_uint64_aligned_t shared_info_frame;
    159     vki_xen_uint64_aligned_t cpu_time;
    160     vki_uint32_t nr_online_vcpus;
    161     vki_uint32_t max_vcpu_id;
    162     vki_uint32_t ssidref;
    163     vki_xen_domain_handle_t handle;
    164     vki_uint32_t cpupool;
    165 };
    166 typedef struct vki_xen_domctl_getdomaininfo_00000008 vki_xen_domctl_getdomaininfo_00000008_t;
    167 DEFINE_VKI_XEN_GUEST_HANDLE(vki_xen_domctl_getdomaininfo_00000008_t);
    168 
    169 struct vki_xen_domctl_getdomaininfo_00000009 {
    170     /* OUT variables. */
    171     vki_xen_domid_t  domain;
    172     vki_uint32_t flags;
    173     vki_xen_uint64_aligned_t tot_pages;
    174     vki_xen_uint64_aligned_t max_pages;
    175     vki_xen_uint64_aligned_t outstanding_pages;
    176     vki_xen_uint64_aligned_t shr_pages;
    177     vki_xen_uint64_aligned_t paged_pages;
    178     vki_xen_uint64_aligned_t shared_info_frame;
    179     vki_xen_uint64_aligned_t cpu_time;
    180     vki_uint32_t nr_online_vcpus;
    181     vki_uint32_t max_vcpu_id;
    182     vki_uint32_t ssidref;
    183     vki_xen_domain_handle_t handle;
    184     vki_uint32_t cpupool;
    185 };
    186 typedef struct vki_xen_domctl_getdomaininfo_00000009 vki_xen_domctl_getdomaininfo_00000009_t;
    187 DEFINE_VKI_XEN_GUEST_HANDLE(vki_xen_domctl_getdomaininfo_00000009_t);
    188 
    189 /* vki_xen_domctl_getdomaininfo_0000000a is the same as 00000009 */
    190 
    191 /* Get/set the NUMA node(s) with which the guest has affinity with. */
    192 /* XEN_DOMCTL_setnodeaffinity */
    193 /* XEN_DOMCTL_getnodeaffinity */
    194 struct vki_xen_domctl_nodeaffinity {
    195     struct vki_xenctl_bitmap nodemap;/* IN */
    196 };
    197 typedef struct vki_xen_domctl_nodeaffinity vki_xen_domctl_nodeaffinity_t;
    198 DEFINE_VKI_XEN_GUEST_HANDLE(vki_xen_domctl_nodeaffinity_t);
    199 
    200 struct vki_xen_domctl_getpageframeinfo3 {
    201     vki_xen_uint64_aligned_t num; /* IN */
    202     VKI_XEN_GUEST_HANDLE_64(vki_xen_pfn_t) array; /* IN/OUT */
    203 };
    204 
    205 struct vki_xen_domctl_vcpuaffinity_00000009 {
    206     vki_uint32_t  vcpu;              /* IN */
    207     struct vki_xenctl_bitmap cpumap; /* IN/OUT */
    208 };
    209 
    210 struct vki_xen_domctl_vcpuaffinity_0000000a {
    211     vki_uint32_t  vcpu;              /* IN */
    212 #define VKI_XEN_VCPUAFFINITY_HARD   (1U<<0)
    213 #define VKI_XEN_VCPUAFFINITY_SOFT   (1U<<1)
    214     vki_uint32_t  flags;              /* IN */
    215     struct vki_xenctl_bitmap cpumap_hard; /* IN/OUT */
    216     struct vki_xenctl_bitmap cpumap_soft; /* IN/OUT */
    217 };
    218 
    219 struct vki_xen_domctl_shadow_op_stats {
    220     vki_uint32_t fault_count;
    221     vki_uint32_t dirty_count;
    222 };
    223 
    224 /* vki_xen_domctl_shadow_op.op is an utter mess for compatibily reasons. */
    225 
    226 struct vki_xen_domctl_shadow_op {
    227     vki_uint32_t op; /* IN */
    228 
    229 #define VKI_XEN_DOMCTL_SHADOW_OP_OFF               0
    230 #define VKI_XEN_DOMCTL_SHADOW_OP_ENABLE           32
    231 #define VKI_XEN_DOMCTL_SHADOW_OP_CLEAN            11
    232 #define VKI_XEN_DOMCTL_SHADOW_OP_PEEK             12
    233 #define VKI_XEN_DOMCTL_SHADOW_OP_GET_ALLOCATION   30
    234 #define VKI_XEN_DOMCTL_SHADOW_OP_SET_ALLOCATION   31
    235 
    236 #define VKI_XEN_DOMCTL_SHADOW_OP_ENABLE_TEST       1
    237 #define VKI_XEN_DOMCTL_SHADOW_OP_ENABLE_LOGDIRTY   2
    238 #define VKI_XEN_DOMCTL_SHADOW_OP_ENABLE_TRANSLATE  3
    239 
    240     vki_uint32_t mode;
    241 
    242 #define XEN_DOMCTL_SHADOW_ENABLE_REFCOUNT  (1 << 1)
    243 #define XEN_DOMCTL_SHADOW_ENABLE_LOG_DIRTY (1 << 2)
    244 #define XEN_DOMCTL_SHADOW_ENABLE_TRANSLATE (1 << 3)
    245 #define XEN_DOMCTL_SHADOW_ENABLE_EXTERNAL  (1 << 4)
    246 
    247     vki_uint32_t mb;
    248     VKI_XEN_GUEST_HANDLE_64(vki_uint8) dirty_bitmap;
    249     vki_xen_uint64_aligned_t pages;
    250     struct vki_xen_domctl_shadow_op_stats stats;
    251 };
    252 
    253 struct vki_xen_domctl_max_mem {
    254     /* IN variables. */
    255     vki_xen_uint64_aligned_t max_memkb;
    256 };
    257 
    258 struct vki_xen_domctl_vcpucontext {
    259     vki_uint32_t              vcpu;                  /* IN */
    260     VKI_XEN_GUEST_HANDLE_64(vki_xen_vcpu_guest_context_t) ctxt; /* IN/OUT */
    261 };
    262 
    263 struct vki_xen_domctl_getvcpuinfo {
    264     /* IN variables. */
    265     vki_uint32_t vcpu;
    266     /* OUT variables. */
    267     vki_uint8_t  online;              /* currently online (not hotplugged)? */
    268     vki_uint8_t  blocked;             /* blocked waiting for an event? */
    269     vki_uint8_t  running;             /* currently scheduled on its CPU? */
    270     vki_xen_uint64_aligned_t cpu_time;/* total cpu time consumed (ns) */
    271     vki_uint32_t cpu;                 /* current mapping   */
    272 };
    273 
    274 struct vki_xen_domctl_scheduler_op {
    275     vki_uint32_t sched_id;  /* VKI_XEN_SCHEDULER_* */
    276 #define VKI_XEN_SCHEDULER_SEDF     4
    277 #define VKI_XEN_SCHEDULER_CREDIT   5
    278 #define VKI_XEN_SCHEDULER_CREDIT2  6
    279 #define VKI_XEN_SCHEDULER_ARINC653 7
    280 #define VKI_XEN_SCHEDULER_RTDS     8
    281     vki_uint32_t cmd;       /* VKI_XEN_DOMCTL_SCHEDOP_* */
    282 #define VKI_XEN_DOMCTL_SCHEDOP_putinfo 0
    283 #define VKI_XEN_DOMCTL_SCHEDOP_getinfo 1
    284     union {
    285         struct xen_domctl_sched_sedf {
    286             vki_xen_uint64_aligned_t period;
    287             vki_xen_uint64_aligned_t slice;
    288             vki_xen_uint64_aligned_t latency;
    289             vki_uint32_t extratime;
    290             vki_uint32_t weight;
    291         } sedf;
    292         struct xen_domctl_sched_credit {
    293             vki_uint16_t weight;
    294             vki_uint16_t cap;
    295         } credit;
    296         struct xen_domctl_sched_credit2 {
    297             vki_uint16_t weight;
    298         } credit2;
    299         struct xen_domctl_sched_rtds {
    300             vki_uint32_t period;
    301             vki_uint32_t budget;
    302         } rtds;
    303     } u;
    304 };
    305 
    306 struct vki_xen_domctl_max_vcpus {
    307     vki_uint32_t max;           /* maximum number of vcpus */
    308 };
    309 
    310 /* XEN_DOMCTL_irq_permission */
    311 struct vki_xen_domctl_irq_permission {
    312     vki_uint8_t pirq;
    313     vki_uint8_t allow_access;    /* flag to specify enable/disable of IRQ access */
    314 };
    315 
    316 struct vki_xen_domctl_iomem_permission {
    317     vki_xen_uint64_aligned_t first_mfn;/* first page (physical page number) in range */
    318     vki_xen_uint64_aligned_t nr_mfns;  /* number of pages in range (>0) */
    319     vki_uint8_t  allow_access;     /* allow (!0) or deny (0) access to range? */
    320 };
    321 
    322 struct vki_xen_domctl_ioport_permission {
    323     vki_uint32_t first_port;              /* IN */
    324     vki_uint32_t nr_ports;                /* IN */
    325     vki_uint8_t  allow_access;            /* IN */
    326 };
    327 
    328 struct vki_xen_domctl_hypercall_init {
    329     vki_xen_uint64_aligned_t  gmfn;           /* GMFN to be initialised */
    330 };
    331 
    332 struct vki_xen_domctl_settimeoffset {
    333     vki_int32_t time_offset_seconds;
    334 };
    335 
    336 struct vki_xen_domctl_cpuid {
    337   vki_uint32_t input[2];
    338   vki_uint32_t eax;
    339   vki_uint32_t ebx;
    340   vki_uint32_t ecx;
    341   vki_uint32_t edx;
    342 };
    343 
    344 struct vki_xen_guest_tsc_info {
    345     vki_uint32_t tsc_mode;
    346     vki_uint32_t gtsc_khz;
    347     vki_uint32_t incarnation;
    348     vki_uint32_t pad;
    349     vki_xen_uint64_aligned_t elapsed_nsec;
    350 };
    351 typedef struct vki_xen_guest_tsc_info vki_xen_guest_tsc_info_t;
    352 DEFINE_VKI_XEN_GUEST_HANDLE(vki_xen_guest_tsc_info_t);
    353 
    354 struct vki_xen_domctl_hvmcontext {
    355     vki_uint32_t size; /* IN/OUT size of buffer */
    356     VKI_XEN_GUEST_HANDLE_64(vki_uint8) buffer; /* IN/OUT */
    357 };
    358 typedef struct vki_xen_domctl_hvmcontext vki_xen_domctl_hvmcontext_t;
    359 DEFINE_VKI_XEN_GUEST_HANDLE(vki_xen_domctl_hvmcontext_t);
    360 
    361 struct vki_xen_domctl_hvmcontext_partial {
    362     vki_uint32_t type; /* IN */
    363     vki_uint32_t instance; /* IN */
    364     VKI_XEN_GUEST_HANDLE_64(vki_uint8) buffer; /* IN/OUT buffer */
    365 };
    366 typedef struct vki_xen_domctl_hvmcontext_partial vki_xen_domctl_hvmcontext_partial_t;
    367 DEFINE_VKI_XEN_GUEST_HANDLE(vki_xen_domctl_hvmcontext_partial_t);
    368 
    369 struct vki_xen_domctl_tsc_info {
    370     VKI_XEN_GUEST_HANDLE_64(vki_xen_guest_tsc_info_t) out_info; /* OUT */
    371     vki_xen_guest_tsc_info_t info; /* IN */
    372 };
    373 
    374 struct vki_xen_domctl_pin_mem_cacheattr {
    375     vki_xen_uint64_aligned_t start, end; /* IN */
    376     vki_uint32_t type;                   /* IN */
    377 };
    378 
    379 struct vki_xen_domctl_ext_vcpucontext_00000008 {
    380     vki_uint32_t             vcpu; /* IN */
    381 
    382     /* IN  for XEN_DOMCTL_set_ext_vcpucontext
    383      * OUT for XEN_DOMCTL_get_ext_vcpucontext */
    384     vki_uint32_t             size;
    385 #if defined(__i386__) || defined(__x86_64__)
    386     vki_xen_uint64_aligned_t syscall32_callback_eip;
    387     vki_xen_uint64_aligned_t sysenter_callback_eip;
    388     vki_uint16_t             syscall32_callback_cs;
    389     vki_uint16_t             sysenter_callback_cs;
    390     vki_uint8_t              syscall32_disables_events;
    391     vki_uint8_t              sysenter_disables_events;
    392     vki_xen_uint64_aligned_t mcg_cap;
    393 #endif
    394 };
    395 
    396 struct vki_xen_domctl_ext_vcpucontext_00000009 {
    397     vki_uint32_t             vcpu; /* IN */
    398 
    399     /* IN  for XEN_DOMCTL_set_ext_vcpucontext
    400      * OUT for XEN_DOMCTL_get_ext_vcpucontext */
    401     vki_uint32_t             size;
    402 #if defined(__i386__) || defined(__x86_64__)
    403     vki_xen_uint64_aligned_t syscall32_callback_eip;
    404     vki_xen_uint64_aligned_t sysenter_callback_eip;
    405     vki_uint16_t             syscall32_callback_cs;
    406     vki_uint16_t             sysenter_callback_cs;
    407     vki_uint8_t              syscall32_disables_events;
    408     vki_uint8_t              sysenter_disables_events;
    409     vki_uint64_t             caps;
    410     vki_uint64_t             mci_ctl2_bank0;
    411     vki_uint64_t             mci_ctl2_bank1;
    412 #endif
    413 };
    414 
    415 /* vki_xen_domctl_ext_vcpucontext_0000000a is the same as 00000009 */
    416 
    417 struct vki_xen_domctl_vcpuextstate {
    418     vki_uint32_t         vcpu;
    419     vki_xen_uint64_aligned_t         xfeature_mask;
    420     vki_xen_uint64_aligned_t         size;
    421     VKI_XEN_GUEST_HANDLE_64(vki_uint64) buffer;
    422 };
    423 
    424 struct vki_xen_domctl_address_size {
    425     vki_uint32_t size;
    426 };
    427 
    428 struct vki_xen_domctl_assign_device {
    429     vki_uint32_t  machine_sbdf;   /* machine PCI ID of assigned device */
    430 };
    431 
    432 struct vki_xen_domctl_debug_op {
    433     vki_uint32_t op;   /* IN */
    434     vki_uint32_t vcpu; /* IN */
    435 };
    436 typedef struct vki_xen_domctl_debug_op vki_xen_domctl_debug_op_t;
    437 
    438 struct vki_xen_domctl_mem_event_op {
    439     vki_uint32_t op; /* IN */
    440     vki_uint32_t mode; /* IN */
    441     vki_uint32_t port; /* OUT */
    442 };
    443 
    444 struct vki_xen_domctl_set_access_required {
    445     vki_uint8_t access_required; /* IN */
    446 };
    447 
    448 struct vki_xen_domctl_set_max_evtchn {
    449     vki_uint32_t max_port;
    450 };
    451 
    452 struct vki_xen_domctl_cacheflush {
    453     /* IN: page range to flush. */
    454     vki_xen_pfn_t start_pfn, nr_pfns;
    455 };
    456 
    457 struct vki_xen_domctl_vcpu_msr {
    458     vki_uint32_t             index;
    459     vki_uint32_t             reserved;
    460     vki_xen_uint64_aligned_t value;
    461 };
    462 typedef struct vki_xen_domctl_vcpu_msr vki_xen_domctl_vcpu_msr_t;
    463 DEFINE_VKI_XEN_GUEST_HANDLE(vki_xen_domctl_vcpu_msr_t);
    464 
    465 struct vki_xen_domctl_vcpu_msrs {
    466     vki_uint32_t vcpu;
    467     vki_uint32_t msr_count;
    468     VKI_XEN_GUEST_HANDLE_64(vki_xen_domctl_vcpu_msr_t) msrs;
    469 };
    470 
    471 struct vki_xen_domctl {
    472     vki_uint32_t cmd;
    473     vki_uint32_t interface_version; /* XEN_DOMCTL_INTERFACE_VERSION */
    474     vki_xen_domid_t  domain;
    475     union {
    476         struct vki_xen_domctl_createdomain      createdomain;
    477         struct vki_xen_domctl_getdomaininfo_00000007 getdomaininfo_00000007;
    478         struct vki_xen_domctl_getdomaininfo_00000008 getdomaininfo_00000008;
    479         struct vki_xen_domctl_getdomaininfo_00000009 getdomaininfo_00000009;
    480         //struct vki_xen_domctl_getmemlist        getmemlist;
    481         //struct vki_xen_domctl_getpageframeinfo  getpageframeinfo;
    482         //struct vki_xen_domctl_getpageframeinfo2 getpageframeinfo2;
    483         struct vki_xen_domctl_getpageframeinfo3 getpageframeinfo3;
    484         struct vki_xen_domctl_nodeaffinity      nodeaffinity;
    485         struct vki_xen_domctl_vcpuaffinity_00000009 vcpuaffinity_00000009;
    486         struct vki_xen_domctl_vcpuaffinity_0000000a vcpuaffinity_0000000a;
    487         struct vki_xen_domctl_shadow_op         shadow_op;
    488         struct vki_xen_domctl_max_mem           max_mem;
    489         struct vki_xen_domctl_vcpucontext       vcpucontext;
    490         struct vki_xen_domctl_getvcpuinfo       getvcpuinfo;
    491         struct vki_xen_domctl_max_vcpus         max_vcpus;
    492         struct vki_xen_domctl_scheduler_op      scheduler_op;
    493         //struct vki_xen_domctl_setdomainhandle   setdomainhandle;
    494         //struct vki_xen_domctl_setdebugging      setdebugging;
    495         struct vki_xen_domctl_irq_permission    irq_permission;
    496         struct vki_xen_domctl_iomem_permission  iomem_permission;
    497         struct vki_xen_domctl_ioport_permission ioport_permission;
    498         struct vki_xen_domctl_hypercall_init    hypercall_init;
    499         //struct vki_xen_domctl_arch_setup        arch_setup;
    500         struct vki_xen_domctl_settimeoffset     settimeoffset;
    501         //struct vki_xen_domctl_disable_migrate   disable_migrate;
    502         struct vki_xen_domctl_tsc_info          tsc_info;
    503         //struct vki_xen_domctl_real_mode_area    real_mode_area;
    504         struct vki_xen_domctl_hvmcontext        hvmcontext;
    505         struct vki_xen_domctl_hvmcontext_partial hvmcontext_partial;
    506         struct vki_xen_domctl_address_size      address_size;
    507         //struct vki_xen_domctl_sendtrigger       sendtrigger;
    508         //struct vki_xen_domctl_get_device_group  get_device_group;
    509         struct vki_xen_domctl_assign_device     assign_device;
    510         //struct vki_xen_domctl_bind_pt_irq       bind_pt_irq;
    511         //struct vki_xen_domctl_memory_mapping    memory_mapping;
    512         //struct vki_xen_domctl_ioport_mapping    ioport_mapping;
    513         struct vki_xen_domctl_pin_mem_cacheattr pin_mem_cacheattr;
    514         struct vki_xen_domctl_ext_vcpucontext_00000008 ext_vcpucontext_00000008;
    515         struct vki_xen_domctl_ext_vcpucontext_00000009 ext_vcpucontext_00000009;
    516         //struct vki_xen_domctl_set_target        set_target;
    517         //struct vki_xen_domctl_subscribe         subscribe;
    518         struct vki_xen_domctl_debug_op          debug_op;
    519         struct vki_xen_domctl_mem_event_op      mem_event_op;
    520         //struct vki_xen_domctl_mem_sharing_op    mem_sharing_op;
    521 #if defined(__i386__) || defined(__x86_64__)
    522         struct vki_xen_domctl_cpuid             cpuid;
    523         struct vki_xen_domctl_vcpuextstate      vcpuextstate;
    524         struct vki_xen_domctl_vcpu_msrs         vcpu_msrs;
    525 #endif
    526         struct vki_xen_domctl_set_access_required access_required;
    527         //struct vki_xen_domctl_audit_p2m         audit_p2m;
    528         //struct vki_xen_domctl_set_virq_handler  set_virq_handler;
    529         struct vki_xen_domctl_set_max_evtchn    set_max_evtchn;
    530         //struct vki_xen_domctl_gdbsx_memio       gdbsx_guest_memio;
    531         //struct vki_xen_domctl_set_broken_page_p2m set_broken_page_p2m;
    532         struct vki_xen_domctl_cacheflush        cacheflush;
    533         //struct vki_xen_domctl_gdbsx_pauseunp_vcpu gdbsx_pauseunp_vcpu;
    534         //struct vki_xen_domctl_gdbsx_domstatus   gdbsx_domstatus;
    535         vki_uint8_t                         pad[128];
    536     } u;
    537 };
    538 
    539 #endif // __VKI_XEN_DOMCTL_H
    540 
    541 /*--------------------------------------------------------------------*/
    542 /*--- end                                                          ---*/
    543 /*--------------------------------------------------------------------*/
    544