Annotation of Gnu-Mach/xen/public/sysctl.h, revision 1.1

1.1     ! root        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:  */

unix.superglobalmegacorp.com

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