8322 nl: misleading-indentation
[unleashed/tickless.git] / usr / src / lib / libraidcfg / common / raidcfg_spi.h
blobfe2f3209be9e143fc3633fde73ca51f70389976e
1 /*
2 * CDDL HEADER START
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.
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.
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]
19 * CDDL HEADER END
23 * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
24 * Use is subject to license terms.
27 #ifndef _SYS_RAIDCFG_SPI_H
28 #define _SYS_RAIDCFG_SPI_H
30 #include <sys/types.h>
32 #ifdef __cplusplus
33 extern "C" {
34 #endif
37 * Controller capabilities
39 #define RAID_CAP_RAID0 1
40 #define RAID_CAP_RAID1 1 << 1
41 #define RAID_CAP_RAID1E 1 << 2
42 #define RAID_CAP_RAID5 1 << 3
43 #define RAID_CAP_RAID10 1 << 4
44 #define RAID_CAP_RAID50 1 << 5
45 #define RAID_CAP_G_HSP 1 << 6
46 #define RAID_CAP_L_HSP 1 << 7
47 #define RAID_CAP_DISK_TRANS 1 << 8
48 #define RAID_CAP_FULL_DISK_ONLY 1 << 9
49 #define RAID_CAP_SMART_ALLOC 1 << 10
50 #define RAID_CAP_ARRAY_ALIGN 1 << 11
53 * General constants
55 #define OBJ_SEPARATOR_BEGIN -1
56 #define OBJ_SEPARATOR_END -2
58 #define OBJ_ATTR_NONE -1
61 * Array RAID level definition
63 #define RAID_LEVEL_0 1
64 #define RAID_LEVEL_1 2
65 #define RAID_LEVEL_1E 3
66 #define RAID_LEVEL_5 4
67 #define RAID_LEVEL_10 5
68 #define RAID_LEVEL_50 6
71 * Array cache write policy
73 #define CACHE_WR_OFF 0
74 #define CACHE_WR_ON 1
77 * Array cache read policy
79 #define CACHE_RD_OFF 0
80 #define CACHE_RD_ON 1
83 * Array activation action
85 #define ARRAY_ACT_ACTIVATE 0
88 * Array status
90 #define ARRAY_STATE_OPTIMAL 0
91 #define ARRAY_STATE_DEGRADED 1
92 #define ARRAY_STATE_FAILED 2
93 #define ARRAY_STATE_MISSING 3
96 * Array activation state
98 #define ARRAY_STATE_INACTIVATE 0x8000
101 * Disk state
103 #define DISK_STATE_GOOD 0
104 #define DISK_STATE_FAILED 1
107 * Array part state
109 #define ARRAYPART_STATE_GOOD 0
110 #define ARRAYPART_STATE_MISSED 1
113 * Disk segment state
115 #define DISKSEG_STATE_GOOD 1
116 #define DISKSEG_STATE_RESERVED 1 << 1
117 #define DISKSEG_STATE_DEAD 1 << 2
118 #define DISKSEG_STATE_NORMAL 1 << 3
121 * Controller connection type
123 #define TYPE_UNKNOWN 0
124 #define TYPE_SCSI 1
125 #define TYPE_SAS 2
127 #define RAID_TASK_SUSPEND 0
128 #define RAID_TASK_RESUME 1
129 #define RAID_TASK_TERMINATE 2
131 #define HSP_TYPE_GLOBAL 0
132 #define HSP_TYPE_LOCAL 1
135 * Sub-command of set attribute
137 #define SET_CACHE_WR_PLY 0
138 #define SET_CACHE_RD_PLY 1
139 #define SET_ACTIVATION_PLY 2
142 * Sub-commands for act method of object
144 #define ACT_CONTROLLER_OPEN 0
145 #define ACT_CONTROLLER_CLOSE 1
146 #define ACT_CONTROLLER_FLASH_FW 2
149 * Some definitions
151 #define CONTROLLER_FW_LEN 32
152 #define CONTROLLER_TYPE_LEN 32
154 #define DISK_VENDER_LEN 8
155 #define DISK_PRODUCT_LEN 16
156 #define DISK_REV_LEN 4
158 #define RDCFG_PLUGIN_V1 0x10000
159 #define CFGDIR "/dev/cfg"
160 #define MAX_PATH_LEN 255
163 * Mininum array part size: 256M
165 #define ARRAYPART_MIN_SIZE (uint64_t)(1 << 28)
168 * Return code
170 #define SUCCESS 0
171 #define STD_IOCTL -1
172 #define ERR_DRIVER_NOT_FOUND -2
173 #define ERR_DRIVER_OPEN -3
174 #define ERR_DRIVER_LOCK -4
175 #define ERR_DRIVER_CLOSED -5
176 #define ERR_DRIVER_ACROSS -6
177 #define ERR_ARRAY_LEVEL -7
178 #define ERR_ARRAY_SIZE -8
179 #define ERR_ARRAY_STRIPE_SIZE -9
180 #define ERR_ARRAY_CACHE_POLICY -10
181 #define ERR_ARRAY_IN_USE -11
182 #define ERR_ARRAY_TASK -12
183 #define ERR_ARRAY_CONFIG -13
184 #define ERR_ARRAY_DISKNUM -14
185 #define ERR_ARRAY_LAYOUT -15
186 #define ERR_ARRAY_AMOUNT -16
187 #define ERR_DISK_STATE -17
188 #define ERR_DISK_SPACE -18
189 #define ERR_DISK_SEG_AMOUNT -19
190 #define ERR_DISK_NOT_EMPTY -20
191 #define ERR_DISK_TASK -21
192 #define ERR_TASK_STATE -22
193 #define ERR_OP_ILLEGAL -23
194 #define ERR_OP_NO_IMPL -24
195 #define ERR_OP_FAILED -25
196 #define ERR_DEVICE_NOENT -26
197 #define ERR_DEVICE_TYPE -27
198 #define ERR_DEVICE_DUP -28
199 #define ERR_DEVICE_OVERFLOW -29
200 #define ERR_DEVICE_UNCLEAN -30
201 #define ERR_DEVICE_INVALID -31
202 #define ERR_NOMEM -32
203 #define ERR_PRIV -33
204 #define ERR_PLUGIN -34
207 * Raid object types
209 typedef enum {
210 OBJ_TYPE_SYSTEM,
211 OBJ_TYPE_CONTROLLER,
212 OBJ_TYPE_ARRAY,
213 OBJ_TYPE_DISK,
214 OBJ_TYPE_HSP,
215 OBJ_TYPE_ARRAY_PART,
216 OBJ_TYPE_DISK_SEG,
217 OBJ_TYPE_TASK,
218 OBJ_TYPE_PROP,
219 OBJ_TYPE_ALL
220 } raid_obj_type_id_t;
223 * Task functions
225 typedef enum {
226 TASK_FUNC_UNKNOWN,
227 TASK_FUNC_INIT,
228 TASK_FUNC_BUILD,
229 TASK_FUNC_VERIFY
230 } raidtask_func_t;
233 * Task state
235 typedef enum {
236 TASK_STATE_UNKNOWN,
237 TASK_STATE_TERMINATED,
238 TASK_STATE_FAILED,
239 TASK_STATE_DONE,
240 TASK_STATE_RUNNING,
241 TASK_STATE_SUSPENDED
242 } raidtask_state_t;
245 * Properties
247 typedef enum {
248 PROP_GUID
249 } property_type_t;
252 * Attributes of all RAID objects
254 typedef union {
255 uint64_t reserved[3];
256 struct {
257 uint64_t target_id;
258 uint64_t lun;
259 } idl;
260 } array_tag_t;
262 typedef union {
263 struct {
264 uint64_t bus;
265 uint64_t target_id;
266 uint64_t lun;
267 } cidl;
268 } disk_tag_t;
270 typedef struct {
271 uint32_t controller_id;
272 uint32_t max_array_num;
273 uint32_t max_seg_per_disk;
274 uint32_t connection_type;
275 uint64_t capability;
276 char fw_version[CONTROLLER_FW_LEN];
277 char controller_type[CONTROLLER_TYPE_LEN];
278 } controller_attr_t;
280 typedef struct {
281 uint32_t array_id;
282 uint32_t state;
283 array_tag_t tag;
284 uint64_t capacity;
285 uint32_t raid_level;
286 uint32_t stripe_size;
287 uint32_t write_policy;
288 uint32_t read_policy;
289 } array_attr_t;
291 typedef struct {
292 uint32_t disk_id;
293 uint32_t state;
294 disk_tag_t tag;
295 uint64_t capacity;
297 /* ASCII data not terminated by null */
298 char vendorid[DISK_VENDER_LEN];
299 char productid[DISK_PRODUCT_LEN];
300 char revision[DISK_REV_LEN];
301 } disk_attr_t;
303 typedef struct {
304 uint32_t associated_id;
305 uint32_t type;
306 } hsp_attr_t;
308 typedef struct {
309 uint32_t disk_id;
310 uint32_t state;
311 uint64_t offset;
312 uint64_t size;
313 } arraypart_attr_t;
315 typedef struct {
316 uint32_t seq_no;
317 uint32_t state;
318 uint64_t offset;
319 uint64_t size;
320 } diskseg_attr_t;
322 typedef struct {
323 uint32_t task_id;
324 uint32_t task_func;
325 uint32_t task_state;
326 uint32_t progress;
327 } task_attr_t;
329 typedef struct {
330 uint32_t prop_id;
331 uint32_t prop_size;
332 property_type_t prop_type;
333 char prop[1];
334 } property_attr_t;
336 typedef struct {
337 uint32_t array_id;
338 uint32_t disk_id;
339 } hsp_relation_t;
342 * Structure used to register plug-in modules
344 typedef struct raid_lib_type {
345 uint32_t version;
346 struct raid_lib_type *next;
347 void *lib_handle;
348 const char *name;
350 int (*open_controller)(uint32_t, char **);
351 int (*close_controller)(uint32_t, char **);
352 int (*compnum)(uint32_t, uint32_t, raid_obj_type_id_t,
353 raid_obj_type_id_t);
354 int (*complist)(uint32_t, uint32_t, raid_obj_type_id_t,
355 raid_obj_type_id_t, int, void *);
356 int (*get_attr)(uint32_t, uint32_t, uint32_t, raid_obj_type_id_t,
357 void *);
358 int (*set_attr)(uint32_t, uint32_t, uint32_t, uint32_t *, char **);
359 int (*array_create)(uint32_t, array_attr_t *, int,
360 arraypart_attr_t *, char **);
361 int (*array_delete)(uint32_t, uint32_t, char **);
362 int (*hsp_bind)(uint32_t, hsp_relation_t *, char **);
363 int (*hsp_unbind)(uint32_t, hsp_relation_t *, char **);
364 int (*flash_fw)(uint32_t, char *, uint32_t, char **);
365 } raid_lib_t;
367 #ifdef __cplusplus
369 #endif
371 #endif /* _SYS_RAIDCFG_SPI_H */