The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/xen/interface/sysctl.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /******************************************************************************
    2  * sysctl.h
    3  * 
    4  * System 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-2006, K Fraser
   25  */
   26 
   27 #ifndef __XEN_PUBLIC_SYSCTL_H__
   28 #define __XEN_PUBLIC_SYSCTL_H__
   29 
   30 #if !defined(__XEN__) && !defined(__XEN_TOOLS__)
   31 #error "sysctl operations are intended for use by node control tools only"
   32 #endif
   33 
   34 #include "xen.h"
   35 #include "domctl.h"
   36 
   37 #define XEN_SYSCTL_INTERFACE_VERSION 0x00000006
   38 
   39 /*
   40  * Read console content from Xen buffer ring.
   41  */
   42 #define XEN_SYSCTL_readconsole       1
   43 struct xen_sysctl_readconsole {
   44     /* IN: Non-zero -> clear after reading. */
   45     uint8_t clear;
   46     /* IN: Non-zero -> start index specified by @index field. */
   47     uint8_t incremental;
   48     uint8_t pad0, pad1;
   49     /*
   50      * IN:  Start index for consuming from ring buffer (if @incremental);
   51      * OUT: End index after consuming from ring buffer.
   52      */
   53     uint32_t index; 
   54     /* IN: Virtual address to write console data. */
   55     XEN_GUEST_HANDLE_64(char) buffer;
   56     /* IN: Size of buffer; OUT: Bytes written to buffer. */
   57     uint32_t count;
   58 };
   59 typedef struct xen_sysctl_readconsole xen_sysctl_readconsole_t;
   60 DEFINE_XEN_GUEST_HANDLE(xen_sysctl_readconsole_t);
   61 
   62 /* Get trace buffers machine base address */
   63 #define XEN_SYSCTL_tbuf_op           2
   64 struct xen_sysctl_tbuf_op {
   65     /* IN variables */
   66 #define XEN_SYSCTL_TBUFOP_get_info     0
   67 #define XEN_SYSCTL_TBUFOP_set_cpu_mask 1
   68 #define XEN_SYSCTL_TBUFOP_set_evt_mask 2
   69 #define XEN_SYSCTL_TBUFOP_set_size     3
   70 #define XEN_SYSCTL_TBUFOP_enable       4
   71 #define XEN_SYSCTL_TBUFOP_disable      5
   72     uint32_t cmd;
   73     /* IN/OUT variables */
   74     struct xenctl_cpumap cpu_mask;
   75     uint32_t             evt_mask;
   76     /* OUT variables */
   77     uint64_aligned_t buffer_mfn;
   78     uint32_t size;
   79 };
   80 typedef struct xen_sysctl_tbuf_op xen_sysctl_tbuf_op_t;
   81 DEFINE_XEN_GUEST_HANDLE(xen_sysctl_tbuf_op_t);
   82 
   83 /*
   84  * Get physical information about the host machine
   85  */
   86 #define XEN_SYSCTL_physinfo          3
   87  /* (x86) The platform supports HVM guests. */
   88 #define _XEN_SYSCTL_PHYSCAP_hvm          0
   89 #define XEN_SYSCTL_PHYSCAP_hvm           (1u<<_XEN_SYSCTL_PHYSCAP_hvm)
   90  /* (x86) The platform supports HVM-guest direct access to I/O devices. */
   91 #define _XEN_SYSCTL_PHYSCAP_hvm_directio 1
   92 #define XEN_SYSCTL_PHYSCAP_hvm_directio  (1u<<_XEN_SYSCTL_PHYSCAP_hvm_directio)
   93 struct xen_sysctl_physinfo {
   94     uint32_t threads_per_core;
   95     uint32_t cores_per_socket;
   96     uint32_t nr_cpus;
   97     uint32_t nr_nodes;
   98     uint32_t cpu_khz;
   99     uint64_aligned_t total_pages;
  100     uint64_aligned_t free_pages;
  101     uint64_aligned_t scrub_pages;
  102     uint32_t hw_cap[8];
  103 
  104     /*
  105      * IN: maximum addressable entry in the caller-provided cpu_to_node array.
  106      * OUT: largest cpu identifier in the system.
  107      * If OUT is greater than IN then the cpu_to_node array is truncated!
  108      */
  109     uint32_t max_cpu_id;
  110     /*
  111      * If not NULL, this array is filled with node identifier for each cpu.
  112      * If a cpu has no node information (e.g., cpu not present) then the
  113      * sentinel value ~0u is written.
  114      * The size of this array is specified by the caller in @max_cpu_id.
  115      * If the actual @max_cpu_id is smaller than the array then the trailing
  116      * elements of the array will not be written by the sysctl.
  117      */
  118     XEN_GUEST_HANDLE_64(uint32) cpu_to_node;
  119 
  120     /* XEN_SYSCTL_PHYSCAP_??? */
  121     uint32_t capabilities;
  122 };
  123 typedef struct xen_sysctl_physinfo xen_sysctl_physinfo_t;
  124 DEFINE_XEN_GUEST_HANDLE(xen_sysctl_physinfo_t);
  125 
  126 /*
  127  * Get the ID of the current scheduler.
  128  */
  129 #define XEN_SYSCTL_sched_id          4
  130 struct xen_sysctl_sched_id {
  131     /* OUT variable */
  132     uint32_t sched_id;
  133 };
  134 typedef struct xen_sysctl_sched_id xen_sysctl_sched_id_t;
  135 DEFINE_XEN_GUEST_HANDLE(xen_sysctl_sched_id_t);
  136 
  137 /* Interface for controlling Xen software performance counters. */
  138 #define XEN_SYSCTL_perfc_op          5
  139 /* Sub-operations: */
  140 #define XEN_SYSCTL_PERFCOP_reset 1   /* Reset all counters to zero. */
  141 #define XEN_SYSCTL_PERFCOP_query 2   /* Get perfctr information. */
  142 struct xen_sysctl_perfc_desc {
  143     char         name[80];             /* name of perf counter */
  144     uint32_t     nr_vals;              /* number of values for this counter */
  145 };
  146 typedef struct xen_sysctl_perfc_desc xen_sysctl_perfc_desc_t;
  147 DEFINE_XEN_GUEST_HANDLE(xen_sysctl_perfc_desc_t);
  148 typedef uint32_t xen_sysctl_perfc_val_t;
  149 DEFINE_XEN_GUEST_HANDLE(xen_sysctl_perfc_val_t);
  150 
  151 struct xen_sysctl_perfc_op {
  152     /* IN variables. */
  153     uint32_t       cmd;                /*  XEN_SYSCTL_PERFCOP_??? */
  154     /* OUT variables. */
  155     uint32_t       nr_counters;       /*  number of counters description  */
  156     uint32_t       nr_vals;           /*  number of values  */
  157     /* counter information (or NULL) */
  158     XEN_GUEST_HANDLE_64(xen_sysctl_perfc_desc_t) desc;
  159     /* counter values (or NULL) */
  160     XEN_GUEST_HANDLE_64(xen_sysctl_perfc_val_t) val;
  161 };
  162 typedef struct xen_sysctl_perfc_op xen_sysctl_perfc_op_t;
  163 DEFINE_XEN_GUEST_HANDLE(xen_sysctl_perfc_op_t);
  164 
  165 #define XEN_SYSCTL_getdomaininfolist 6
  166 struct xen_sysctl_getdomaininfolist {
  167     /* IN variables. */
  168     domid_t               first_domain;
  169     uint32_t              max_domains;
  170     XEN_GUEST_HANDLE_64(xen_domctl_getdomaininfo_t) buffer;
  171     /* OUT variables. */
  172     uint32_t              num_domains;
  173 };
  174 typedef struct xen_sysctl_getdomaininfolist xen_sysctl_getdomaininfolist_t;
  175 DEFINE_XEN_GUEST_HANDLE(xen_sysctl_getdomaininfolist_t);
  176 
  177 /* Inject debug keys into Xen. */
  178 #define XEN_SYSCTL_debug_keys        7
  179 struct xen_sysctl_debug_keys {
  180     /* IN variables. */
  181     XEN_GUEST_HANDLE_64(char) keys;
  182     uint32_t nr_keys;
  183 };
  184 typedef struct xen_sysctl_debug_keys xen_sysctl_debug_keys_t;
  185 DEFINE_XEN_GUEST_HANDLE(xen_sysctl_debug_keys_t);
  186 
  187 /* Get physical CPU information. */
  188 #define XEN_SYSCTL_getcpuinfo        8
  189 struct xen_sysctl_cpuinfo {
  190     uint64_aligned_t idletime;
  191 };
  192 typedef struct xen_sysctl_cpuinfo xen_sysctl_cpuinfo_t;
  193 DEFINE_XEN_GUEST_HANDLE(xen_sysctl_cpuinfo_t); 
  194 struct xen_sysctl_getcpuinfo {
  195     /* IN variables. */
  196     uint32_t max_cpus;
  197     XEN_GUEST_HANDLE_64(xen_sysctl_cpuinfo_t) info;
  198     /* OUT variables. */
  199     uint32_t nr_cpus;
  200 }; 
  201 typedef struct xen_sysctl_getcpuinfo xen_sysctl_getcpuinfo_t;
  202 DEFINE_XEN_GUEST_HANDLE(xen_sysctl_getcpuinfo_t); 
  203 
  204 #define XEN_SYSCTL_availheap         9
  205 struct xen_sysctl_availheap {
  206     /* IN variables. */
  207     uint32_t min_bitwidth;  /* Smallest address width (zero if don't care). */
  208     uint32_t max_bitwidth;  /* Largest address width (zero if don't care). */
  209     int32_t  node;          /* NUMA node of interest (-1 for all nodes). */
  210     /* OUT variables. */
  211     uint64_aligned_t avail_bytes;/* Bytes available in the specified region. */
  212 };
  213 typedef struct xen_sysctl_availheap xen_sysctl_availheap_t;
  214 DEFINE_XEN_GUEST_HANDLE(xen_sysctl_availheap_t);
  215 
  216 #define XEN_SYSCTL_get_pmstat        10
  217 struct pm_px_val {
  218     uint64_aligned_t freq;        /* Px core frequency */
  219     uint64_aligned_t residency;   /* Px residency time */
  220     uint64_aligned_t count;       /* Px transition count */
  221 };
  222 typedef struct pm_px_val pm_px_val_t;
  223 DEFINE_XEN_GUEST_HANDLE(pm_px_val_t);
  224 
  225 struct pm_px_stat {
  226     uint8_t total;        /* total Px states */
  227     uint8_t usable;       /* usable Px states */
  228     uint8_t last;         /* last Px state */
  229     uint8_t cur;          /* current Px state */
  230     XEN_GUEST_HANDLE_64(uint64) trans_pt;   /* Px transition table */
  231     XEN_GUEST_HANDLE_64(pm_px_val_t) pt;
  232 };
  233 typedef struct pm_px_stat pm_px_stat_t;
  234 DEFINE_XEN_GUEST_HANDLE(pm_px_stat_t);
  235 
  236 struct pm_cx_stat {
  237     uint32_t nr;    /* entry nr in triggers & residencies, including C0 */
  238     uint32_t last;  /* last Cx state */
  239     uint64_aligned_t idle_time;                 /* idle time from boot */
  240     XEN_GUEST_HANDLE_64(uint64) triggers;    /* Cx trigger counts */
  241     XEN_GUEST_HANDLE_64(uint64) residencies; /* Cx residencies */
  242 };
  243 
  244 struct xen_sysctl_get_pmstat {
  245 #define PMSTAT_CATEGORY_MASK 0xf0
  246 #define PMSTAT_PX            0x10
  247 #define PMSTAT_CX            0x20
  248 #define PMSTAT_get_max_px    (PMSTAT_PX | 0x1)
  249 #define PMSTAT_get_pxstat    (PMSTAT_PX | 0x2)
  250 #define PMSTAT_reset_pxstat  (PMSTAT_PX | 0x3)
  251 #define PMSTAT_get_max_cx    (PMSTAT_CX | 0x1)
  252 #define PMSTAT_get_cxstat    (PMSTAT_CX | 0x2)
  253 #define PMSTAT_reset_cxstat  (PMSTAT_CX | 0x3)
  254     uint32_t type;
  255     uint32_t cpuid;
  256     union {
  257         struct pm_px_stat getpx;
  258         struct pm_cx_stat getcx;
  259         /* other struct for tx, etc */
  260     } u;
  261 };
  262 typedef struct xen_sysctl_get_pmstat xen_sysctl_get_pmstat_t;
  263 DEFINE_XEN_GUEST_HANDLE(xen_sysctl_get_pmstat_t);
  264 
  265 #define XEN_SYSCTL_cpu_hotplug       11
  266 struct xen_sysctl_cpu_hotplug {
  267     /* IN variables */
  268     uint32_t cpu;   /* Physical cpu. */
  269 #define XEN_SYSCTL_CPU_HOTPLUG_ONLINE  0
  270 #define XEN_SYSCTL_CPU_HOTPLUG_OFFLINE 1
  271     uint32_t op;    /* hotplug opcode */
  272 };
  273 typedef struct xen_sysctl_cpu_hotplug xen_sysctl_cpu_hotplug_t;
  274 DEFINE_XEN_GUEST_HANDLE(xen_sysctl_cpu_hotplug_t);
  275 
  276 
  277 struct xen_sysctl {
  278     uint32_t cmd;
  279     uint32_t interface_version; /* XEN_SYSCTL_INTERFACE_VERSION */
  280     union {
  281         struct xen_sysctl_readconsole       readconsole;
  282         struct xen_sysctl_tbuf_op           tbuf_op;
  283         struct xen_sysctl_physinfo          physinfo;
  284         struct xen_sysctl_sched_id          sched_id;
  285         struct xen_sysctl_perfc_op          perfc_op;
  286         struct xen_sysctl_getdomaininfolist getdomaininfolist;
  287         struct xen_sysctl_debug_keys        debug_keys;
  288         struct xen_sysctl_getcpuinfo        getcpuinfo;
  289         struct xen_sysctl_availheap         availheap;
  290         struct xen_sysctl_get_pmstat        get_pmstat;
  291         struct xen_sysctl_cpu_hotplug       cpu_hotplug;
  292         uint8_t                             pad[128];
  293     } u;
  294 };
  295 typedef struct xen_sysctl xen_sysctl_t;
  296 DEFINE_XEN_GUEST_HANDLE(xen_sysctl_t);
  297 
  298 #endif /* __XEN_PUBLIC_SYSCTL_H__ */
  299 
  300 /*
  301  * Local variables:
  302  * mode: C
  303  * c-set-style: "BSD"
  304  * c-basic-offset: 4
  305  * tab-width: 4
  306  * indent-tabs-mode: nil
  307  * End:
  308  */

Cache object: 662729f0b4aa7037b9a5e265f22cd8e4


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.