This commit was manufactured by cvs2svn to create branch 'vserver'.
[linux-2.6.git] / include / xen / interface / sysctl.h
1 /******************************************************************************
2  * sysctl.h
3  * 
4  * System management operations. For use by node control stack.
5  * 
6  * Copyright (c) 2002-2006, K Fraser
7  */
8
9 #ifndef __XEN_PUBLIC_SYSCTL_H__
10 #define __XEN_PUBLIC_SYSCTL_H__
11
12 #if !defined(__XEN__) && !defined(__XEN_TOOLS__)
13 #error "sysctl operations are intended for use by node control tools only"
14 #endif
15
16 #include "xen.h"
17 #include "domctl.h"
18
19 #define XEN_SYSCTL_INTERFACE_VERSION 0x00000002
20
21 /*
22  * Read console content from Xen buffer ring.
23  */
24 #define XEN_SYSCTL_readconsole       1
25 struct xen_sysctl_readconsole {
26     /* IN variables. */
27     uint32_t clear;                /* Non-zero -> clear after reading. */
28     XEN_GUEST_HANDLE(char) buffer; /* Buffer start */
29     /* IN/OUT variables. */
30     uint32_t count;            /* In: Buffer size;  Out: Used buffer size  */
31 };
32 typedef struct xen_sysctl_readconsole xen_sysctl_readconsole_t;
33 DEFINE_XEN_GUEST_HANDLE(xen_sysctl_readconsole_t);
34
35 /* Get trace buffers machine base address */
36 #define XEN_SYSCTL_tbuf_op           2
37 struct xen_sysctl_tbuf_op {
38     /* IN variables */
39 #define XEN_SYSCTL_TBUFOP_get_info     0
40 #define XEN_SYSCTL_TBUFOP_set_cpu_mask 1
41 #define XEN_SYSCTL_TBUFOP_set_evt_mask 2
42 #define XEN_SYSCTL_TBUFOP_set_size     3
43 #define XEN_SYSCTL_TBUFOP_enable       4
44 #define XEN_SYSCTL_TBUFOP_disable      5
45     uint32_t cmd;
46     /* IN/OUT variables */
47     struct xenctl_cpumap cpu_mask;
48     uint32_t             evt_mask;
49     /* OUT variables */
50     uint64_t buffer_mfn;
51     uint32_t size;
52 };
53 typedef struct xen_sysctl_tbuf_op xen_sysctl_tbuf_op_t;
54 DEFINE_XEN_GUEST_HANDLE(xen_sysctl_tbuf_op_t);
55
56 /*
57  * Get physical information about the host machine
58  */
59 #define XEN_SYSCTL_physinfo          3
60 struct xen_sysctl_physinfo {
61     uint32_t threads_per_core;
62     uint32_t cores_per_socket;
63     uint32_t sockets_per_node;
64     uint32_t nr_nodes;
65     uint32_t cpu_khz;
66     uint64_t total_pages;
67     uint64_t free_pages;
68     uint64_t scrub_pages;
69     uint32_t hw_cap[8];
70 };
71 typedef struct xen_sysctl_physinfo xen_sysctl_physinfo_t;
72 DEFINE_XEN_GUEST_HANDLE(xen_sysctl_physinfo_t);
73
74 /*
75  * Get the ID of the current scheduler.
76  */
77 #define XEN_SYSCTL_sched_id          4
78 struct xen_sysctl_sched_id {
79     /* OUT variable */
80     uint32_t sched_id;
81 };
82 typedef struct xen_sysctl_sched_id xen_sysctl_sched_id_t;
83 DEFINE_XEN_GUEST_HANDLE(xen_sysctl_sched_id_t);
84
85 /* Interface for controlling Xen software performance counters. */
86 #define XEN_SYSCTL_perfc_op          5
87 /* Sub-operations: */
88 #define XEN_SYSCTL_PERFCOP_reset 1   /* Reset all counters to zero. */
89 #define XEN_SYSCTL_PERFCOP_query 2   /* Get perfctr information. */
90 struct xen_sysctl_perfc_desc {
91     char         name[80];             /* name of perf counter */
92     uint32_t     nr_vals;              /* number of values for this counter */
93 };
94 typedef struct xen_sysctl_perfc_desc xen_sysctl_perfc_desc_t;
95 DEFINE_XEN_GUEST_HANDLE(xen_sysctl_perfc_desc_t);
96 typedef uint32_t xen_sysctl_perfc_val_t;
97 DEFINE_XEN_GUEST_HANDLE(xen_sysctl_perfc_val_t);
98
99 struct xen_sysctl_perfc_op {
100     /* IN variables. */
101     uint32_t       cmd;                /*  XEN_SYSCTL_PERFCOP_??? */
102     /* OUT variables. */
103     uint32_t       nr_counters;       /*  number of counters description  */
104     uint32_t       nr_vals;                       /*  number of values  */
105     /* counter information (or NULL) */
106     XEN_GUEST_HANDLE(xen_sysctl_perfc_desc_t) desc;
107     /* counter values (or NULL) */
108     XEN_GUEST_HANDLE(xen_sysctl_perfc_val_t) val;
109 };
110 typedef struct xen_sysctl_perfc_op xen_sysctl_perfc_op_t;
111 DEFINE_XEN_GUEST_HANDLE(xen_sysctl_perfc_op_t);
112
113 #define XEN_SYSCTL_getdomaininfolist 6
114 struct xen_sysctl_getdomaininfolist {
115     /* IN variables. */
116     domid_t               first_domain;
117     uint32_t              max_domains;
118     XEN_GUEST_HANDLE(xen_domctl_getdomaininfo_t) buffer;
119     /* OUT variables. */
120     uint32_t              num_domains;
121 };
122 typedef struct xen_sysctl_getdomaininfolist xen_sysctl_getdomaininfolist_t;
123 DEFINE_XEN_GUEST_HANDLE(xen_sysctl_getdomaininfolist_t);
124
125 struct xen_sysctl {
126     uint32_t cmd;
127     uint32_t interface_version; /* XEN_SYSCTL_INTERFACE_VERSION */
128     union {
129         struct xen_sysctl_readconsole       readconsole;
130         struct xen_sysctl_tbuf_op           tbuf_op;
131         struct xen_sysctl_physinfo          physinfo;
132         struct xen_sysctl_sched_id          sched_id;
133         struct xen_sysctl_perfc_op          perfc_op;
134         struct xen_sysctl_getdomaininfolist getdomaininfolist;
135         uint8_t                             pad[128];
136     } u;
137 };
138 typedef struct xen_sysctl xen_sysctl_t;
139 DEFINE_XEN_GUEST_HANDLE(xen_sysctl_t);
140
141 #endif /* __XEN_PUBLIC_SYSCTL_H__ */
142
143 /*
144  * Local variables:
145  * mode: C
146  * c-set-style: "BSD"
147  * c-basic-offset: 4
148  * tab-width: 4
149  * indent-tabs-mode: nil
150  * End:
151  */