libefi: import efichar.c for ucs2 support
[unleashed.git] / include / sys / stmf_ioctl.h
blobd28129cadc0b27add18885137006f6de3f20fc6b
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
22 * Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved.
24 #ifndef _STMF_IOCTL_H
25 #define _STMF_IOCTL_H
27 #ifdef __cplusplus
28 extern "C" {
29 #endif
31 #define STMF_VERSION_1 1
33 #define STMF_IOCTL (((uint32_t)'S') << 24)
34 #define STMF_IOCTL_LU_LIST (STMF_IOCTL | 1)
35 #define STMF_IOCTL_TARGET_PORT_LIST (STMF_IOCTL | 2)
36 #define STMF_IOCTL_SESSION_LIST (STMF_IOCTL | 3)
37 #define STMF_IOCTL_GET_LU_PROPERTIES (STMF_IOCTL | 4)
38 #define STMF_IOCTL_GET_TARGET_PORT_PROPERTIES (STMF_IOCTL | 5)
39 #define STMF_IOCTL_SET_STMF_STATE (STMF_IOCTL | 6)
40 #define STMF_IOCTL_GET_STMF_STATE (STMF_IOCTL | 7)
41 #define STMF_IOCTL_SET_LU_STATE (STMF_IOCTL | 8)
42 #define STMF_IOCTL_SET_TARGET_PORT_STATE (STMF_IOCTL | 9)
43 #define STMF_IOCTL_CREATE_HOST_GROUP (STMF_IOCTL | 10)
44 #define STMF_IOCTL_REMOVE_HOST_GROUP (STMF_IOCTL | 11)
45 #define STMF_IOCTL_ADD_HG_ENTRY (STMF_IOCTL | 12)
46 #define STMF_IOCTL_REMOVE_HG_ENTRY (STMF_IOCTL | 13)
47 #define STMF_IOCTL_CREATE_TARGET_GROUP (STMF_IOCTL | 14)
48 #define STMF_IOCTL_REMOVE_TARGET_GROUP (STMF_IOCTL | 15)
49 #define STMF_IOCTL_ADD_TG_ENTRY (STMF_IOCTL | 16)
50 #define STMF_IOCTL_REMOVE_TG_ENTRY (STMF_IOCTL | 17)
51 #define STMF_IOCTL_ADD_VIEW_ENTRY (STMF_IOCTL | 18)
52 #define STMF_IOCTL_REMOVE_VIEW_ENTRY (STMF_IOCTL | 19)
53 #define STMF_IOCTL_GET_HG_LIST (STMF_IOCTL | 20)
54 #define STMF_IOCTL_GET_TG_LIST (STMF_IOCTL | 21)
55 #define STMF_IOCTL_GET_HG_ENTRIES (STMF_IOCTL | 22)
56 #define STMF_IOCTL_GET_TG_ENTRIES (STMF_IOCTL | 23)
57 #define STMF_IOCTL_GET_VE_LIST (STMF_IOCTL | 24)
58 #define STMF_IOCTL_LOAD_PP_DATA (STMF_IOCTL | 25)
59 #define STMF_IOCTL_CLEAR_PP_DATA (STMF_IOCTL | 26)
60 #define STMF_IOCTL_GET_PP_DATA (STMF_IOCTL | 27)
61 #define STMF_IOCTL_CLEAR_TRACE (STMF_IOCTL | 28)
62 #define STMF_IOCTL_ADD_TRACE (STMF_IOCTL | 29)
63 #define STMF_IOCTL_GET_TRACE_POSITION (STMF_IOCTL | 30)
64 #define STMF_IOCTL_GET_TRACE (STMF_IOCTL | 31)
65 #define STMF_IOCTL_REG_LU_LIST (STMF_IOCTL | 32)
66 #define STMF_IOCTL_VE_LU_LIST (STMF_IOCTL | 33)
67 #define STMF_IOCTL_LU_VE_LIST (STMF_IOCTL | 34)
68 #define STMF_IOCTL_VALIDATE_VIEW (STMF_IOCTL | 35)
69 #define STMF_IOCTL_SET_ALUA_STATE (STMF_IOCTL | 36)
70 #define STMF_IOCTL_GET_ALUA_STATE (STMF_IOCTL | 37)
71 #define STMF_IOCTL_SET_STMF_PROPS (STMF_IOCTL | 38)
73 typedef struct stmf_iocdata {
74 uint32_t stmf_version;
75 uint32_t stmf_error;
76 uint32_t stmf_ibuf_size;
77 uint32_t stmf_obuf_size;
78 uint32_t stmf_obuf_nentries; /* # entries xferred */
79 uint32_t stmf_obuf_max_nentries; /* #,could have been xferred */
80 uint64_t stmf_ibuf;
81 uint64_t stmf_obuf;
82 } stmf_iocdata_t;
84 typedef struct slist_lu {
85 uint8_t lu_guid[16];
86 } slist_lu_t;
88 typedef struct slist_target_port {
89 uint8_t target[260];
90 } slist_target_port_t;
92 typedef struct slist_scsi_session {
93 uint8_t initiator[260];
94 /* creation_time is really time_t. But time_t is defined as long. */
95 uint32_t creation_time;
96 char alias[256];
97 } slist_scsi_session_t;
100 * States for LUs and LPORTs
102 #define STMF_STATE_OFFLINE 0
103 #define STMF_STATE_ONLINING 1
104 #define STMF_STATE_ONLINE 2
105 #define STMF_STATE_OFFLINING 3
108 * States for the STMF config.
110 #define STMF_CONFIG_NONE 0
111 #define STMF_CONFIG_INIT 1
112 #define STMF_CONFIG_INIT_DONE 2
114 typedef struct sioc_lu_props {
115 uint8_t lu_guid[16];
116 uint8_t lu_state:4,
117 lu_present:1,
118 lu_rsvd:3;
119 char lu_provider_name[255];
120 char lu_alias[256];
121 } sioc_lu_props_t;
123 typedef struct sioc_target_port_props {
124 uint8_t tgt_id[260];
125 uint8_t tgt_state:4,
126 tgt_present:1,
127 tgt_rsvd:3;
128 char tgt_provider_name[255];
129 char tgt_alias[256];
130 } sioc_target_port_props_t;
133 * This struct is used for getting and setting state of LU/LPORT or STMF.
135 typedef struct stmf_state_desc {
136 uint8_t ident[260]; /* N/A for STMF itself */
137 uint8_t state;
138 uint8_t config_state; /* N/A for LU/LPORTs */
139 } stmf_state_desc_t;
142 * This struct is used for setting the alua state
144 typedef struct stmf_alua_state_desc {
145 uint8_t alua_state;
146 uint16_t alua_node;
147 } stmf_alua_state_desc_t;
149 /* Error definitions for group/view entry/provider dataioctls */
150 #define STMF_IOCERR_NONE 0
151 #define STMF_IOCERR_HG_EXISTS 1
152 #define STMF_IOCERR_INVALID_HG 2
153 #define STMF_IOCERR_TG_EXISTS 3
154 #define STMF_IOCERR_INVALID_TG 4
155 #define STMF_IOCERR_HG_ENTRY_EXISTS 5
156 #define STMF_IOCERR_INVALID_HG_ENTRY 6
157 #define STMF_IOCERR_TG_ENTRY_EXISTS 7
158 #define STMF_IOCERR_INVALID_TG_ENTRY 8
159 #define STMF_IOCERR_TG_UPDATE_NEED_SVC_OFFLINE 9
160 #define STMF_IOCERR_LU_NUMBER_IN_USE 10
161 #define STMF_IOCERR_INVALID_LU_ID 11
162 #define STMF_IOCERR_VIEW_ENTRY_CONFLICT 12
163 #define STMF_IOCERR_HG_IN_USE 13
164 #define STMF_IOCERR_TG_IN_USE 14
165 #define STMF_IOCERR_INVALID_VIEW_ENTRY 15
166 #define STMF_IOCERR_INVALID_VE_ID 16
167 #define STMF_IOCERR_UPDATE_NEED_CFG_INIT 17
168 #define STMF_IOCERR_PPD_UPDATED 18
169 #define STMF_IOCERR_INSUFFICIENT_BUF 19
170 #define STMF_IOCERR_TG_NEED_TG_OFFLINE 20
173 typedef struct stmf_group_name {
174 uint16_t name_size; /* in bytes */
175 uint16_t rsvd_1;
176 uint32_t rsvd_2;
177 uint8_t name[512]; /* 256 * wchar_t */
178 } stmf_group_name_t;
181 * struct used to operate (add/remove entry) on a group.
184 typedef struct stmf_ge_ident {
185 uint16_t ident_size;
186 uint8_t ident[256];
187 } stmf_ge_ident_t;
189 typedef struct stmf_group_op_data {
190 stmf_group_name_t group;
191 uint8_t ident[260];
192 } stmf_group_op_data_t;
194 typedef struct stmf_view_op_entry {
195 uint32_t ve_ndx_valid:1,
196 ve_lu_number_valid:1,
197 ve_all_hosts:1,
198 ve_all_targets:1,
199 rsvd:28;
200 uint32_t ve_ndx;
201 uint8_t ve_lu_nbr[8];
202 uint8_t ve_guid[16];
203 stmf_group_name_t ve_host_group;
204 stmf_group_name_t ve_target_group;
205 } stmf_view_op_entry_t;
207 typedef struct stmf_ppioctl_data {
208 char ppi_name[255]; /* Provider name including \0 */
209 uint8_t ppi_port_provider:1,
210 ppi_lu_provider:1,
211 ppi_token_valid:1,
212 ppt_rsvd:5;
213 uint64_t ppi_token;
214 uint64_t ppi_data_size;
215 uint8_t ppi_data[8];
216 } stmf_ppioctl_data_t;
218 typedef struct stmf_set_props {
219 uint32_t default_lu_state_value;
220 uint32_t default_target_state_value;
221 } stmf_set_props_t;
224 * SCSI device ID descriptor as per SPC3 7.6.3
226 typedef struct scsi_devid_desc {
227 #ifdef _BIT_FIELDS_HTOL
228 uint8_t protocol_id:4,
229 code_set:4;
230 uint8_t piv:1,
231 rsvd1:1,
232 association:2,
233 ident_type:4;
234 #else
235 uint8_t code_set:4,
236 protocol_id:4;
237 uint8_t ident_type:4,
238 association:2,
239 rsvd1:1,
240 piv:1;
241 #endif
242 uint8_t rsvd2;
243 uint8_t ident_length;
244 uint8_t ident[1];
245 } scsi_devid_desc_t;
248 * Protocol Identifier
250 #define PROTOCOL_FIBRE_CHANNEL 0
251 #define PROTOCOL_PARALLEL_SCSI 1
252 #define PROTOCOL_SSA 2
253 #define PROTOCOL_IEEE_1394 3
254 #define PROTOCOL_SRP 4
255 #define PROTOCOL_iSCSI 5
256 #define PROTOCOL_SAS 6
257 #define PROTOCOL_ADT 7
258 #define PROTOCOL_ATAPI 8
259 #define PROTOCOL_ANY 15
262 * Code set definitions
264 #define CODE_SET_BINARY 1
265 #define CODE_SET_ASCII 2
266 #define CODE_SET_UTF8 3
269 * Association values
271 #define ID_IS_LOGICAL_UNIT 0
272 #define ID_IS_TARGET_PORT 1
273 #define ID_IS_TARGET_CONTAINING_LU 2
276 * ident type
278 #define ID_TYPE_VENDOR_SPECIFIC 0
279 #define ID_TYPE_T10_VID 1
280 #define ID_TYPE_EUI64 2
281 #define ID_TYPE_NAA 3
282 #define ID_TYPE_RELATIVE_TARGET_PORT 4
283 #define ID_TYPE_TARGET_PORT_GROUP 5
284 #define ID_TYPE_LOGICAL_UNIT_GROUP 6
285 #define ID_TYPE_MD5_LOGICAL_UNIT 7
286 #define ID_TYPE_SCSI_NAME_STRING 8
288 int stmf_copyin_iocdata(intptr_t data, int mode, stmf_iocdata_t **iocd,
289 void **ibuf, void **obuf);
290 int stmf_copyout_iocdata(intptr_t data, int mode, stmf_iocdata_t *iocd,
291 void *obuf);
293 #ifdef __cplusplus
295 #endif
297 #endif /* _STMF_IOCTL_H */