Annotation of Gnu-Mach/xen/public/domctl.h, revision 1.1.1.1

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:  */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.