Home | History | Annotate | Download | only in vki
      1 #ifndef __VKI_XEN_SYSCTL_H
      2 #define __VKI_XEN_SYSCTL_H
      3 
      4 /*
      5  * The sysctl interface is versioned via the interface_version
      6  * field. This structures in this header supports sysctl interfaces:
      7  *
      8  * - 0x00000008: Xen 4.1
      9  * - 0x00000009: Xen 4.2
     10  * - 0x0000000a: Xen 4.3 & 4.4
     11  * - 0x0000000b: Xen 4.5
     12  *
     13  * When adding a new subop be sure to include the variants used by all
     14  * of the above, both here and in syswrap-xen.c
     15  *
     16  * Structs which are identical in all supported versions have no
     17  * version suffix. Structs which do differ are defined multiple times
     18  * and use the suffix of the latest version to contain that particular
     19  * variant.
     20  */
     21 
     22 #define VKI_XEN_SYSCTL_readconsole                    1
     23 #define VKI_XEN_SYSCTL_tbuf_op                        2
     24 #define VKI_XEN_SYSCTL_physinfo                       3
     25 #define VKI_XEN_SYSCTL_sched_id                       4
     26 #define VKI_XEN_SYSCTL_perfc_op                       5
     27 #define VKI_XEN_SYSCTL_getdomaininfolist              6
     28 #define VKI_XEN_SYSCTL_debug_keys                     7
     29 #define VKI_XEN_SYSCTL_getcpuinfo                     8
     30 #define VKI_XEN_SYSCTL_availheap                      9
     31 #define VKI_XEN_SYSCTL_get_pmstat                    10
     32 #define VKI_XEN_SYSCTL_cpu_hotplug                   11
     33 #define VKI_XEN_SYSCTL_pm_op                         12
     34 #define VKI_XEN_SYSCTL_page_offline_op               14
     35 #define VKI_XEN_SYSCTL_lockprof_op                   15
     36 #define VKI_XEN_SYSCTL_topologyinfo                  16
     37 #define VKI_XEN_SYSCTL_numainfo                      17
     38 #define VKI_XEN_SYSCTL_cpupool_op                    18
     39 #define VKI_XEN_SYSCTL_scheduler_op                  19
     40 #define VKI_XEN_SYSCTL_coverage_op                   20
     41 
     42 struct vki_xen_sysctl_readconsole {
     43     /* IN */
     44     vki_uint8_t clear;
     45     vki_uint8_t incremental;
     46 
     47     vki_uint8_t pad0, pad1;
     48 
     49     /*
     50      * IN:  Start index for consumption if @incremental.
     51      * OUT: End index after consuming from the console.
     52      */
     53     vki_uint32_t index;
     54     VKI_XEN_GUEST_HANDLE_64(char) buffer; /* IN */
     55 
     56     /*
     57      * IN:  size of buffer.
     58      * OUT: bytes written into buffer.
     59      */
     60     vki_uint32_t count;
     61 };
     62 
     63 struct vki_xen_sysctl_getdomaininfolist_00000008 {
     64     /* IN variables. */
     65     vki_xen_domid_t           first_domain;
     66     vki_uint32_t              max_domains;
     67     VKI_XEN_GUEST_HANDLE_64(vki_xen_domctl_getdomaininfo_00000007_t) buffer;
     68     /* OUT variables. */
     69     vki_uint32_t              num_domains;
     70 };
     71 
     72 struct vki_xen_sysctl_getdomaininfolist_00000009 {
     73     /* IN variables. */
     74     vki_xen_domid_t           first_domain;
     75     vki_uint32_t              max_domains;
     76     VKI_XEN_GUEST_HANDLE_64(vki_xen_domctl_getdomaininfo_00000008_t) buffer;
     77     /* OUT variables. */
     78     vki_uint32_t              num_domains;
     79 };
     80 
     81 struct vki_xen_sysctl_getdomaininfolist_0000000a {
     82     /* IN variables. */
     83     vki_xen_domid_t           first_domain;
     84     vki_uint32_t              max_domains;
     85     VKI_XEN_GUEST_HANDLE_64(vki_xen_domctl_getdomaininfo_00000009_t) buffer;
     86     /* OUT variables. */
     87     vki_uint32_t              num_domains;
     88 };
     89 
     90 /* vki_xen_sysctl_getdomaininfolist_0000000b is the same as 0000000a */
     91 
     92 #define VKI_XEN_SYSCTL_CPUPOOL_OP_CREATE                1  /* C */
     93 #define VKI_XEN_SYSCTL_CPUPOOL_OP_DESTROY               2  /* D */
     94 #define VKI_XEN_SYSCTL_CPUPOOL_OP_INFO                  3  /* I */
     95 #define VKI_XEN_SYSCTL_CPUPOOL_OP_ADDCPU                4  /* A */
     96 #define VKI_XEN_SYSCTL_CPUPOOL_OP_RMCPU                 5  /* R */
     97 #define VKI_XEN_SYSCTL_CPUPOOL_OP_MOVEDOMAIN            6  /* M */
     98 #define VKI_XEN_SYSCTL_CPUPOOL_OP_FREEINFO              7  /* F */
     99 #define VKI_XEN_SYSCTL_CPUPOOL_PAR_ANY     0xFFFFFFFF
    100 struct vki_xen_sysctl_cpupool_op {
    101     vki_uint32_t op;          /* IN */
    102     vki_uint32_t cpupool_id;  /* IN: CDIARM OUT: CI */
    103     vki_uint32_t sched_id;    /* IN: C      OUT: I  */
    104     vki_uint32_t domid;       /* IN: M              */
    105     vki_uint32_t cpu;         /* IN: AR             */
    106     vki_uint32_t n_dom;       /*            OUT: I  */
    107     struct vki_xenctl_bitmap cpumap; /*     OUT: IF */
    108 };
    109 
    110 struct vki_xen_sysctl_debug_keys {
    111     /* IN variables. */
    112     VKI_XEN_GUEST_HANDLE_64(char) keys;
    113     vki_uint32_t nr_keys;
    114 };
    115 
    116 struct vki_xen_sysctl_topologyinfo {
    117     vki_uint32_t max_cpu_index;
    118     VKI_XEN_GUEST_HANDLE_64(vki_uint32) cpu_to_core;
    119     VKI_XEN_GUEST_HANDLE_64(vki_uint32) cpu_to_socket;
    120     VKI_XEN_GUEST_HANDLE_64(vki_uint32) cpu_to_node;
    121 };
    122 
    123 struct vki_xen_sysctl_numainfo {
    124     vki_uint32_t max_node_index;
    125     VKI_XEN_GUEST_HANDLE_64(vki_uint64) node_to_memsize;
    126     VKI_XEN_GUEST_HANDLE_64(vki_uint64) node_to_memfree;
    127     VKI_XEN_GUEST_HANDLE_64(vki_uint32) node_to_node_distance;
    128 };
    129 struct vki_xen_sysctl_physinfo_00000008 {
    130     vki_uint32_t threads_per_core;
    131     vki_uint32_t cores_per_socket;
    132     vki_uint32_t nr_cpus;     /* # CPUs currently online */
    133     vki_uint32_t max_cpu_id;  /* Largest possible CPU ID on this host */
    134     vki_uint32_t nr_nodes;    /* # nodes currently online */
    135     vki_uint32_t max_node_id; /* Largest possible node ID on this host */
    136     vki_uint32_t cpu_khz;
    137     vki_xen_uint64_aligned_t total_pages;
    138     vki_xen_uint64_aligned_t free_pages;
    139     vki_xen_uint64_aligned_t scrub_pages;
    140     vki_uint32_t hw_cap[8];
    141 
    142     vki_uint32_t capabilities;
    143 };
    144 
    145 struct vki_xen_sysctl_physinfo_0000000a {
    146     vki_uint32_t threads_per_core;
    147     vki_uint32_t cores_per_socket;
    148     vki_uint32_t nr_cpus;     /* # CPUs currently online */
    149     vki_uint32_t max_cpu_id;  /* Largest possible CPU ID on this host */
    150     vki_uint32_t nr_nodes;    /* # nodes currently online */
    151     vki_uint32_t max_node_id; /* Largest possible node ID on this host */
    152     vki_uint32_t cpu_khz;
    153     vki_xen_uint64_aligned_t total_pages;
    154     vki_xen_uint64_aligned_t free_pages;
    155     vki_xen_uint64_aligned_t scrub_pages;
    156     vki_xen_uint64_aligned_t outstanding_pages;
    157     vki_uint32_t hw_cap[8];
    158 
    159     vki_uint32_t capabilities;
    160 };
    161 
    162 /* vki_xen_sysctl_physinfo_0000000b is the same as 0000000a */
    163 
    164 struct vki_xen_sysctl_sched_id {
    165     /* OUT variable. */
    166     vki_uint32_t              sched_id;
    167 };
    168 
    169 struct vki_xen_sysctl {
    170     vki_uint32_t cmd;
    171     vki_uint32_t interface_version; /* XEN_SYSCTL_INTERFACE_VERSION */
    172     union {
    173         struct vki_xen_sysctl_readconsole       readconsole;
    174         //struct vki_xen_sysctl_tbuf_op           tbuf_op;
    175         struct vki_xen_sysctl_physinfo_00000008 physinfo_00000008;
    176         struct vki_xen_sysctl_physinfo_0000000a physinfo_0000000a;
    177         struct vki_xen_sysctl_topologyinfo      topologyinfo;
    178         struct vki_xen_sysctl_numainfo          numainfo;
    179         struct vki_xen_sysctl_sched_id          sched_id;
    180         //struct vki_xen_sysctl_perfc_op          perfc_op;
    181         struct vki_xen_sysctl_getdomaininfolist_00000008 getdomaininfolist_00000008;
    182         struct vki_xen_sysctl_getdomaininfolist_00000009 getdomaininfolist_00000009;
    183         struct vki_xen_sysctl_getdomaininfolist_0000000a getdomaininfolist_0000000a;
    184         struct vki_xen_sysctl_debug_keys        debug_keys;
    185         //struct vki_xen_sysctl_getcpuinfo        getcpuinfo;
    186         //struct vki_xen_sysctl_availheap         availheap;
    187         //struct vki_xen_sysctl_get_pmstat        get_pmstat;
    188         //struct vki_xen_sysctl_cpu_hotplug       cpu_hotplug;
    189         //struct vki_xen_sysctl_pm_op             pm_op;
    190         //struct vki_xen_sysctl_page_offline_op   page_offline;
    191         //struct vki_xen_sysctl_lockprof_op       lockprof_op;
    192         struct vki_xen_sysctl_cpupool_op        cpupool_op;
    193         //struct vki_xen_sysctl_scheduler_op      scheduler_op;
    194         //struct vki_xen_sysctl_coverage_op       coverage_op;
    195 
    196         vki_uint8_t                             pad[128];
    197     } u;
    198 };
    199 
    200 #endif // __VKI_XEN_SYSCTL_H
    201 
    202 /*--------------------------------------------------------------------*/
    203 /*--- end                                                          ---*/
    204 /*--------------------------------------------------------------------*/
    205