xref: /titanic_51/usr/src/uts/common/avs/ns/sdbc/sdbc_ioctl.h (revision fcf3ce441efd61da9bb2884968af01cb7c1452cc)
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 (the "License").
6  * You may not use this file except in compliance with the License.
7  *
8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9  * or http://www.opensolaris.org/os/licensing.
10  * See the License for the specific language governing permissions
11  * and limitations under the License.
12  *
13  * When distributing Covered Code, include this CDDL HEADER in each
14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15  * If applicable, add the following below this CDDL HEADER, with the
16  * fields enclosed by brackets "[]" replaced with your own identifying
17  * information: Portions Copyright [yyyy] [name of copyright owner]
18  *
19  * CDDL HEADER END
20  */
21 /*
22  * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
23  * Use is subject to license terms.
24  */
25 
26 
27 #ifndef	_SDBC_IOCTL_H
28 #define	_SDBC_IOCTL_H
29 
30 #ifdef __cplusplus
31 extern "C" {
32 #endif
33 
34 #include <sys/unistat/spcs_s.h>  /* included for unistat */
35 
36 /*
37  * Generic sdbc ioctl arguments structure.
38  * Individual ioctl's will use 0-n of these arguments.
39  *
40  * Each sdbc ioctl is described first by the command number
41  * e.g. #define	SDBC_ADUMP		_SDBC_(4)
42  *
43  * Followed by a description of each argument (if any).
44  * Each argument is on a single line.
45  *
46  */
47 
48 typedef struct _sdbc_ioctl_s {
49 	long arg0;
50 	long arg1;
51 	long arg2;
52 	long arg3;
53 	long arg4;
54 	long magic;
55 	spcs_s_info_t sdbc_ustatus;
56 	long pad[1];
57 } _sdbc_ioctl_t;
58 
59 typedef struct _sdbc_ioctl32_s {
60 	int32_t arg0;
61 	int32_t arg1;
62 	int32_t arg2;
63 	int32_t arg3;
64 	int32_t arg4;
65 	int32_t magic;
66 	spcs_s_info32_t sdbc_ustatus;
67 	int32_t pad[1];
68 } _sdbc_ioctl32_t;
69 
70 /*
71  * Ioctl command numbers
72  */
73 
74 #define	_SDBC_(x)	(('B'<<16)|('C'<<8)|(x))
75 
76 /*
77  * Old ioctl commands prior to ioctl reorg. These could be re-used
78  * at a later date
79  */
80 #define	SDBC_UNUSED_1 _SDBC_(1)	/* OLD out of date syscall -> ioctl stuff */
81 #define	SDBC_UNUSED_2 _SDBC_(2)	/* OLD INFSD_CONC_WRITE */
82 #define	SDBC_UNUSED_3 _SDBC_(3)	/* OLD muli-subopcode configuration */
83 
84 #define	SDBC_ADUMP _SDBC_(4)
85 /*
86  *	int		cd;
87  *	_sdtr_table *	table;
88  *	_sdtr_t *	trace_buffer;
89  *	int		size_of_trace_buffer;
90  *	int		flags;
91  */
92 
93 #define	SDBC_TEST_INIT _SDBC_(5)	/* TESTING - tdaemon parameters */
94 /*
95  *	char *		device_name;
96  *	int		index;
97  *	int		len;
98  *	int		track_size;
99  *	int		flags;
100  */
101 
102 #define	SDBC_TEST_START _SDBC_(6)	/* TESTING - tdaemon .... */
103 /*
104  *	int		num;
105  *	int		type;
106  *	int		loops;
107  *	int		from;
108  *	int		seed;
109  */
110 
111 #define	SDBC_TEST_END _SDBC_(7)		/* TESTING - tdaemon .... */
112 /* NO-ARGS */
113 
114 #define	SDBC_ENABLE _SDBC_(8)		/* configure sdbc */
115 /*
116  *	_sd_cache_param_t *	user_configuration;
117  */
118 
119 #define	SDBC_DISABLE _SDBC_(9)		/* deconfigure sdbc */
120 /* NO-ARGS */
121 
122 #define	SDBC_SET_CD_HINT _SDBC_(10)
123 /*
124  *	int		cd;
125  *	int		hint;
126  *	int		flags;
127  */
128 
129 #define	SDBC_GET_CD_HINT _SDBC_(11)
130 /*
131  *	int		cd;
132  */
133 
134 #define	SDBC_SET_NODE_HINT _SDBC_(12)
135 /*
136  *	int		hint;
137  *	int		flags;
138  */
139 
140 #define	SDBC_GET_NODE_HINT _SDBC_(13)
141 /* NO-ARGS */
142 
143 #define	SDBC_STATS _SDBC_(14)
144 /*
145  *	_sd_stats_t *	stats buffer;
146  */
147 
148 #define	SDBC_ZAP_STATS _SDBC_(15)
149 /* NO-ARGS */
150 
151 #define	SDBC_GET_CD_BLK _SDBC_(16)
152 /*
153  *	int		cd;
154  *	nsc_off_t *	block_number;
155  *	void *		addresses[5];
156  */
157 
158 #define	SDBC_GET_CLUSTER_SIZE _SDBC_(17)
159 /*
160  *	int *		cluster_size;
161  */
162 
163 #define	SDBC_GET_CLUSTER_DATA _SDBC_(18)
164 /*
165  *	char *		buffer[2*cluster_size];
166  */
167 
168 #define	SDBC_GET_GLMUL_SIZES _SDBC_(19)
169 /*
170  *	int *		global_sizes;
171  */
172 
173 #define	SDBC_GET_GLMUL_INFO _SDBC_(20)
174 /*
175  *	char *		buffer[ 2 times sum of global_sizes];
176  */
177 
178 /* Unused _SDBC(21,22) */
179 
180 #define	SDBC_STATE_DEV _SDBC_(23)	/* set path to sdbc state file/volume */
181 /*
182  *	char *		device_name;
183  *	int		device_name_length;
184  */
185 #define	SDBC_TOGGLE_FLUSH _SDBC_(24)	/* TESTING - toggle flusher enable */
186 	/* NO-ARGS */
187 
188 #define	SDBC_INJ_IOERR _SDBC_(25)	/* TESTING - inject i/o error */
189 /*
190  *	int		cd
191  *	int		io_error_number;
192  */
193 
194 #define	SDBC_CLR_IOERR _SDBC_(26)	/* TESTING - clear injected i/o error */
195 /*
196  *	int		cd
197  */
198 
199 #define	SDBC_GET_CONFIG _SDBC_(27)	/* retrieve current configuration */
200 /*
201  *	_sdbc_config_t *current_config;
202  */
203 
204 #define	SDBC_SET_CONFIG _SDBC_(28)	/* enable cache configuration info */
205 /*
206  *	_sdbc_config_t *mgmt_config_info;
207  */
208 
209 /* Unused _SDBC(29) */
210 
211 #define	SDBC_MAXFILES _SDBC_(30)	/* get maxfiles */
212 /*
213  *	int *		max_files;
214  */
215 
216 #define	SDBC_VERSION	_SDBC_(31)
217 /*
218  *	cache_version_t	*cache_version;
219  */
220 
221 #define	_SD_MAGIC   0xD017
222 
223 #define	MAX_CACHE_NET	4
224 #define	MAX_REMOTE_MIRRORS 64
225 #define	MAX_MIR_SEGS MAX_REMOTE_MIRRORS
226 #define	MAX_CACHE_SIZE 1024
227 
228 /* unexposed configuration bits */
229 #define	CFG_USE_DMCHAIN 0x1
230 #define	CFG_STATIC_CACHE 0x2
231 
232 #define	RESERVED1_DEFAULTS (CFG_STATIC_CACHE)
233 
234 /* maintain _sd_cache_param struct layout (MAX_CACHE_NET is deprecated) */
235 #define	CACHE_MEM_PAD 4
236 
237 typedef struct _sd_cache_param {
238 	int mirror_host;
239 	int blk_size;
240 	int threads;
241 	int procs;
242 	int test_demons;
243 	int write_cache;
244 	int trace_size;
245 	int trace_mask;
246 	int trace_lbolt;
247 	int trace_good;
248 	int trace_net;				/* not used */
249 	int iobuf;
250 	int num_handles;
251 	int cache_mem[CACHE_MEM_PAD];
252 	int prot_lru;
253 	int gen_pattern;
254 	uint_t fill_pattern;
255 	short nodes_conf[MAX_REMOTE_MIRRORS];	/* Actual Nodes in conf file */
256 	short num_nodes;			/* Number of nodes in sd.cf */
257 	short net_type;				/*  not used */
258 	ushort_t magic;				/* Check for proper sd_cadmin */
259 	int reserved1;				/* unexposed config options */
260 	int reserved[8];
261 } _sd_cache_param_t;
262 
263 typedef struct _sdbc_config {
264 	int cache_mem[CACHE_MEM_PAD];
265 	int threads;
266 	int enabled;
267 	ushort_t magic;
268 } _sdbc_config_t;
269 
270 typedef struct cache_version {
271 	int	major;			/* Major release number */
272 	int	minor;			/* Minor release number */
273 	int	micro;			/* Micro release number */
274 	int	baseline;		/* Baseline revison number */
275 } cache_version_t;
276 
277 #if !defined(_KERNEL)
278 
279 
280 /* Keep this definition in sync with the one in rdc_ioctl.h. */
281 #ifndef SDBC_IOCTL
282 #define	SDBC_IOCTL(cmd, a0, a1, a2, a3, a4, ustatus) \
283 		sdbc_ioctl((long)(cmd), (long)(a0), (long)(a1), (long)(a2), \
284 		    (long)(a3), (long)(a4), (spcs_s_info_t *)(ustatus))
285 #endif
286 
287 int sdbc_ioctl(long, long, long, long, long, long, spcs_s_info_t *);
288 
289 
290 #endif	/* ! _KERNEL */
291 
292 #ifdef __cplusplus
293 }
294 #endif
295 
296 #endif	/* _SDBC_IOCTL_H */
297