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]
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>
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
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
77 * Array cache read policy
79 #define CACHE_RD_OFF 0
83 * Array activation action
85 #define ARRAY_ACT_ACTIVATE 0
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
103 #define DISK_STATE_GOOD 0
104 #define DISK_STATE_FAILED 1
109 #define ARRAYPART_STATE_GOOD 0
110 #define ARRAYPART_STATE_MISSED 1
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
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
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)
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
204 #define ERR_PLUGIN -34
220 } raid_obj_type_id_t
;
237 TASK_STATE_TERMINATED
,
252 * Attributes of all RAID objects
255 uint64_t reserved
[3];
271 uint32_t controller_id
;
272 uint32_t max_array_num
;
273 uint32_t max_seg_per_disk
;
274 uint32_t connection_type
;
276 char fw_version
[CONTROLLER_FW_LEN
];
277 char controller_type
[CONTROLLER_TYPE_LEN
];
286 uint32_t stripe_size
;
287 uint32_t write_policy
;
288 uint32_t read_policy
;
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
];
304 uint32_t associated_id
;
332 property_type_t prop_type
;
342 * Structure used to register plug-in modules
344 typedef struct raid_lib_type
{
346 struct raid_lib_type
*next
;
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
,
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
,
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 **);
371 #endif /* _SYS_RAIDCFG_SPI_H */