6811333 Remove prom_printf() message in emlxs driver
[opensolaris.git] / usr / src / uts / common / sys / scsi / generic / persist.h
blob3c3a2cd964701e8d3cbdef77ea3e8bcddad24d87
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 2007 Sun Microsystems, Inc. All rights reserved.
23 * Use is subject to license terms.
26 #ifndef _SYS_SCSI_GENERIC_PERSIST_H
27 #define _SYS_SCSI_GENERIC_PERSIST_H
29 #pragma ident "%Z%%M% %I% %E% SMI"
31 #ifdef __cplusplus
32 extern "C" {
33 #endif
36 * SCSI Persistence Data
38 * Format of data returned as a result of PERSISTENCE RESERVER { IN | OUT }
42 * SPC-3 revision 23, Section 6.11.1, Table 102
43 * Persistent Reservations
44 * Persistent Reserve In service actions
46 #define PR_IN_READ_KEYS 0x0 /* Read all registered reservation keys */
47 #define PR_IN_READ_RESERVATION 0x1 /* Reads th persistent reservations */
48 #define PR_IN_REPORT_CAPABILITIES 0x2 /* Returns capability information */
49 #define PR_IN_READ_FULL_STATUS 0x3 /* Reads complete information about all */
50 /* registrations and the persistent */
51 /* reservations, if any */
53 * SPC-3 revision 23, Section 6.11.3.3, Table 106
54 * Persistent reservation scope codes
56 #define PR_LU_SCOPE 0x0 /* Persistent reservation applies to */
57 /* full logical unit */
59 * SPC-3 revision 23, Section 6.11.3.4, Table 107
60 * Persistent Reservations
61 * Persistent reservation type codes
63 #define PGR_TYPE_WR_EX 0x1 /* Write Exclusive */
64 #define PGR_TYPE_EX_AC 0x3 /* Exclusive Access */
65 #define PGR_TYPE_WR_EX_RO 0x5 /* Write Exclusive, Registrants Only */
66 #define PGR_TYPE_EX_AC_RO 0x6 /* Exclusive Access, Registrants Only */
67 #define PGR_TYPE_WR_EX_AR 0x7 /* Write Exclusive, All Registrants */
68 #define PGR_TYPE_EX_AC_AR 0x8 /* Exclusive Access, All Registrants */
71 * Information obtained from:
72 * SPC-3, Revision 23
73 * Section 6.11.5 PERSISTENCE RESERVE IN
74 * Table 111 - full status descriptor format
76 /* Table 289 - iSCSI Initiator Device TransportID format */
78 #define iSCSI_PROTOCOL_ID 0x5 /* Table 262 - iSCSI Protocol ID */
79 #define WW_UID_DEVICE_NAME 0x0 /* Table 288 - iSCSI Transport IDs */
82 #if defined(_BIT_FIELDS_LTOH)
84 * Information obtained from:
85 * SPC-3, Revision 23
86 * Section 6.11.1 PERSISTENCE RESERVE IN
87 * Table 101 - PERSISTENCE RESERVE IN command
89 typedef struct scsi_cdb_prin {
90 uint8_t cmd;
91 uint8_t action : 5,
92 resbits : 3;
93 uint8_t resbytes[5];
94 uint8_t alloc_len[2];
95 uint8_t control;
96 } scsi_cdb_prin_t;
99 * Information obtained from:
100 * SPC-3, Revision 23
101 * Section 6.11.2 PERSISTENCE RESERVE IN
102 * Table 103/104/105 - parameter data for READS KEYS
104 typedef struct scsi_prin_rsrvdesc {
105 uint8_t reservation_key[8];
106 uint8_t obsolete1[4];
107 uint8_t resbytes;
108 uint8_t type : 4,
109 scope : 4;
110 uint8_t obsolete2[2];
111 } scsi_prin_rsrvdesc_t;
112 typedef struct scsi_prin_readrsrv {
113 uint8_t PRgeneration[4];
114 uint8_t add_len[4];
115 union {
116 uint64_t service_key[1];
117 scsi_prin_rsrvdesc_t res_key_list[1];
118 } key_list;
119 } scsi_prin_readrsrv_t;
122 * Information obtained from:
123 * SPC-3, Revision 23
124 * Section 6.11.4 PERSISTENCE RESERVE IN
125 * Table 108 - parameter data for REPORT CAPABILTIES
127 typedef struct scsi_per_res_type {
128 uint8_t resbits1 : 1,
129 wr_ex : 1,
130 resbits2 : 1,
131 ex_ac : 1,
132 resbits3 : 1,
133 wr_ex_ro : 1,
134 ex_ac_ro : 1,
135 wr_ex_ar : 1;
136 uint8_t ex_ac_ar : 1,
137 resbits4 : 7;
138 } scsi_per_res_type_t;
139 typedef struct scsi_prin_rpt_cap {
140 uint8_t length[2];
141 uint8_t ptpl_c : 1,
142 resbits1 : 1,
143 atp_c : 1,
144 sip_c : 1,
145 crh : 1,
146 resbits2 : 3;
147 uint8_t ptpl_a : 1,
148 resbits3 : 6,
149 tmv : 1;
150 scsi_per_res_type_t pr_type;
151 uint8_t resbytes[2];
152 } scsi_prin_rpt_cap_t;
155 * Information obtained from:
156 * SPC-3, Revision 23
157 * Section 6.11.5 PERSISTENCE RESERVE IN
158 * Table 110/111 - parameter data for READ FULL STATUS
159 * Table 281 - TransportId format
161 typedef struct scsi_transport_id {
162 uint8_t protocol_id : 4,
163 resbits : 2,
164 format_code : 2;
165 uint8_t add_len[2];
166 char iscsi_name[1];
167 } scsi_transport_id_t;
168 typedef struct scsi_prin_status_t {
169 uint8_t reservation_key[8];
170 uint8_t resbytes1[4];
171 uint8_t r_holder : 1,
172 all_tg_pt : 1,
173 resbits : 6;
174 uint8_t type : 4,
175 scope : 4;
176 uint8_t resbytes2[4];
177 uint8_t rel_tgt_port_id[2];
178 uint8_t add_len[4];
179 scsi_transport_id_t trans_id;
180 } scsi_prin_status_t;
181 typedef struct scsi_prin_full_status {
182 uint8_t PRgeneration[4];
183 uint8_t add_len[4];
184 scsi_prin_status_t full_desc[1];
185 } scsi_prin_full_status_t;
188 * Information obtained from:
189 * SPC-3, Revision 23
190 * Section 6.12.1 PERSISTENCE RESERVE OUT
191 * Table 112 - PERSISTENCE RESERVE OUT command
193 typedef struct scsi_cdb_prout {
194 uint8_t cmd;
195 uint8_t action : 5,
196 resbits : 3;
197 uint8_t type : 4,
198 scope : 4;
199 uint8_t resbytes[2];
200 uint8_t param_len[4];
201 uint8_t control;
202 } scsi_cdb_prout_t;
205 * Information obtained from:
206 * SPC-3, Revision 23
207 * Section 6.12.3 PERSISTENCE RESERVE OUT
208 * Table 114 - PERSISTENCE RESERVE OUT parameter list
210 typedef struct scsi_prout_plist {
211 uint8_t reservation_key[8];
212 uint8_t service_key[8];
213 uint8_t obsolete1[4];
214 uint8_t aptpl : 1,
215 resbits1 : 1,
216 all_tg_pt : 1,
217 spec_i_pt : 1,
218 resbits2 : 4;
219 uint8_t resbytes1;
220 uint8_t obsolete2[2];
221 uint8_t apd[1];
222 } scsi_prout_plist_t;
224 #elif defined(_BIT_FIELDS_HTOL)
226 * Information obtained from:
227 * SPC-3, Revision 23
228 * Section 6.11.1 PERSISTENCE RESERVE IN
229 * Table 101 - PERSISTENCE RESERVE IN command
231 typedef struct scsi_cdb_prin {
232 uint8_t cmd;
233 uint8_t resbits : 3,
234 action : 5;
235 uint8_t resbytes[5];
236 uint8_t alloc_len[2];
237 uint8_t control;
238 } scsi_cdb_prin_t;
241 * Information obtained from:
242 * SPC-3, Revision 23
243 * Section 6.11.2 PERSISTENCE RESERVE IN
244 * Table 103/104/105 - parameter data for READS KEYS
246 typedef struct scsi_prin_rsrvdesc {
247 uint8_t reservation_key[8];
248 uint8_t obsolete1[4];
249 uint8_t resbytes;
250 uint8_t scope : 4,
251 type : 4;
252 uint8_t obsolete2[2];
253 } scsi_prin_rsrvdesc_t;
254 typedef struct scsi_prin_readrsrv {
255 uint8_t PRgeneration[4];
256 uint8_t add_len[4];
257 union {
258 uint64_t service_key[1];
259 scsi_prin_rsrvdesc_t res_key_list[1];
260 } key_list;
261 } scsi_prin_readrsrv_t;
264 * Information obtained from:
265 * SPC-3, Revision 23
266 * Section 6.11.4 PERSISTENCE RESERVE IN
267 * Table 108 - parameter data for REPORT CAPABILTIES
269 typedef struct scsi_per_res_type {
270 uint8_t wr_ex_ar : 1,
271 ex_ac_ro : 1,
272 wr_ex_ro : 1,
273 resbits3 : 1,
274 ex_ac : 1,
275 resbits2 : 1,
276 wr_ex : 1,
277 resbits1 : 1;
278 uint8_t resbits4 : 7,
279 ex_ac_ar : 1;
280 } scsi_per_res_type_t;
281 typedef struct scsi_prin_rpt_cap {
282 uint8_t length[2];
283 uint8_t resbits2 : 3,
284 crh : 1,
285 sip_c : 1,
286 atp_c : 1,
287 resbits1 : 1,
288 ptpl_c : 1;
289 uint8_t tmv : 1,
290 resbits3 : 6,
291 ptpl_a : 1;
292 scsi_per_res_type_t pr_type;
293 uint8_t resbytes[2];
294 } scsi_prin_rpt_cap_t;
297 * Information obtained from:
298 * SPC-3, Revision 23
299 * Section 6.11.5 PERSISTENCE RESERVE IN
300 * Table 110/111 - parameter data for READ FULL STATUS
301 * Table 281 - TransportId format
303 typedef struct scsi_transport_id {
304 uint8_t format_code : 2,
305 resbits : 2,
306 protocol_id : 4;
307 uint8_t add_len[2];
308 char iscsi_name[1];
309 } scsi_transport_id_t;
310 typedef struct scsi_prin_status_t {
311 uint8_t reservation_key[8];
312 uint8_t resbytes1[4];
313 uint8_t resbits : 6,
314 all_tg_pt : 1,
315 r_holder : 1;
316 uint8_t scope : 4,
317 type : 4;
318 uint8_t resbytes2[4];
319 uint8_t rel_tgt_port_id[2];
320 uint8_t add_len[4];
321 scsi_transport_id_t trans_id;
322 } scsi_prin_status_t;
323 typedef struct scsi_prin_full_status {
324 uint8_t PRgeneration[4];
325 uint8_t add_len[4];
326 scsi_prin_status_t full_desc[1];
327 } scsi_prin_full_status_t;
330 * Information obtained from:
331 * SPC-3, Revision 23
332 * Section 6.12.1 PERSISTENCE RESERVE OUT
333 * Table 112 - PERSISTENCE RESERVE OUT command
335 typedef struct scsi_cdb_prout {
336 uint8_t cmd;
337 uint8_t resbits : 3,
338 action : 5;
339 uint8_t scope : 4,
340 type : 4;
341 uint8_t resbytes[2];
342 uint8_t param_len[4];
343 uint8_t control;
344 } scsi_cdb_prout_t;
347 * Information obtained from:
348 * SPC-3, Revision 23
349 * Section 6.12.3 PERSISTENCE RESERVE OUT
350 * Table 114 - PERSISTENCE RESERVE OUT parameter list
352 typedef struct scsi_prout_plist {
353 uint8_t reservation_key[8];
354 uint8_t service_key[8];
355 uint8_t obsolete1[4];
356 uint8_t resbits1 : 4,
357 spec_i_pt : 1,
358 all_tg_pt : 1,
359 resbits2 : 1,
360 aptpl : 1;
361 uint8_t resbytes1;
362 uint8_t obsolete2[2];
363 uint8_t apd[1];
364 } scsi_prout_plist_t;
366 #else
367 #error One of _BIT_FIELDS_LTOH or _BIT_FIELDS_HTOL must be defined
368 #endif /* _BIT_FIELDS_LTOH */
372 * SPC-3 revision 23, Section 6.12.2, Table 113
373 * Persistent Reservations
374 * Persistent Reserve Out service action codes
376 #define PR_OUT_REGISTER 0x0 /* Register/unregister a reservation */
377 /* key with the device server */
378 #define PR_OUT_RESERVE 0x1 /* Create a persistent reservation */
379 /* having a specified SCOPE & TYPE */
380 #define PR_OUT_RELEASE 0x2 /* Release the selected persistent */
381 /* reservation */
382 #define PR_OUT_CLEAR 0x3 /* Clears all reservation keys and */
383 /* all persistent reservations */
384 #define PR_OUT_PREEMPT 0x4 /* Preempts persistent reservations */
385 /* and/or removes reservations */
386 #define PR_OUT_PREEMPT_ABORT 0x5 /* Preempts persistent reservations */
387 /* and/or removes reservations, and */
388 /* aborts all tasks for all preempted */
389 /* I_T nexuses */
390 #define PR_OUT_REGISTER_AND_IGNORE_EXISTING_KEY 0x06
391 /* Register a reservation key with */
392 /* the device server, or unregister a */
393 /* reservation key */
394 #define PR_OUT_REGISTER_MOVE 0x7 /* Register a reservation key for */
395 /* another I_T nexus with the device */
396 /* server and move a persistent */
397 /* reservation to the I_T nexus */
400 #ifdef __cplusplus
402 #endif
404 #endif /* _SYS_SCSI_GENERIC_PERSIST_H */