xref: /onnv-gate/usr/src/uts/common/xen/public/domctl.h (revision 11120:fe619717975a)
15084Sjohnlev /******************************************************************************
25084Sjohnlev  * domctl.h
35084Sjohnlev  *
45084Sjohnlev  * Domain management operations. For use by node control stack.
55084Sjohnlev  *
65084Sjohnlev  * Permission is hereby granted, free of charge, to any person obtaining a copy
75084Sjohnlev  * of this software and associated documentation files (the "Software"), to
85084Sjohnlev  * deal in the Software without restriction, including without limitation the
95084Sjohnlev  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
105084Sjohnlev  * sell copies of the Software, and to permit persons to whom the Software is
115084Sjohnlev  * furnished to do so, subject to the following conditions:
125084Sjohnlev  *
135084Sjohnlev  * The above copyright notice and this permission notice shall be included in
145084Sjohnlev  * all copies or substantial portions of the Software.
155084Sjohnlev  *
165084Sjohnlev  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
175084Sjohnlev  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
185084Sjohnlev  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
195084Sjohnlev  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
205084Sjohnlev  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
215084Sjohnlev  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
225084Sjohnlev  * DEALINGS IN THE SOFTWARE.
235084Sjohnlev  *
245084Sjohnlev  * Copyright (c) 2002-2003, B Dragovic
255084Sjohnlev  * Copyright (c) 2002-2006, K Fraser
265084Sjohnlev  */
275084Sjohnlev 
285084Sjohnlev #ifndef __XEN_PUBLIC_DOMCTL_H__
295084Sjohnlev #define __XEN_PUBLIC_DOMCTL_H__
305084Sjohnlev 
315084Sjohnlev #if !defined(__XEN__) && !defined(__XEN_TOOLS__)
325084Sjohnlev #error "domctl operations are intended for use by node control tools only"
335084Sjohnlev #endif
345084Sjohnlev 
355084Sjohnlev #include "xen.h"
365084Sjohnlev 
376144Srab #define XEN_DOMCTL_INTERFACE_VERSION 0x00000005
385084Sjohnlev 
395084Sjohnlev struct xenctl_cpumap {
4010175SStuart.Maybee@Sun.COM     XEN_GUEST_HANDLE_64(uint8) bitmap;
415084Sjohnlev     uint32_t nr_cpus;
425084Sjohnlev };
435084Sjohnlev 
445084Sjohnlev /*
455084Sjohnlev  * NB. xen_domctl.domain is an IN/OUT parameter for this operation.
465084Sjohnlev  * If it is specified as zero, an id is auto-allocated and returned.
475084Sjohnlev  */
485084Sjohnlev #define XEN_DOMCTL_createdomain       1
495084Sjohnlev struct xen_domctl_createdomain {
505084Sjohnlev     /* IN parameters */
515084Sjohnlev     uint32_t ssidref;
525084Sjohnlev     xen_domain_handle_t handle;
535084Sjohnlev  /* Is this an HVM guest (as opposed to a PV guest)? */
54*11120SMark.Johnson@Sun.COM #define _XEN_DOMCTL_CDF_hvm_guest     0
55*11120SMark.Johnson@Sun.COM #define XEN_DOMCTL_CDF_hvm_guest      (1U<<_XEN_DOMCTL_CDF_hvm_guest)
5610175SStuart.Maybee@Sun.COM  /* Use hardware-assisted paging if available? */
57*11120SMark.Johnson@Sun.COM #define _XEN_DOMCTL_CDF_hap           1
58*11120SMark.Johnson@Sun.COM #define XEN_DOMCTL_CDF_hap            (1U<<_XEN_DOMCTL_CDF_hap)
59*11120SMark.Johnson@Sun.COM  /* Should domain memory integrity be verifed by tboot during Sx? */
60*11120SMark.Johnson@Sun.COM #define _XEN_DOMCTL_CDF_s3_integrity  2
61*11120SMark.Johnson@Sun.COM #define XEN_DOMCTL_CDF_s3_integrity   (1U<<_XEN_DOMCTL_CDF_s3_integrity)
625084Sjohnlev     uint32_t flags;
635084Sjohnlev };
645084Sjohnlev typedef struct xen_domctl_createdomain xen_domctl_createdomain_t;
655084Sjohnlev DEFINE_XEN_GUEST_HANDLE(xen_domctl_createdomain_t);
665084Sjohnlev 
675084Sjohnlev #define XEN_DOMCTL_destroydomain      2
685084Sjohnlev #define XEN_DOMCTL_pausedomain        3
695084Sjohnlev #define XEN_DOMCTL_unpausedomain      4
706144Srab #define XEN_DOMCTL_resumedomain      27
715084Sjohnlev 
725084Sjohnlev #define XEN_DOMCTL_getdomaininfo      5
735084Sjohnlev struct xen_domctl_getdomaininfo {
745084Sjohnlev     /* OUT variables. */
755084Sjohnlev     domid_t  domain;              /* Also echoed in domctl.domain */
765084Sjohnlev  /* Domain is scheduled to die. */
775084Sjohnlev #define _XEN_DOMINF_dying     0
785084Sjohnlev #define XEN_DOMINF_dying      (1U<<_XEN_DOMINF_dying)
795084Sjohnlev  /* Domain is an HVM guest (as opposed to a PV guest). */
805084Sjohnlev #define _XEN_DOMINF_hvm_guest 1
815084Sjohnlev #define XEN_DOMINF_hvm_guest  (1U<<_XEN_DOMINF_hvm_guest)
825084Sjohnlev  /* The guest OS has shut down. */
835084Sjohnlev #define _XEN_DOMINF_shutdown  2
845084Sjohnlev #define XEN_DOMINF_shutdown   (1U<<_XEN_DOMINF_shutdown)
855084Sjohnlev  /* Currently paused by control software. */
865084Sjohnlev #define _XEN_DOMINF_paused    3
875084Sjohnlev #define XEN_DOMINF_paused     (1U<<_XEN_DOMINF_paused)
885084Sjohnlev  /* Currently blocked pending an event.     */
895084Sjohnlev #define _XEN_DOMINF_blocked   4
905084Sjohnlev #define XEN_DOMINF_blocked    (1U<<_XEN_DOMINF_blocked)
915084Sjohnlev  /* Domain is currently running.            */
925084Sjohnlev #define _XEN_DOMINF_running   5
935084Sjohnlev #define XEN_DOMINF_running    (1U<<_XEN_DOMINF_running)
946144Srab  /* Being debugged.  */
956144Srab #define _XEN_DOMINF_debugged  6
966144Srab #define XEN_DOMINF_debugged   (1U<<_XEN_DOMINF_debugged)
975084Sjohnlev  /* XEN_DOMINF_shutdown guest-supplied code.  */
985084Sjohnlev #define XEN_DOMINF_shutdownmask 255
995084Sjohnlev #define XEN_DOMINF_shutdownshift 16
1005084Sjohnlev     uint32_t flags;              /* XEN_DOMINF_* */
1016144Srab     uint64_aligned_t tot_pages;
1026144Srab     uint64_aligned_t max_pages;
1036144Srab     uint64_aligned_t shared_info_frame; /* GMFN of shared_info struct */
1046144Srab     uint64_aligned_t cpu_time;
1055084Sjohnlev     uint32_t nr_online_vcpus;    /* Number of VCPUs currently online. */
1065084Sjohnlev     uint32_t max_vcpu_id;        /* Maximum VCPUID in use by this domain. */
1075084Sjohnlev     uint32_t ssidref;
1085084Sjohnlev     xen_domain_handle_t handle;
1095084Sjohnlev };
1105084Sjohnlev typedef struct xen_domctl_getdomaininfo xen_domctl_getdomaininfo_t;
1115084Sjohnlev DEFINE_XEN_GUEST_HANDLE(xen_domctl_getdomaininfo_t);
1125084Sjohnlev 
1135084Sjohnlev 
1145084Sjohnlev #define XEN_DOMCTL_getmemlist         6
1155084Sjohnlev struct xen_domctl_getmemlist {
1165084Sjohnlev     /* IN variables. */
1175084Sjohnlev     /* Max entries to write to output buffer. */
1186144Srab     uint64_aligned_t max_pfns;
1195084Sjohnlev     /* Start index in guest's page list. */
1206144Srab     uint64_aligned_t start_pfn;
12110175SStuart.Maybee@Sun.COM     XEN_GUEST_HANDLE_64(uint64) buffer;
1225084Sjohnlev     /* OUT variables. */
1236144Srab     uint64_aligned_t num_pfns;
1245084Sjohnlev };
1255084Sjohnlev typedef struct xen_domctl_getmemlist xen_domctl_getmemlist_t;
1265084Sjohnlev DEFINE_XEN_GUEST_HANDLE(xen_domctl_getmemlist_t);
1275084Sjohnlev 
1285084Sjohnlev 
1295084Sjohnlev #define XEN_DOMCTL_getpageframeinfo   7
1305084Sjohnlev 
1315084Sjohnlev #define XEN_DOMCTL_PFINFO_LTAB_SHIFT 28
1326144Srab #define XEN_DOMCTL_PFINFO_NOTAB   (0x0U<<28)
1336144Srab #define XEN_DOMCTL_PFINFO_L1TAB   (0x1U<<28)
1346144Srab #define XEN_DOMCTL_PFINFO_L2TAB   (0x2U<<28)
1356144Srab #define XEN_DOMCTL_PFINFO_L3TAB   (0x3U<<28)
1366144Srab #define XEN_DOMCTL_PFINFO_L4TAB   (0x4U<<28)
1376144Srab #define XEN_DOMCTL_PFINFO_LTABTYPE_MASK (0x7U<<28)
1386144Srab #define XEN_DOMCTL_PFINFO_LPINTAB (0x1U<<31)
1396144Srab #define XEN_DOMCTL_PFINFO_XTAB    (0xfU<<28) /* invalid page */
1406144Srab #define XEN_DOMCTL_PFINFO_LTAB_MASK (0xfU<<28)
1415084Sjohnlev 
1425084Sjohnlev struct xen_domctl_getpageframeinfo {
1435084Sjohnlev     /* IN variables. */
1446144Srab     uint64_aligned_t gmfn; /* GMFN to query */
1455084Sjohnlev     /* OUT variables. */
1465084Sjohnlev     /* Is the page PINNED to a type? */
1475084Sjohnlev     uint32_t type;         /* see above type defs */
1485084Sjohnlev };
1495084Sjohnlev typedef struct xen_domctl_getpageframeinfo xen_domctl_getpageframeinfo_t;
1505084Sjohnlev DEFINE_XEN_GUEST_HANDLE(xen_domctl_getpageframeinfo_t);
1515084Sjohnlev 
1525084Sjohnlev 
1535084Sjohnlev #define XEN_DOMCTL_getpageframeinfo2  8
1545084Sjohnlev struct xen_domctl_getpageframeinfo2 {
1555084Sjohnlev     /* IN variables. */
1566144Srab     uint64_aligned_t num;
1575084Sjohnlev     /* IN/OUT variables. */
15810175SStuart.Maybee@Sun.COM     XEN_GUEST_HANDLE_64(uint32) array;
1595084Sjohnlev };
1605084Sjohnlev typedef struct xen_domctl_getpageframeinfo2 xen_domctl_getpageframeinfo2_t;
1615084Sjohnlev DEFINE_XEN_GUEST_HANDLE(xen_domctl_getpageframeinfo2_t);
1625084Sjohnlev 
1635084Sjohnlev 
1645084Sjohnlev /*
1655084Sjohnlev  * Control shadow pagetables operation
1665084Sjohnlev  */
1675084Sjohnlev #define XEN_DOMCTL_shadow_op         10
1685084Sjohnlev 
1695084Sjohnlev /* Disable shadow mode. */
1705084Sjohnlev #define XEN_DOMCTL_SHADOW_OP_OFF         0
1715084Sjohnlev 
1725084Sjohnlev /* Enable shadow mode (mode contains ORed XEN_DOMCTL_SHADOW_ENABLE_* flags). */
1735084Sjohnlev #define XEN_DOMCTL_SHADOW_OP_ENABLE      32
1745084Sjohnlev 
1755084Sjohnlev /* Log-dirty bitmap operations. */
1765084Sjohnlev  /* Return the bitmap and clean internal copy for next round. */
1775084Sjohnlev #define XEN_DOMCTL_SHADOW_OP_CLEAN       11
1785084Sjohnlev  /* Return the bitmap but do not modify internal copy. */
1795084Sjohnlev #define XEN_DOMCTL_SHADOW_OP_PEEK        12
1805084Sjohnlev 
1815084Sjohnlev /* Memory allocation accessors. */
1825084Sjohnlev #define XEN_DOMCTL_SHADOW_OP_GET_ALLOCATION   30
1835084Sjohnlev #define XEN_DOMCTL_SHADOW_OP_SET_ALLOCATION   31
1845084Sjohnlev 
1855084Sjohnlev /* Legacy enable operations. */
1865084Sjohnlev  /* Equiv. to ENABLE with no mode flags. */
1875084Sjohnlev #define XEN_DOMCTL_SHADOW_OP_ENABLE_TEST       1
1885084Sjohnlev  /* Equiv. to ENABLE with mode flag ENABLE_LOG_DIRTY. */
1895084Sjohnlev #define XEN_DOMCTL_SHADOW_OP_ENABLE_LOGDIRTY   2
1905084Sjohnlev  /* Equiv. to ENABLE with mode flags ENABLE_REFCOUNT and ENABLE_TRANSLATE. */
1915084Sjohnlev #define XEN_DOMCTL_SHADOW_OP_ENABLE_TRANSLATE  3
1925084Sjohnlev 
1935084Sjohnlev /* Mode flags for XEN_DOMCTL_SHADOW_OP_ENABLE. */
1945084Sjohnlev  /*
1955084Sjohnlev   * Shadow pagetables are refcounted: guest does not use explicit mmu
1965084Sjohnlev   * operations nor write-protect its pagetables.
1975084Sjohnlev   */
1985084Sjohnlev #define XEN_DOMCTL_SHADOW_ENABLE_REFCOUNT  (1 << 1)
1995084Sjohnlev  /*
2005084Sjohnlev   * Log pages in a bitmap as they are dirtied.
2015084Sjohnlev   * Used for live relocation to determine which pages must be re-sent.
2025084Sjohnlev   */
2035084Sjohnlev #define XEN_DOMCTL_SHADOW_ENABLE_LOG_DIRTY (1 << 2)
2045084Sjohnlev  /*
2055084Sjohnlev   * Automatically translate GPFNs into MFNs.
2065084Sjohnlev   */
2075084Sjohnlev #define XEN_DOMCTL_SHADOW_ENABLE_TRANSLATE (1 << 3)
2085084Sjohnlev  /*
2095084Sjohnlev   * Xen does not steal virtual address space from the guest.
2105084Sjohnlev   * Requires HVM support.
2115084Sjohnlev   */
2125084Sjohnlev #define XEN_DOMCTL_SHADOW_ENABLE_EXTERNAL  (1 << 4)
2135084Sjohnlev 
2145084Sjohnlev struct xen_domctl_shadow_op_stats {
2155084Sjohnlev     uint32_t fault_count;
2165084Sjohnlev     uint32_t dirty_count;
2175084Sjohnlev };
2185084Sjohnlev typedef struct xen_domctl_shadow_op_stats xen_domctl_shadow_op_stats_t;
2195084Sjohnlev DEFINE_XEN_GUEST_HANDLE(xen_domctl_shadow_op_stats_t);
2205084Sjohnlev 
2215084Sjohnlev struct xen_domctl_shadow_op {
2225084Sjohnlev     /* IN variables. */
2235084Sjohnlev     uint32_t       op;       /* XEN_DOMCTL_SHADOW_OP_* */
2245084Sjohnlev 
2255084Sjohnlev     /* OP_ENABLE */
2265084Sjohnlev     uint32_t       mode;     /* XEN_DOMCTL_SHADOW_ENABLE_* */
2275084Sjohnlev 
2285084Sjohnlev     /* OP_GET_ALLOCATION / OP_SET_ALLOCATION */
2295084Sjohnlev     uint32_t       mb;       /* Shadow memory allocation in MB */
2305084Sjohnlev 
2315084Sjohnlev     /* OP_PEEK / OP_CLEAN */
23210175SStuart.Maybee@Sun.COM     XEN_GUEST_HANDLE_64(uint8) dirty_bitmap;
2336144Srab     uint64_aligned_t pages; /* Size of buffer. Updated with actual size. */
2345084Sjohnlev     struct xen_domctl_shadow_op_stats stats;
2355084Sjohnlev };
2365084Sjohnlev typedef struct xen_domctl_shadow_op xen_domctl_shadow_op_t;
2375084Sjohnlev DEFINE_XEN_GUEST_HANDLE(xen_domctl_shadow_op_t);
2385084Sjohnlev 
2395084Sjohnlev 
2405084Sjohnlev #define XEN_DOMCTL_max_mem           11
2415084Sjohnlev struct xen_domctl_max_mem {
2425084Sjohnlev     /* IN variables. */
2436144Srab     uint64_aligned_t max_memkb;
2445084Sjohnlev };
2455084Sjohnlev typedef struct xen_domctl_max_mem xen_domctl_max_mem_t;
2465084Sjohnlev DEFINE_XEN_GUEST_HANDLE(xen_domctl_max_mem_t);
2475084Sjohnlev 
2485084Sjohnlev 
2495084Sjohnlev #define XEN_DOMCTL_setvcpucontext    12
2505084Sjohnlev #define XEN_DOMCTL_getvcpucontext    13
2515084Sjohnlev struct xen_domctl_vcpucontext {
2525084Sjohnlev     uint32_t              vcpu;                  /* IN */
2536144Srab     XEN_GUEST_HANDLE_64(vcpu_guest_context_t) ctxt; /* IN/OUT */
2545084Sjohnlev };
2555084Sjohnlev typedef struct xen_domctl_vcpucontext xen_domctl_vcpucontext_t;
2565084Sjohnlev DEFINE_XEN_GUEST_HANDLE(xen_domctl_vcpucontext_t);
2575084Sjohnlev 
2585084Sjohnlev 
2595084Sjohnlev #define XEN_DOMCTL_getvcpuinfo       14
2605084Sjohnlev struct xen_domctl_getvcpuinfo {
2615084Sjohnlev     /* IN variables. */
2625084Sjohnlev     uint32_t vcpu;
2635084Sjohnlev     /* OUT variables. */
2645084Sjohnlev     uint8_t  online;                  /* currently online (not hotplugged)? */
2655084Sjohnlev     uint8_t  blocked;                 /* blocked waiting for an event? */
2665084Sjohnlev     uint8_t  running;                 /* currently scheduled on its CPU? */
2676144Srab     uint64_aligned_t cpu_time;        /* total cpu time consumed (ns) */
2685084Sjohnlev     uint32_t cpu;                     /* current mapping   */
2695084Sjohnlev };
2705084Sjohnlev typedef struct xen_domctl_getvcpuinfo xen_domctl_getvcpuinfo_t;
2715084Sjohnlev DEFINE_XEN_GUEST_HANDLE(xen_domctl_getvcpuinfo_t);
2725084Sjohnlev 
2735084Sjohnlev 
2745084Sjohnlev /* Get/set which physical cpus a vcpu can execute on. */
2755084Sjohnlev #define XEN_DOMCTL_setvcpuaffinity    9
2765084Sjohnlev #define XEN_DOMCTL_getvcpuaffinity   25
2775084Sjohnlev struct xen_domctl_vcpuaffinity {
2785084Sjohnlev     uint32_t  vcpu;              /* IN */
2795084Sjohnlev     struct xenctl_cpumap cpumap; /* IN/OUT */
2805084Sjohnlev };
2815084Sjohnlev typedef struct xen_domctl_vcpuaffinity xen_domctl_vcpuaffinity_t;
2825084Sjohnlev DEFINE_XEN_GUEST_HANDLE(xen_domctl_vcpuaffinity_t);
2835084Sjohnlev 
2845084Sjohnlev 
2855084Sjohnlev #define XEN_DOMCTL_max_vcpus         15
2865084Sjohnlev struct xen_domctl_max_vcpus {
2875084Sjohnlev     uint32_t max;           /* maximum number of vcpus */
2885084Sjohnlev };
2895084Sjohnlev typedef struct xen_domctl_max_vcpus xen_domctl_max_vcpus_t;
2905084Sjohnlev DEFINE_XEN_GUEST_HANDLE(xen_domctl_max_vcpus_t);
2915084Sjohnlev 
2925084Sjohnlev 
2935084Sjohnlev #define XEN_DOMCTL_scheduler_op      16
2945084Sjohnlev /* Scheduler types. */
2955084Sjohnlev #define XEN_SCHEDULER_SEDF     4
2965084Sjohnlev #define XEN_SCHEDULER_CREDIT   5
2975084Sjohnlev /* Set or get info? */
2985084Sjohnlev #define XEN_DOMCTL_SCHEDOP_putinfo 0
2995084Sjohnlev #define XEN_DOMCTL_SCHEDOP_getinfo 1
3005084Sjohnlev struct xen_domctl_scheduler_op {
3015084Sjohnlev     uint32_t sched_id;  /* XEN_SCHEDULER_* */
3025084Sjohnlev     uint32_t cmd;       /* XEN_DOMCTL_SCHEDOP_* */
3035084Sjohnlev     union {
3045084Sjohnlev         struct xen_domctl_sched_sedf {
3056144Srab             uint64_aligned_t period;
3066144Srab             uint64_aligned_t slice;
3076144Srab             uint64_aligned_t latency;
3085084Sjohnlev             uint32_t extratime;
3095084Sjohnlev             uint32_t weight;
3105084Sjohnlev         } sedf;
3115084Sjohnlev         struct xen_domctl_sched_credit {
3125084Sjohnlev             uint16_t weight;
3135084Sjohnlev             uint16_t cap;
3145084Sjohnlev         } credit;
3155084Sjohnlev     } u;
3165084Sjohnlev };
3175084Sjohnlev typedef struct xen_domctl_scheduler_op xen_domctl_scheduler_op_t;
3185084Sjohnlev DEFINE_XEN_GUEST_HANDLE(xen_domctl_scheduler_op_t);
3195084Sjohnlev 
3205084Sjohnlev 
3215084Sjohnlev #define XEN_DOMCTL_setdomainhandle   17
3225084Sjohnlev struct xen_domctl_setdomainhandle {
3235084Sjohnlev     xen_domain_handle_t handle;
3245084Sjohnlev };
3255084Sjohnlev typedef struct xen_domctl_setdomainhandle xen_domctl_setdomainhandle_t;
3265084Sjohnlev DEFINE_XEN_GUEST_HANDLE(xen_domctl_setdomainhandle_t);
3275084Sjohnlev 
3285084Sjohnlev 
3295084Sjohnlev #define XEN_DOMCTL_setdebugging      18
3305084Sjohnlev struct xen_domctl_setdebugging {
3315084Sjohnlev     uint8_t enable;
3325084Sjohnlev };
3335084Sjohnlev typedef struct xen_domctl_setdebugging xen_domctl_setdebugging_t;
3345084Sjohnlev DEFINE_XEN_GUEST_HANDLE(xen_domctl_setdebugging_t);
3355084Sjohnlev 
3365084Sjohnlev 
3375084Sjohnlev #define XEN_DOMCTL_irq_permission    19
3385084Sjohnlev struct xen_domctl_irq_permission {
3395084Sjohnlev     uint8_t pirq;
3405084Sjohnlev     uint8_t allow_access;    /* flag to specify enable/disable of IRQ access */
3415084Sjohnlev };
3425084Sjohnlev typedef struct xen_domctl_irq_permission xen_domctl_irq_permission_t;
3435084Sjohnlev DEFINE_XEN_GUEST_HANDLE(xen_domctl_irq_permission_t);
3445084Sjohnlev 
3455084Sjohnlev 
3465084Sjohnlev #define XEN_DOMCTL_iomem_permission  20
3475084Sjohnlev struct xen_domctl_iomem_permission {
3486144Srab     uint64_aligned_t first_mfn;/* first page (physical page number) in range */
3496144Srab     uint64_aligned_t nr_mfns;  /* number of pages in range (>0) */
3506144Srab     uint8_t  allow_access;     /* allow (!0) or deny (0) access to range? */
3515084Sjohnlev };
3525084Sjohnlev typedef struct xen_domctl_iomem_permission xen_domctl_iomem_permission_t;
3535084Sjohnlev DEFINE_XEN_GUEST_HANDLE(xen_domctl_iomem_permission_t);
3545084Sjohnlev 
3555084Sjohnlev 
3565084Sjohnlev #define XEN_DOMCTL_ioport_permission 21
3575084Sjohnlev struct xen_domctl_ioport_permission {
3585084Sjohnlev     uint32_t first_port;              /* first port int range */
3595084Sjohnlev     uint32_t nr_ports;                /* size of port range */
3605084Sjohnlev     uint8_t  allow_access;            /* allow or deny access to range? */
3615084Sjohnlev };
3625084Sjohnlev typedef struct xen_domctl_ioport_permission xen_domctl_ioport_permission_t;
3635084Sjohnlev DEFINE_XEN_GUEST_HANDLE(xen_domctl_ioport_permission_t);
3645084Sjohnlev 
3656144Srab 
3665084Sjohnlev #define XEN_DOMCTL_hypercall_init    22
3675084Sjohnlev struct xen_domctl_hypercall_init {
3686144Srab     uint64_aligned_t  gmfn;           /* GMFN to be initialised */
3695084Sjohnlev };
3705084Sjohnlev typedef struct xen_domctl_hypercall_init xen_domctl_hypercall_init_t;
3715084Sjohnlev DEFINE_XEN_GUEST_HANDLE(xen_domctl_hypercall_init_t);
3725084Sjohnlev 
3736144Srab 
3745084Sjohnlev #define XEN_DOMCTL_arch_setup        23
3755084Sjohnlev #define _XEN_DOMAINSETUP_hvm_guest 0
3765084Sjohnlev #define XEN_DOMAINSETUP_hvm_guest  (1UL<<_XEN_DOMAINSETUP_hvm_guest)
3775084Sjohnlev #define _XEN_DOMAINSETUP_query 1 /* Get parameters (for save)  */
3785084Sjohnlev #define XEN_DOMAINSETUP_query  (1UL<<_XEN_DOMAINSETUP_query)
37910175SStuart.Maybee@Sun.COM #define _XEN_DOMAINSETUP_sioemu_guest 2
38010175SStuart.Maybee@Sun.COM #define XEN_DOMAINSETUP_sioemu_guest  (1UL<<_XEN_DOMAINSETUP_sioemu_guest)
3815084Sjohnlev typedef struct xen_domctl_arch_setup {
3826144Srab     uint64_aligned_t flags;  /* XEN_DOMAINSETUP_* */
3835084Sjohnlev #ifdef __ia64__
3846144Srab     uint64_aligned_t bp;     /* mpaddr of boot param area */
3856144Srab     uint64_aligned_t maxmem; /* Highest memory address for MDT.  */
3866144Srab     uint64_aligned_t xsi_va; /* Xen shared_info area virtual address.  */
3876144Srab     uint32_t hypercall_imm;  /* Break imm for Xen hypercalls.  */
38810175SStuart.Maybee@Sun.COM     int8_t vhpt_size_log2;   /* Log2 of VHPT size. */
3895084Sjohnlev #endif
3905084Sjohnlev } xen_domctl_arch_setup_t;
3915084Sjohnlev DEFINE_XEN_GUEST_HANDLE(xen_domctl_arch_setup_t);
3925084Sjohnlev 
3936144Srab 
3945084Sjohnlev #define XEN_DOMCTL_settimeoffset     24
3955084Sjohnlev struct xen_domctl_settimeoffset {
3965084Sjohnlev     int32_t  time_offset_seconds; /* applied to domain wallclock time */
3975084Sjohnlev };
3985084Sjohnlev typedef struct xen_domctl_settimeoffset xen_domctl_settimeoffset_t;
3995084Sjohnlev DEFINE_XEN_GUEST_HANDLE(xen_domctl_settimeoffset_t);
4005084Sjohnlev 
4016144Srab 
4026144Srab #define XEN_DOMCTL_gethvmcontext     33
4036144Srab #define XEN_DOMCTL_sethvmcontext     34
4046144Srab typedef struct xen_domctl_hvmcontext {
4056144Srab     uint32_t size; /* IN/OUT: size of buffer / bytes filled */
40610175SStuart.Maybee@Sun.COM     XEN_GUEST_HANDLE_64(uint8) buffer; /* IN/OUT: data, or call
40710175SStuart.Maybee@Sun.COM                                         * gethvmcontext with NULL
40810175SStuart.Maybee@Sun.COM                                         * buffer to get size req'd */
4096144Srab } xen_domctl_hvmcontext_t;
4106144Srab DEFINE_XEN_GUEST_HANDLE(xen_domctl_hvmcontext_t);
4116144Srab 
4126144Srab 
4136144Srab #define XEN_DOMCTL_set_address_size  35
4146144Srab #define XEN_DOMCTL_get_address_size  36
4156144Srab typedef struct xen_domctl_address_size {
4166144Srab     uint32_t size;
4176144Srab } xen_domctl_address_size_t;
4186144Srab DEFINE_XEN_GUEST_HANDLE(xen_domctl_address_size_t);
4196144Srab 
4206144Srab 
4216144Srab #define XEN_DOMCTL_real_mode_area    26
4225084Sjohnlev struct xen_domctl_real_mode_area {
4235084Sjohnlev     uint32_t log; /* log2 of Real Mode Area size */
4245084Sjohnlev };
4255084Sjohnlev typedef struct xen_domctl_real_mode_area xen_domctl_real_mode_area_t;
4265084Sjohnlev DEFINE_XEN_GUEST_HANDLE(xen_domctl_real_mode_area_t);
4275084Sjohnlev 
4286144Srab 
4296144Srab #define XEN_DOMCTL_sendtrigger       28
4306144Srab #define XEN_DOMCTL_SENDTRIGGER_NMI    0
4316144Srab #define XEN_DOMCTL_SENDTRIGGER_RESET  1
4326144Srab #define XEN_DOMCTL_SENDTRIGGER_INIT   2
433*11120SMark.Johnson@Sun.COM #define XEN_DOMCTL_SENDTRIGGER_POWER  3
4346144Srab struct xen_domctl_sendtrigger {
4356144Srab     uint32_t  trigger;  /* IN */
4366144Srab     uint32_t  vcpu;     /* IN */
4376144Srab };
4386144Srab typedef struct xen_domctl_sendtrigger xen_domctl_sendtrigger_t;
4396144Srab DEFINE_XEN_GUEST_HANDLE(xen_domctl_sendtrigger_t);
4406144Srab 
44110175SStuart.Maybee@Sun.COM 
44210175SStuart.Maybee@Sun.COM /* Assign PCI device to HVM guest. Sets up IOMMU structures. */
44310175SStuart.Maybee@Sun.COM #define XEN_DOMCTL_assign_device      37
44410175SStuart.Maybee@Sun.COM #define XEN_DOMCTL_test_assign_device 45
44510175SStuart.Maybee@Sun.COM #define XEN_DOMCTL_deassign_device 47
44610175SStuart.Maybee@Sun.COM struct xen_domctl_assign_device {
44710175SStuart.Maybee@Sun.COM     uint32_t  machine_bdf;   /* machine PCI ID of assigned device */
44810175SStuart.Maybee@Sun.COM };
44910175SStuart.Maybee@Sun.COM typedef struct xen_domctl_assign_device xen_domctl_assign_device_t;
45010175SStuart.Maybee@Sun.COM DEFINE_XEN_GUEST_HANDLE(xen_domctl_assign_device_t);
45110175SStuart.Maybee@Sun.COM 
45210175SStuart.Maybee@Sun.COM /* Retrieve sibling devices infomation of machine_bdf */
45310175SStuart.Maybee@Sun.COM #define XEN_DOMCTL_get_device_group 50
45410175SStuart.Maybee@Sun.COM struct xen_domctl_get_device_group {
45510175SStuart.Maybee@Sun.COM     uint32_t  machine_bdf;      /* IN */
45610175SStuart.Maybee@Sun.COM     uint32_t  max_sdevs;        /* IN */
45710175SStuart.Maybee@Sun.COM     uint32_t  num_sdevs;        /* OUT */
45810175SStuart.Maybee@Sun.COM     XEN_GUEST_HANDLE_64(uint32)  sdev_array;   /* OUT */
45910175SStuart.Maybee@Sun.COM };
46010175SStuart.Maybee@Sun.COM typedef struct xen_domctl_get_device_group xen_domctl_get_device_group_t;
46110175SStuart.Maybee@Sun.COM DEFINE_XEN_GUEST_HANDLE(xen_domctl_get_device_group_t);
46210175SStuart.Maybee@Sun.COM 
46310175SStuart.Maybee@Sun.COM /* Pass-through interrupts: bind real irq -> hvm devfn. */
46410175SStuart.Maybee@Sun.COM #define XEN_DOMCTL_bind_pt_irq       38
46510175SStuart.Maybee@Sun.COM #define XEN_DOMCTL_unbind_pt_irq     48
46610175SStuart.Maybee@Sun.COM typedef enum pt_irq_type_e {
46710175SStuart.Maybee@Sun.COM     PT_IRQ_TYPE_PCI,
46810175SStuart.Maybee@Sun.COM     PT_IRQ_TYPE_ISA,
46910175SStuart.Maybee@Sun.COM     PT_IRQ_TYPE_MSI,
470*11120SMark.Johnson@Sun.COM     PT_IRQ_TYPE_MSI_TRANSLATE,
47110175SStuart.Maybee@Sun.COM } pt_irq_type_t;
47210175SStuart.Maybee@Sun.COM struct xen_domctl_bind_pt_irq {
47310175SStuart.Maybee@Sun.COM     uint32_t machine_irq;
47410175SStuart.Maybee@Sun.COM     pt_irq_type_t irq_type;
47510175SStuart.Maybee@Sun.COM     uint32_t hvm_domid;
47610175SStuart.Maybee@Sun.COM 
47710175SStuart.Maybee@Sun.COM     union {
47810175SStuart.Maybee@Sun.COM         struct {
47910175SStuart.Maybee@Sun.COM             uint8_t isa_irq;
48010175SStuart.Maybee@Sun.COM         } isa;
48110175SStuart.Maybee@Sun.COM         struct {
48210175SStuart.Maybee@Sun.COM             uint8_t bus;
48310175SStuart.Maybee@Sun.COM             uint8_t device;
48410175SStuart.Maybee@Sun.COM             uint8_t intx;
48510175SStuart.Maybee@Sun.COM         } pci;
48610175SStuart.Maybee@Sun.COM         struct {
48710175SStuart.Maybee@Sun.COM             uint8_t gvec;
48810175SStuart.Maybee@Sun.COM             uint32_t gflags;
489*11120SMark.Johnson@Sun.COM             uint64_aligned_t gtable;
49010175SStuart.Maybee@Sun.COM         } msi;
49110175SStuart.Maybee@Sun.COM     } u;
49210175SStuart.Maybee@Sun.COM };
49310175SStuart.Maybee@Sun.COM typedef struct xen_domctl_bind_pt_irq xen_domctl_bind_pt_irq_t;
49410175SStuart.Maybee@Sun.COM DEFINE_XEN_GUEST_HANDLE(xen_domctl_bind_pt_irq_t);
49510175SStuart.Maybee@Sun.COM 
49610175SStuart.Maybee@Sun.COM 
49710175SStuart.Maybee@Sun.COM /* Bind machine I/O address range -> HVM address range. */
49810175SStuart.Maybee@Sun.COM #define XEN_DOMCTL_memory_mapping    39
49910175SStuart.Maybee@Sun.COM #define DPCI_ADD_MAPPING         1
50010175SStuart.Maybee@Sun.COM #define DPCI_REMOVE_MAPPING      0
50110175SStuart.Maybee@Sun.COM struct xen_domctl_memory_mapping {
50210175SStuart.Maybee@Sun.COM     uint64_aligned_t first_gfn; /* first page (hvm guest phys page) in range */
50310175SStuart.Maybee@Sun.COM     uint64_aligned_t first_mfn; /* first page (machine page) in range */
50410175SStuart.Maybee@Sun.COM     uint64_aligned_t nr_mfns;   /* number of pages in range (>0) */
50510175SStuart.Maybee@Sun.COM     uint32_t add_mapping;       /* add or remove mapping */
50610175SStuart.Maybee@Sun.COM     uint32_t padding;           /* padding for 64-bit aligned structure */
50710175SStuart.Maybee@Sun.COM };
50810175SStuart.Maybee@Sun.COM typedef struct xen_domctl_memory_mapping xen_domctl_memory_mapping_t;
50910175SStuart.Maybee@Sun.COM DEFINE_XEN_GUEST_HANDLE(xen_domctl_memory_mapping_t);
51010175SStuart.Maybee@Sun.COM 
51110175SStuart.Maybee@Sun.COM 
51210175SStuart.Maybee@Sun.COM /* Bind machine I/O port range -> HVM I/O port range. */
51310175SStuart.Maybee@Sun.COM #define XEN_DOMCTL_ioport_mapping    40
51410175SStuart.Maybee@Sun.COM struct xen_domctl_ioport_mapping {
51510175SStuart.Maybee@Sun.COM     uint32_t first_gport;     /* first guest IO port*/
51610175SStuart.Maybee@Sun.COM     uint32_t first_mport;     /* first machine IO port */
51710175SStuart.Maybee@Sun.COM     uint32_t nr_ports;        /* size of port range */
51810175SStuart.Maybee@Sun.COM     uint32_t add_mapping;     /* add or remove mapping */
51910175SStuart.Maybee@Sun.COM };
52010175SStuart.Maybee@Sun.COM typedef struct xen_domctl_ioport_mapping xen_domctl_ioport_mapping_t;
52110175SStuart.Maybee@Sun.COM DEFINE_XEN_GUEST_HANDLE(xen_domctl_ioport_mapping_t);
52210175SStuart.Maybee@Sun.COM 
52310175SStuart.Maybee@Sun.COM 
52410175SStuart.Maybee@Sun.COM /*
52510175SStuart.Maybee@Sun.COM  * Pin caching type of RAM space for x86 HVM domU.
52610175SStuart.Maybee@Sun.COM  */
52710175SStuart.Maybee@Sun.COM #define XEN_DOMCTL_pin_mem_cacheattr 41
52810175SStuart.Maybee@Sun.COM /* Caching types: these happen to be the same as x86 MTRR/PAT type codes. */
52910175SStuart.Maybee@Sun.COM #define XEN_DOMCTL_MEM_CACHEATTR_UC  0
53010175SStuart.Maybee@Sun.COM #define XEN_DOMCTL_MEM_CACHEATTR_WC  1
53110175SStuart.Maybee@Sun.COM #define XEN_DOMCTL_MEM_CACHEATTR_WT  4
53210175SStuart.Maybee@Sun.COM #define XEN_DOMCTL_MEM_CACHEATTR_WP  5
53310175SStuart.Maybee@Sun.COM #define XEN_DOMCTL_MEM_CACHEATTR_WB  6
53410175SStuart.Maybee@Sun.COM #define XEN_DOMCTL_MEM_CACHEATTR_UCM 7
53510175SStuart.Maybee@Sun.COM struct xen_domctl_pin_mem_cacheattr {
53610175SStuart.Maybee@Sun.COM     uint64_aligned_t start, end;
53710175SStuart.Maybee@Sun.COM     unsigned int type; /* XEN_DOMCTL_MEM_CACHEATTR_* */
53810175SStuart.Maybee@Sun.COM };
53910175SStuart.Maybee@Sun.COM typedef struct xen_domctl_pin_mem_cacheattr xen_domctl_pin_mem_cacheattr_t;
54010175SStuart.Maybee@Sun.COM DEFINE_XEN_GUEST_HANDLE(xen_domctl_pin_mem_cacheattr_t);
54110175SStuart.Maybee@Sun.COM 
54210175SStuart.Maybee@Sun.COM 
54310175SStuart.Maybee@Sun.COM #define XEN_DOMCTL_set_ext_vcpucontext 42
54410175SStuart.Maybee@Sun.COM #define XEN_DOMCTL_get_ext_vcpucontext 43
54510175SStuart.Maybee@Sun.COM struct xen_domctl_ext_vcpucontext {
54610175SStuart.Maybee@Sun.COM     /* IN: VCPU that this call applies to. */
54710175SStuart.Maybee@Sun.COM     uint32_t         vcpu;
54810175SStuart.Maybee@Sun.COM     /*
54910175SStuart.Maybee@Sun.COM      * SET: Size of struct (IN)
55010175SStuart.Maybee@Sun.COM      * GET: Size of struct (OUT)
55110175SStuart.Maybee@Sun.COM      */
55210175SStuart.Maybee@Sun.COM     uint32_t         size;
55310175SStuart.Maybee@Sun.COM #if defined(__i386__) || defined(__x86_64__)
55410175SStuart.Maybee@Sun.COM     /* SYSCALL from 32-bit mode and SYSENTER callback information. */
55510175SStuart.Maybee@Sun.COM     /* NB. SYSCALL from 64-bit mode is contained in vcpu_guest_context_t */
55610175SStuart.Maybee@Sun.COM     uint64_aligned_t syscall32_callback_eip;
55710175SStuart.Maybee@Sun.COM     uint64_aligned_t sysenter_callback_eip;
55810175SStuart.Maybee@Sun.COM     uint16_t         syscall32_callback_cs;
55910175SStuart.Maybee@Sun.COM     uint16_t         sysenter_callback_cs;
56010175SStuart.Maybee@Sun.COM     uint8_t          syscall32_disables_events;
56110175SStuart.Maybee@Sun.COM     uint8_t          sysenter_disables_events;
56210175SStuart.Maybee@Sun.COM #endif
56310175SStuart.Maybee@Sun.COM };
56410175SStuart.Maybee@Sun.COM typedef struct xen_domctl_ext_vcpucontext xen_domctl_ext_vcpucontext_t;
56510175SStuart.Maybee@Sun.COM DEFINE_XEN_GUEST_HANDLE(xen_domctl_ext_vcpucontext_t);
56610175SStuart.Maybee@Sun.COM 
56710175SStuart.Maybee@Sun.COM /*
56810175SStuart.Maybee@Sun.COM  * Set optimizaton features for a domain
56910175SStuart.Maybee@Sun.COM  */
57010175SStuart.Maybee@Sun.COM #define XEN_DOMCTL_set_opt_feature    44
57110175SStuart.Maybee@Sun.COM struct xen_domctl_set_opt_feature {
57210175SStuart.Maybee@Sun.COM #if defined(__ia64__)
57310175SStuart.Maybee@Sun.COM     struct xen_ia64_opt_feature optf;
57410175SStuart.Maybee@Sun.COM #else
57510175SStuart.Maybee@Sun.COM     /* Make struct non-empty: do not depend on this field name! */
57610175SStuart.Maybee@Sun.COM     uint64_t dummy;
57710175SStuart.Maybee@Sun.COM #endif
57810175SStuart.Maybee@Sun.COM };
57910175SStuart.Maybee@Sun.COM typedef struct xen_domctl_set_opt_feature xen_domctl_set_opt_feature_t;
58010175SStuart.Maybee@Sun.COM DEFINE_XEN_GUEST_HANDLE(xen_domctl_set_opt_feature_t);
58110175SStuart.Maybee@Sun.COM 
58210175SStuart.Maybee@Sun.COM /*
58310175SStuart.Maybee@Sun.COM  * Set the target domain for a domain
58410175SStuart.Maybee@Sun.COM  */
58510175SStuart.Maybee@Sun.COM #define XEN_DOMCTL_set_target    46
58610175SStuart.Maybee@Sun.COM struct xen_domctl_set_target {
58710175SStuart.Maybee@Sun.COM     domid_t target;
58810175SStuart.Maybee@Sun.COM };
58910175SStuart.Maybee@Sun.COM typedef struct xen_domctl_set_target xen_domctl_set_target_t;
59010175SStuart.Maybee@Sun.COM DEFINE_XEN_GUEST_HANDLE(xen_domctl_set_target_t);
59110175SStuart.Maybee@Sun.COM 
59210175SStuart.Maybee@Sun.COM #if defined(__i386__) || defined(__x86_64__)
59310175SStuart.Maybee@Sun.COM # define XEN_CPUID_INPUT_UNUSED  0xFFFFFFFF
59410175SStuart.Maybee@Sun.COM # define XEN_DOMCTL_set_cpuid 49
59510175SStuart.Maybee@Sun.COM struct xen_domctl_cpuid {
59610175SStuart.Maybee@Sun.COM   unsigned int  input[2];
59710175SStuart.Maybee@Sun.COM   unsigned int  eax;
59810175SStuart.Maybee@Sun.COM   unsigned int  ebx;
59910175SStuart.Maybee@Sun.COM   unsigned int  ecx;
60010175SStuart.Maybee@Sun.COM   unsigned int  edx;
60110175SStuart.Maybee@Sun.COM };
60210175SStuart.Maybee@Sun.COM typedef struct xen_domctl_cpuid xen_domctl_cpuid_t;
60310175SStuart.Maybee@Sun.COM DEFINE_XEN_GUEST_HANDLE(xen_domctl_cpuid_t);
60410175SStuart.Maybee@Sun.COM #endif
60510175SStuart.Maybee@Sun.COM 
60610175SStuart.Maybee@Sun.COM #define XEN_DOMCTL_subscribe          29
60710175SStuart.Maybee@Sun.COM struct xen_domctl_subscribe {
60810175SStuart.Maybee@Sun.COM     uint32_t port; /* IN */
60910175SStuart.Maybee@Sun.COM };
61010175SStuart.Maybee@Sun.COM typedef struct xen_domctl_subscribe xen_domctl_subscribe_t;
61110175SStuart.Maybee@Sun.COM DEFINE_XEN_GUEST_HANDLE(xen_domctl_subscribe_t);
61210175SStuart.Maybee@Sun.COM 
61310175SStuart.Maybee@Sun.COM /*
61410175SStuart.Maybee@Sun.COM  * Define the maximum machine address size which should be allocated
61510175SStuart.Maybee@Sun.COM  * to a guest.
61610175SStuart.Maybee@Sun.COM  */
61710175SStuart.Maybee@Sun.COM #define XEN_DOMCTL_set_machine_address_size  51
61810175SStuart.Maybee@Sun.COM #define XEN_DOMCTL_get_machine_address_size  52
61910175SStuart.Maybee@Sun.COM 
62010175SStuart.Maybee@Sun.COM /*
62110175SStuart.Maybee@Sun.COM  * Do not inject spurious page faults into this domain.
62210175SStuart.Maybee@Sun.COM  */
62310175SStuart.Maybee@Sun.COM #define XEN_DOMCTL_suppress_spurious_page_faults 53
62410175SStuart.Maybee@Sun.COM 
625*11120SMark.Johnson@Sun.COM #define XEN_DOMCTL_debug_op    54
626*11120SMark.Johnson@Sun.COM #define XEN_DOMCTL_DEBUG_OP_SINGLE_STEP_OFF         0
627*11120SMark.Johnson@Sun.COM #define XEN_DOMCTL_DEBUG_OP_SINGLE_STEP_ON          1
628*11120SMark.Johnson@Sun.COM struct xen_domctl_debug_op {
629*11120SMark.Johnson@Sun.COM     uint32_t op;   /* IN */
630*11120SMark.Johnson@Sun.COM     uint32_t vcpu; /* IN */
631*11120SMark.Johnson@Sun.COM };
632*11120SMark.Johnson@Sun.COM typedef struct xen_domctl_debug_op xen_domctl_debug_op_t;
633*11120SMark.Johnson@Sun.COM DEFINE_XEN_GUEST_HANDLE(xen_domctl_debug_op_t);
634*11120SMark.Johnson@Sun.COM 
635*11120SMark.Johnson@Sun.COM /*
636*11120SMark.Johnson@Sun.COM  * Request a particular record from the HVM context
637*11120SMark.Johnson@Sun.COM  */
638*11120SMark.Johnson@Sun.COM #define XEN_DOMCTL_gethvmcontext_partial   55
639*11120SMark.Johnson@Sun.COM typedef struct xen_domctl_hvmcontext_partial {
640*11120SMark.Johnson@Sun.COM     uint32_t type;                      /* IN: Type of record required */
641*11120SMark.Johnson@Sun.COM     uint32_t instance;                  /* IN: Instance of that type */
642*11120SMark.Johnson@Sun.COM     XEN_GUEST_HANDLE_64(uint8) buffer;  /* OUT: buffer to write record into */
643*11120SMark.Johnson@Sun.COM } xen_domctl_hvmcontext_partial_t;
644*11120SMark.Johnson@Sun.COM DEFINE_XEN_GUEST_HANDLE(xen_domctl_hvmcontext_partial_t);
645*11120SMark.Johnson@Sun.COM 
646*11120SMark.Johnson@Sun.COM 
6475084Sjohnlev struct xen_domctl {
6485084Sjohnlev     uint32_t cmd;
6495084Sjohnlev     uint32_t interface_version; /* XEN_DOMCTL_INTERFACE_VERSION */
6505084Sjohnlev     domid_t  domain;
6515084Sjohnlev     union {
6525084Sjohnlev         struct xen_domctl_createdomain      createdomain;
6535084Sjohnlev         struct xen_domctl_getdomaininfo     getdomaininfo;
6545084Sjohnlev         struct xen_domctl_getmemlist        getmemlist;
6555084Sjohnlev         struct xen_domctl_getpageframeinfo  getpageframeinfo;
6565084Sjohnlev         struct xen_domctl_getpageframeinfo2 getpageframeinfo2;
6575084Sjohnlev         struct xen_domctl_vcpuaffinity      vcpuaffinity;
6585084Sjohnlev         struct xen_domctl_shadow_op         shadow_op;
6595084Sjohnlev         struct xen_domctl_max_mem           max_mem;
6605084Sjohnlev         struct xen_domctl_vcpucontext       vcpucontext;
6615084Sjohnlev         struct xen_domctl_getvcpuinfo       getvcpuinfo;
6625084Sjohnlev         struct xen_domctl_max_vcpus         max_vcpus;
6635084Sjohnlev         struct xen_domctl_scheduler_op      scheduler_op;
6645084Sjohnlev         struct xen_domctl_setdomainhandle   setdomainhandle;
6655084Sjohnlev         struct xen_domctl_setdebugging      setdebugging;
6665084Sjohnlev         struct xen_domctl_irq_permission    irq_permission;
6675084Sjohnlev         struct xen_domctl_iomem_permission  iomem_permission;
6685084Sjohnlev         struct xen_domctl_ioport_permission ioport_permission;
6695084Sjohnlev         struct xen_domctl_hypercall_init    hypercall_init;
6705084Sjohnlev         struct xen_domctl_arch_setup        arch_setup;
6715084Sjohnlev         struct xen_domctl_settimeoffset     settimeoffset;
6725084Sjohnlev         struct xen_domctl_real_mode_area    real_mode_area;
6736144Srab         struct xen_domctl_hvmcontext        hvmcontext;
674*11120SMark.Johnson@Sun.COM         struct xen_domctl_hvmcontext_partial hvmcontext_partial;
6756144Srab         struct xen_domctl_address_size      address_size;
6766144Srab         struct xen_domctl_sendtrigger       sendtrigger;
67710175SStuart.Maybee@Sun.COM         struct xen_domctl_get_device_group  get_device_group;
67810175SStuart.Maybee@Sun.COM         struct xen_domctl_assign_device     assign_device;
67910175SStuart.Maybee@Sun.COM         struct xen_domctl_bind_pt_irq       bind_pt_irq;
68010175SStuart.Maybee@Sun.COM         struct xen_domctl_memory_mapping    memory_mapping;
68110175SStuart.Maybee@Sun.COM         struct xen_domctl_ioport_mapping    ioport_mapping;
68210175SStuart.Maybee@Sun.COM         struct xen_domctl_pin_mem_cacheattr pin_mem_cacheattr;
68310175SStuart.Maybee@Sun.COM         struct xen_domctl_ext_vcpucontext   ext_vcpucontext;
68410175SStuart.Maybee@Sun.COM         struct xen_domctl_set_opt_feature   set_opt_feature;
68510175SStuart.Maybee@Sun.COM         struct xen_domctl_set_target        set_target;
68610175SStuart.Maybee@Sun.COM         struct xen_domctl_subscribe         subscribe;
687*11120SMark.Johnson@Sun.COM         struct xen_domctl_debug_op          debug_op;
68810175SStuart.Maybee@Sun.COM #if defined(__i386__) || defined(__x86_64__)
68910175SStuart.Maybee@Sun.COM         struct xen_domctl_cpuid             cpuid;
69010175SStuart.Maybee@Sun.COM #endif
6915084Sjohnlev         uint8_t                             pad[128];
6925084Sjohnlev     } u;
6935084Sjohnlev };
6945084Sjohnlev typedef struct xen_domctl xen_domctl_t;
6955084Sjohnlev DEFINE_XEN_GUEST_HANDLE(xen_domctl_t);
6965084Sjohnlev 
6975084Sjohnlev #endif /* __XEN_PUBLIC_DOMCTL_H__ */
6985084Sjohnlev 
6995084Sjohnlev /*
7005084Sjohnlev  * Local variables:
7015084Sjohnlev  * mode: C
7025084Sjohnlev  * c-set-style: "BSD"
7035084Sjohnlev  * c-basic-offset: 4
7045084Sjohnlev  * tab-width: 4
7055084Sjohnlev  * indent-tabs-mode: nil
7065084Sjohnlev  * End:
7075084Sjohnlev  */
708