xref: /illumos-gate/usr/src/uts/common/sys/pool_impl.h (revision 581cede61ac9c14d8d4ea452562a567189eead78)
1 /*
2  * CDDL HEADER START
3  *
4  * The contents of this file are subject to the terms of the
5  * Common Development and Distribution License, Version 1.0 only
6  * (the "License").  You may not use this file except in compliance
7  * with the License.
8  *
9  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10  * or http://www.opensolaris.org/os/licensing.
11  * See the License for the specific language governing permissions
12  * and limitations under the License.
13  *
14  * When distributing Covered Code, include this CDDL HEADER in each
15  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16  * If applicable, add the following below this CDDL HEADER, with the
17  * fields enclosed by brackets "[]" replaced with your own identifying
18  * information: Portions Copyright [yyyy] [name of copyright owner]
19  *
20  * CDDL HEADER END
21  */
22 /*
23  * Copyright 2004 Sun Microsystems, Inc.  All rights reserved.
24  * Use is subject to license terms.
25  */
26 
27 #ifndef	_SYS_POOL_IMPL_H
28 #define	_SYS_POOL_IMPL_H
29 
30 #pragma ident	"%Z%%M%	%I%	%E% SMI"
31 
32 #include <sys/types.h>
33 #include <sys/cpupart.h>
34 #include <sys/exacct_catalog.h>
35 #include <sys/nvpair.h>
36 
37 #ifdef	__cplusplus
38 extern "C" {
39 #endif
40 
41 /*
42  * Pools driver ioctl interfaces
43  */
44 #define	POOL_STATUS	0
45 #define	POOL_STATUSQ	1
46 #define	POOL_CREATE	2
47 #define	POOL_DESTROY	3
48 #define	POOL_QUERY	4
49 #define	POOL_ASSOC	5
50 #define	POOL_DISSOC	6
51 #define	POOL_TRANSFER	7
52 #define	POOL_XTRANSFER	8
53 #define	POOL_PROPGET	9
54 #define	POOL_PROPPUT	10
55 #define	POOL_PROPRM	11
56 #define	POOL_BIND	12
57 #define	POOL_BINDQ	13
58 #define	POOL_COMMIT	14
59 
60 /*
61  * Pools-related exacct catalog IDs
62  */
63 #define	EXD_GROUP_SYSTEM	0x000000
64 #define	EXD_SYSTEM_PROP		0x000001
65 #define	EXD_SYSTEM_TSTAMP	0x000002
66 
67 #define	EXD_GROUP_POOL		0x000100
68 #define	EXD_POOL_POOLID		0x000101
69 #define	EXD_POOL_PSETID		0x000102
70 #define	EXD_POOL_PROP		0x000104
71 #define	EXD_POOL_TSTAMP		0x000105
72 
73 #define	EXD_GROUP_PSET		0x000200
74 #define	EXD_PSET_PSETID		0x000201
75 #define	EXD_PSET_PROP		0x000202
76 #define	EXD_PSET_TSTAMP		0x000203
77 
78 #define	EXD_GROUP_CPU		0x000400
79 #define	EXD_CPU_CPUID		0x000401
80 #define	EXD_CPU_PROP		0x000402
81 #define	EXD_CPU_TSTAMP		0x000403
82 
83 /*
84  * Element Types
85  */
86 typedef enum pool_elem_class {
87 	PEC_INVALID = 0,	/* invalid class, for error reporting */
88 	PEC_SYSTEM,		/* a system */
89 	PEC_POOL,		/* a pool */
90 	PEC_RES_COMP,		/* a set */
91 	PEC_RES_AGG,		/* a set */
92 	PEC_COMP		/* a resource component */
93 } pool_elem_class_t;
94 
95 typedef enum pool_resource_elem_class {
96 	PREC_INVALID = 0,
97 	PREC_PSET		/* processor set */
98 } pool_resource_elem_class_t;
99 
100 typedef enum pool_component_elem_class {
101 	PCEC_INVALID = 0,
102 	PCEC_CPU		/* CPU */
103 } pool_component_elem_class_t;
104 
105 /*
106  * Constants used by devpool.
107  */
108 #define	POOL_IDLIST_SIZE	1024
109 #define	POOL_PROPNAME_SIZE	8192
110 #define	POOL_PROPBUF_SIZE	65535
111 
112 typedef struct pool_status {
113 	int				ps_io_state;
114 } pool_status_t;
115 
116 typedef struct pool_create {
117 	id_t				pc_i_id;
118 	int				pc_o_type;
119 	int				pc_o_sub_type;
120 } pool_create_t;
121 
122 typedef struct pool_destroy {
123 	int				pd_o_type;
124 	int				pd_o_sub_type;
125 	id_t				pd_o_id;
126 } pool_destroy_t;
127 
128 typedef struct pool_query {
129 	size_t				pq_io_bufsize;
130 	void				*pq_io_buf;
131 } pool_query_t;
132 
133 #ifdef	_SYSCALL32
134 typedef struct pool_query32 {
135 	size32_t			pq_io_bufsize;
136 	caddr32_t			pq_io_buf;
137 } pool_query32_t;
138 #endif	/* _SYSCALL32 */
139 
140 typedef struct pool_assoc {
141 	poolid_t			pa_o_pool_id;
142 	pool_resource_elem_class_t	pa_o_id_type;
143 	id_t				pa_o_res_id;
144 } pool_assoc_t;
145 
146 typedef struct pool_dissoc {
147 	poolid_t			pd_o_pool_id;
148 	pool_resource_elem_class_t	pd_o_id_type;
149 } pool_dissoc_t;
150 
151 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
152 #pragma pack(4)
153 #endif
154 
155 typedef struct pool_transfer {
156 	pool_resource_elem_class_t	pt_o_id_type;
157 	id_t				pt_o_src_id;
158 	id_t				pt_o_tgt_id;
159 	uint64_t			pt_o_qty;
160 } pool_transfer_t;
161 
162 #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
163 #pragma pack()
164 #endif
165 
166 typedef struct pool_xtransfer {
167 	pool_resource_elem_class_t	px_o_id_type;
168 	id_t				px_o_src_id;
169 	id_t				px_o_tgt_id;
170 	uint_t				px_o_complist_size;
171 	id_t				*px_o_comp_list;
172 } pool_xtransfer_t;
173 
174 #ifdef	_SYSCALL32
175 typedef struct pool_xtransfer32 {
176 	pool_resource_elem_class_t	px_o_id_type;
177 	id_t				px_o_src_id;
178 	id_t				px_o_tgt_id;
179 	uint_t				px_o_complist_size;
180 	caddr32_t			px_o_comp_list;
181 } pool_xtransfer32_t;
182 #endif	/* _SYSCALL32 */
183 
184 typedef struct pool_propget {
185 	size_t				pp_i_bufsize;
186 	char				*pp_i_buf;
187 	pool_elem_class_t		pp_o_id_type;
188 	pool_resource_elem_class_t	pp_o_id_subtype;
189 	id_t				pp_o_id;
190 	uint_t				pp_o_prop_name_size;
191 	char				*pp_o_prop_name;
192 } pool_propget_t;
193 
194 #ifdef	_SYSCALL32
195 typedef	struct pool_propget32 {
196 	size32_t			pp_i_bufsize;
197 	caddr32_t			pp_i_buf;
198 	pool_elem_class_t		pp_o_id_type;
199 	pool_resource_elem_class_t	pp_o_id_subtype;
200 	id_t				pp_o_id;
201 	uint_t				pp_o_prop_name_size;
202 	caddr32_t			pp_o_prop_name;
203 } pool_propget32_t;
204 #endif	/* _SYSCALL32 */
205 
206 typedef struct pool_propgetall {
207 	size_t				pp_i_proplist_size;
208 	char				*pp_i_prop_list;
209 	pool_elem_class_t		pp_o_id_type;
210 	pool_resource_elem_class_t	pp_o_id_sub_type;
211 	id_t				pp_o_id;
212 } pool_propgetall_t;
213 
214 #ifdef	_SYSCALL32
215 typedef struct pool_propgetall32 {
216 	size32_t			pp_i_proplist_size;
217 	caddr32_t			pp_i_prop_list;
218 	pool_elem_class_t		pp_o_id_type;
219 	pool_resource_elem_class_t	pp_o_id_sub_type;
220 	id_t				pp_o_id;
221 } pool_propgetall32_t;
222 #endif	/* _SYSCALL32 */
223 
224 typedef struct pool_propput {
225 	pool_elem_class_t		pp_o_id_type;
226 	pool_resource_elem_class_t	pp_o_id_sub_type;
227 	id_t				pp_o_id;
228 	size_t				pp_o_bufsize;
229 	char				*pp_o_buf;
230 } pool_propput_t;
231 
232 #ifdef	_SYSCALL32
233 typedef struct pool_propput32 {
234 	pool_elem_class_t		pp_o_id_type;
235 	pool_resource_elem_class_t	pp_o_id_sub_type;
236 	id_t				pp_o_id;
237 	size32_t			pp_o_bufsize;
238 	caddr32_t			pp_o_buf;
239 } pool_propput32_t;
240 #endif	/* _SYSCALL32 */
241 
242 typedef struct pool_proprm {
243 	pool_elem_class_t		pp_o_id_type;
244 	pool_resource_elem_class_t	pp_o_id_sub_type;
245 	id_t				pp_o_id;
246 	size_t				pp_o_prop_name_size;
247 	char				*pp_o_prop_name;
248 } pool_proprm_t;
249 
250 #ifdef	_SYSCALL32
251 typedef struct pool_proprm32 {
252 	pool_elem_class_t		pp_o_id_type;
253 	pool_resource_elem_class_t	pp_o_id_sub_type;
254 	id_t				pp_o_id;
255 	size32_t			pp_o_prop_name_size;
256 	caddr32_t			pp_o_prop_name;
257 } pool_proprm32_t;
258 #endif	/* _SYSCALL32 */
259 
260 typedef struct pool_bind {
261 	idtype_t			pb_o_id_type;
262 	id_t				pb_o_pool_id;
263 	id_t				pb_o_id;
264 } pool_bind_t;
265 
266 typedef struct pool_bindq {
267 	idtype_t			pb_o_id_type;
268 	poolid_t			pb_i_id;
269 	id_t				pb_o_id;
270 } pool_bindq_t;
271 
272 /*
273  * Values for pp_type below
274  */
275 #define	PP_READ		0x0001
276 #define	PP_WRITE	0x0002
277 #define	PP_RDWR		0x0003
278 #define	PP_OPTIONAL	0x0004
279 #define	PP_STORED	0x0008
280 #define	PP_INIT		0x0010
281 #define	PP_HIDDEN	0x0020
282 
283 #ifdef	_KERNEL
284 
285 /*
286  * For special properties
287  */
288 typedef struct pool_property {
289 	char		*pp_name;	/* name of the property */
290 	data_type_t	pp_type;	/* type of the property */
291 	int		pp_perm;	/* permissions */
292 } pool_property_t;
293 
294 extern int pool_propput_common(nvlist_t *, nvpair_t *, pool_property_t *);
295 extern int pool_proprm_common(nvlist_t *, char *, pool_property_t *);
296 
297 #endif	/* _KERNEL */
298 
299 #ifdef	__cplusplus
300 }
301 #endif
302 
303 #endif	/* _SYS_POOL_IMPL_H */
304