xref: /illumos-gate/usr/src/uts/common/xen/public/sysctl.h (revision 7b209c2c)
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 /*
31  * XXPV - We need sysctl (physinfo) in the solaris kernel.
32  */
33 #if 0
34 
35 #if !defined(__XEN__) && !defined(__XEN_TOOLS__)
36 #error "sysctl operations are intended for use by node control tools only"
37 #endif
38 
39 #endif /* XXPV */
40 
41 #include "xen.h"
42 #include "domctl.h"
43 
44 #define XEN_SYSCTL_INTERFACE_VERSION 0x00000002
45 
46 /*
47  * Read console content from Xen buffer ring.
48  */
49 #define XEN_SYSCTL_readconsole       1
50 struct xen_sysctl_readconsole {
51     /* IN variables. */
52     uint32_t clear;                /* Non-zero -> clear after reading. */
53     XEN_GUEST_HANDLE(char) buffer; /* Buffer start */
54     /* IN/OUT variables. */
55     uint32_t count;            /* In: Buffer size;  Out: Used buffer size  */
56 };
57 typedef struct xen_sysctl_readconsole xen_sysctl_readconsole_t;
58 DEFINE_XEN_GUEST_HANDLE(xen_sysctl_readconsole_t);
59 
60 /* Get trace buffers machine base address */
61 #define XEN_SYSCTL_tbuf_op           2
62 struct xen_sysctl_tbuf_op {
63     /* IN variables */
64 #define XEN_SYSCTL_TBUFOP_get_info     0
65 #define XEN_SYSCTL_TBUFOP_set_cpu_mask 1
66 #define XEN_SYSCTL_TBUFOP_set_evt_mask 2
67 #define XEN_SYSCTL_TBUFOP_set_size     3
68 #define XEN_SYSCTL_TBUFOP_enable       4
69 #define XEN_SYSCTL_TBUFOP_disable      5
70     uint32_t cmd;
71     /* IN/OUT variables */
72     struct xenctl_cpumap cpu_mask;
73     uint32_t             evt_mask;
74     /* OUT variables */
75     uint64_t buffer_mfn;
76     uint32_t size;
77 };
78 typedef struct xen_sysctl_tbuf_op xen_sysctl_tbuf_op_t;
79 DEFINE_XEN_GUEST_HANDLE(xen_sysctl_tbuf_op_t);
80 
81 /*
82  * Get physical information about the host machine
83  */
84 #define XEN_SYSCTL_physinfo          3
85 struct xen_sysctl_physinfo {
86     uint32_t threads_per_core;
87     uint32_t cores_per_socket;
88     uint32_t sockets_per_node;
89     uint32_t nr_nodes;
90     uint32_t cpu_khz;
91     uint64_t total_pages;
92     uint64_t free_pages;
93     uint64_t scrub_pages;
94     uint32_t hw_cap[8];
95 };
96 typedef struct xen_sysctl_physinfo xen_sysctl_physinfo_t;
97 DEFINE_XEN_GUEST_HANDLE(xen_sysctl_physinfo_t);
98 
99 /*
100  * Get the ID of the current scheduler.
101  */
102 #define XEN_SYSCTL_sched_id          4
103 struct xen_sysctl_sched_id {
104     /* OUT variable */
105     uint32_t sched_id;
106 };
107 typedef struct xen_sysctl_sched_id xen_sysctl_sched_id_t;
108 DEFINE_XEN_GUEST_HANDLE(xen_sysctl_sched_id_t);
109 
110 /* Interface for controlling Xen software performance counters. */
111 #define XEN_SYSCTL_perfc_op          5
112 /* Sub-operations: */
113 #define XEN_SYSCTL_PERFCOP_reset 1   /* Reset all counters to zero. */
114 #define XEN_SYSCTL_PERFCOP_query 2   /* Get perfctr information. */
115 struct xen_sysctl_perfc_desc {
116     char         name[80];             /* name of perf counter */
117     uint32_t     nr_vals;              /* number of values for this counter */
118 };
119 typedef struct xen_sysctl_perfc_desc xen_sysctl_perfc_desc_t;
120 DEFINE_XEN_GUEST_HANDLE(xen_sysctl_perfc_desc_t);
121 typedef uint32_t xen_sysctl_perfc_val_t;
122 DEFINE_XEN_GUEST_HANDLE(xen_sysctl_perfc_val_t);
123 
124 struct xen_sysctl_perfc_op {
125     /* IN variables. */
126     uint32_t       cmd;                /*  XEN_SYSCTL_PERFCOP_??? */
127     /* OUT variables. */
128     uint32_t       nr_counters;       /*  number of counters description  */
129     uint32_t       nr_vals;           /*  number of values  */
130     /* counter information (or NULL) */
131     XEN_GUEST_HANDLE(xen_sysctl_perfc_desc_t) desc;
132     /* counter values (or NULL) */
133     XEN_GUEST_HANDLE(xen_sysctl_perfc_val_t) val;
134 };
135 typedef struct xen_sysctl_perfc_op xen_sysctl_perfc_op_t;
136 DEFINE_XEN_GUEST_HANDLE(xen_sysctl_perfc_op_t);
137 
138 #define XEN_SYSCTL_getdomaininfolist 6
139 struct xen_sysctl_getdomaininfolist {
140     /* IN variables. */
141     domid_t               first_domain;
142     uint32_t              max_domains;
143     XEN_GUEST_HANDLE(xen_domctl_getdomaininfo_t) buffer;
144     /* OUT variables. */
145     uint32_t              num_domains;
146 };
147 typedef struct xen_sysctl_getdomaininfolist xen_sysctl_getdomaininfolist_t;
148 DEFINE_XEN_GUEST_HANDLE(xen_sysctl_getdomaininfolist_t);
149 
150 struct xen_sysctl {
151     uint32_t cmd;
152     uint32_t interface_version; /* XEN_SYSCTL_INTERFACE_VERSION */
153     union {
154         struct xen_sysctl_readconsole       readconsole;
155         struct xen_sysctl_tbuf_op           tbuf_op;
156         struct xen_sysctl_physinfo          physinfo;
157         struct xen_sysctl_sched_id          sched_id;
158         struct xen_sysctl_perfc_op          perfc_op;
159         struct xen_sysctl_getdomaininfolist getdomaininfolist;
160         uint8_t                             pad[128];
161     } u;
162 };
163 typedef struct xen_sysctl xen_sysctl_t;
164 DEFINE_XEN_GUEST_HANDLE(xen_sysctl_t);
165 
166 #endif /* __XEN_PUBLIC_SYSCTL_H__ */
167 
168 /*
169  * Local variables:
170  * mode: C
171  * c-set-style: "BSD"
172  * c-basic-offset: 4
173  * tab-width: 4
174  * indent-tabs-mode: nil
175  * End:
176  */
177