011193e428b7faea49c76acebd14a2e6dfacb4a3
[mirror/scst/.git] / scst / include / scst_const.h
1 /*
2  *  include/scst_const.h
3  *
4  *  Copyright (C) 2004 - 2009 Vladislav Bolkhovitin <vst@vlnb.net>
5  *  Copyright (C) 2007 - 2009 ID7 Ltd.
6  *
7  *  Contains common SCST constants.
8  *
9  *  This program is free software; you can redistribute it and/or
10  *  modify it under the terms of the GNU General Public License
11  *  as published by the Free Software Foundation, version 2
12  *  of the License.
13  *
14  *  This program is distributed in the hope that it will be useful,
15  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
16  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17  *  GNU General Public License for more details.
18  */
19
20 #ifndef __SCST_CONST_H
21 #define __SCST_CONST_H
22
23 #include <scsi/scsi.h>
24
25 #define SCST_CONST_VERSION "$Revision$"
26
27 /*** Shared constants between user and kernel spaces ***/
28
29 /* Max size of CDB */
30 #define SCST_MAX_CDB_SIZE            16
31
32 /* Max size of various names */
33 #define SCST_MAX_NAME                50
34
35 /* Max size of external names, like initiator name */
36 #define SCST_MAX_EXTERNAL_NAME       256
37
38 /*
39  * Size of sense sufficient to carry standard sense data.
40  * Warning! It's allocated on stack!
41  */
42 #define SCST_STANDARD_SENSE_LEN      18
43
44 /* Max size of sense */
45 #define SCST_SENSE_BUFFERSIZE        96
46
47 /*************************************************************
48  ** Allowed delivery statuses for cmd's delivery_status
49  *************************************************************/
50
51 #define SCST_CMD_DELIVERY_SUCCESS       0
52 #define SCST_CMD_DELIVERY_FAILED        -1
53 #define SCST_CMD_DELIVERY_ABORTED       -2
54
55 /*************************************************************
56  ** Values for task management functions
57  *************************************************************/
58 #define SCST_ABORT_TASK              0
59 #define SCST_ABORT_TASK_SET          1
60 #define SCST_CLEAR_ACA               2
61 #define SCST_CLEAR_TASK_SET          3
62 #define SCST_LUN_RESET               4
63 #define SCST_TARGET_RESET            5
64
65 /** SCST extensions **/
66
67 /*
68  * Notifies about I_T nexus loss event in the corresponding session.
69  * Aborts all tasks there, resets the reservation, if any, and sets
70  * up the I_T Nexus loss UA.
71  */
72 #define SCST_NEXUS_LOSS_SESS         6
73
74 /* Aborts all tasks in the corresponding session */
75 #define SCST_ABORT_ALL_TASKS_SESS    7
76
77 /*
78  * Notifies about I_T nexus loss event. Aborts all tasks in all sessions
79  * of the tgt, resets the reservations, if any,  and sets up the I_T Nexus
80  * loss UA.
81  */
82 #define SCST_NEXUS_LOSS              8
83
84 /* Aborts all tasks in all sessions of the tgt */
85 #define SCST_ABORT_ALL_TASKS         9
86
87 /*
88  * Internal TM command issued by SCST in scst_unregister_session(). It is the
89  * same as SCST_NEXUS_LOSS_SESS, except:
90  *  - it doesn't call task_mgmt_affected_cmds_done()
91  *  - it doesn't call task_mgmt_fn_done()
92  *  - it doesn't queue NEXUS LOSS UA.
93  *
94  * Target driver shall NEVER use it!!
95  */
96 #define SCST_UNREG_SESS_TM           10
97
98 /*************************************************************
99  ** Values for mgmt cmd's status field. Codes taken from iSCSI
100  *************************************************************/
101 #define SCST_MGMT_STATUS_SUCCESS                0
102 #define SCST_MGMT_STATUS_TASK_NOT_EXIST         -1
103 #define SCST_MGMT_STATUS_LUN_NOT_EXIST          -2
104 #define SCST_MGMT_STATUS_FN_NOT_SUPPORTED       -5
105 #define SCST_MGMT_STATUS_REJECTED               -255
106 #define SCST_MGMT_STATUS_FAILED                 -129
107
108 /*************************************************************
109  ** SCSI task attribute queue types
110  *************************************************************/
111 enum scst_cmd_queue_type {
112         SCST_CMD_QUEUE_UNTAGGED = 0,
113         SCST_CMD_QUEUE_SIMPLE,
114         SCST_CMD_QUEUE_ORDERED,
115         SCST_CMD_QUEUE_HEAD_OF_QUEUE,
116         SCST_CMD_QUEUE_ACA
117 };
118
119 /*************************************************************
120  ** Data direction aliases. Changing it don't forget to change
121  ** scst_to_tgt_dma_dir as well!!
122  *************************************************************/
123 #define SCST_DATA_UNKNOWN               0
124 #define SCST_DATA_WRITE                 1
125 #define SCST_DATA_READ                  2
126 #define SCST_DATA_BIDI                  (SCST_DATA_WRITE | SCST_DATA_READ)
127 #define SCST_DATA_NONE                  4
128
129 /*************************************************************
130  ** Name of the "Default" security group
131  *************************************************************/
132 #define SCST_DEFAULT_ACG_NAME                   "Default"
133
134 /*************************************************************
135  ** Default suffix for targets with NULL names
136  *************************************************************/
137 #define SCST_DEFAULT_TGT_NAME_SUFFIX            "_target_"
138
139 /*************************************************************
140  ** Sense manipulation and examination
141  *************************************************************/
142 #define SCST_LOAD_SENSE(key_asc_ascq) key_asc_ascq
143
144 #define SCST_SENSE_VALID(sense)  ((sense != NULL) && \
145                                   ((((const uint8_t *)(sense))[0] & 0x70) == 0x70))
146
147 #define SCST_NO_SENSE(sense)     ((sense != NULL) && \
148                                   (((const uint8_t *)(sense))[2] == 0))
149
150 /*************************************************************
151  ** Sense data for the appropriate errors. Can be used with
152  ** scst_set_cmd_error()
153  *************************************************************/
154 #define scst_sense_no_sense                     NO_SENSE,        0x00, 0
155 #define scst_sense_hardw_error                  HARDWARE_ERROR,  0x44, 0
156 #define scst_sense_aborted_command              ABORTED_COMMAND, 0x00, 0
157 #define scst_sense_invalid_opcode               ILLEGAL_REQUEST, 0x20, 0
158 #define scst_sense_invalid_field_in_cdb         ILLEGAL_REQUEST, 0x24, 0
159 #define scst_sense_invalid_field_in_parm_list   ILLEGAL_REQUEST, 0x26, 0
160 #define scst_sense_parameter_value_invalid      ILLEGAL_REQUEST, 0x26, 2
161 #define scst_sense_reset_UA                     UNIT_ATTENTION,  0x29, 0
162 #define scst_sense_nexus_loss_UA                UNIT_ATTENTION,  0x29, 0x7
163 #define scst_sense_saving_params_unsup          ILLEGAL_REQUEST, 0x39, 0
164 #define scst_sense_lun_not_supported            ILLEGAL_REQUEST, 0x25, 0
165 #define scst_sense_data_protect                 DATA_PROTECT,    0x00, 0
166 #define scst_sense_miscompare_error             MISCOMPARE,      0x1D, 0
167 #define scst_sense_block_out_range_error        ILLEGAL_REQUEST, 0x21, 0
168 #define scst_sense_medium_changed_UA            UNIT_ATTENTION,  0x28, 0
169 #define scst_sense_read_error                   MEDIUM_ERROR,    0x11, 0
170 #define scst_sense_write_error                  MEDIUM_ERROR,    0x03, 0
171 #define scst_sense_not_ready                    NOT_READY,       0x04, 0x10
172 #define scst_sense_invalid_message              ILLEGAL_REQUEST, 0x49, 0
173 #define scst_sense_cleared_by_another_ini_UA    UNIT_ATTENTION,  0x2F, 0
174 #define scst_sense_capacity_data_changed        UNIT_ATTENTION,  0x2A, 0x9
175 #define scst_sense_reported_luns_data_changed   UNIT_ATTENTION,  0x3F, 0xE
176 #define scst_sense_inquery_data_changed         UNIT_ATTENTION,  0x3F, 0x3
177
178 /*************************************************************
179  * SCSI opcodes not listed anywhere else
180  *************************************************************/
181 #ifndef REPORT_DEVICE_IDENTIFIER
182 #define REPORT_DEVICE_IDENTIFIER    0xA3
183 #endif
184 #ifndef INIT_ELEMENT_STATUS
185 #define INIT_ELEMENT_STATUS         0x07
186 #endif
187 #ifndef INIT_ELEMENT_STATUS_RANGE
188 #define INIT_ELEMENT_STATUS_RANGE   0x37
189 #endif
190 #ifndef PREVENT_ALLOW_MEDIUM
191 #define PREVENT_ALLOW_MEDIUM        0x1E
192 #endif
193 #ifndef READ_ATTRIBUTE
194 #define READ_ATTRIBUTE              0x8C
195 #endif
196 #ifndef REQUEST_VOLUME_ADDRESS
197 #define REQUEST_VOLUME_ADDRESS      0xB5
198 #endif
199 #ifndef WRITE_ATTRIBUTE
200 #define WRITE_ATTRIBUTE             0x8D
201 #endif
202 #ifndef WRITE_VERIFY_16
203 #define WRITE_VERIFY_16             0x8E
204 #endif
205 #ifndef VERIFY_6
206 #define VERIFY_6                    0x13
207 #endif
208 #ifndef VERIFY_12
209 #define VERIFY_12                   0xAF
210 #endif
211 #ifndef READ_16
212 #define READ_16               0x88
213 #endif
214 #ifndef WRITE_16
215 #define WRITE_16              0x8a
216 #endif
217 #ifndef VERIFY_16
218 #define VERIFY_16             0x8f
219 #endif
220 #ifndef SERVICE_ACTION_IN
221 #define SERVICE_ACTION_IN     0x9e
222 #endif
223 #ifndef SAI_READ_CAPACITY_16
224 /* values for service action in */
225 #define SAI_READ_CAPACITY_16  0x10
226 #endif
227 #ifndef MI_REPORT_TARGET_PGS
228 /* values for maintenance in */
229 #define MI_REPORT_TARGET_PGS  0x0a
230 #endif
231 #ifndef REPORT_LUNS
232 #define REPORT_LUNS           0xa0
233 #endif
234
235 /*************************************************************
236  **  SCSI Architecture Model (SAM) Status codes. Taken from SAM-3 draft
237  **  T10/1561-D Revision 4 Draft dated 7th November 2002.
238  *************************************************************/
239 #define SAM_STAT_GOOD            0x00
240 #define SAM_STAT_CHECK_CONDITION 0x02
241 #define SAM_STAT_CONDITION_MET   0x04
242 #define SAM_STAT_BUSY            0x08
243 #define SAM_STAT_INTERMEDIATE    0x10
244 #define SAM_STAT_INTERMEDIATE_CONDITION_MET 0x14
245 #define SAM_STAT_RESERVATION_CONFLICT 0x18
246 #define SAM_STAT_COMMAND_TERMINATED 0x22        /* obsolete in SAM-3 */
247 #define SAM_STAT_TASK_SET_FULL   0x28
248 #define SAM_STAT_ACA_ACTIVE      0x30
249 #define SAM_STAT_TASK_ABORTED    0x40
250
251 /*************************************************************
252  ** Control byte field in CDB
253  *************************************************************/
254 #ifndef CONTROL_BYTE_LINK_BIT
255 #define CONTROL_BYTE_LINK_BIT       0x01
256 #endif
257 #ifndef CONTROL_BYTE_NACA_BIT
258 #define CONTROL_BYTE_NACA_BIT       0x04
259 #endif
260
261 /*************************************************************
262  ** Byte 1 in INQUIRY CDB
263  *************************************************************/
264 #define SCST_INQ_EVPD                0x01
265
266 /*************************************************************
267  ** Byte 3 in Standard INQUIRY data
268  *************************************************************/
269 #define SCST_INQ_BYTE3               3
270
271 #define SCST_INQ_NORMACA_BIT         0x20
272
273 /*************************************************************
274  ** Byte 2 in RESERVE_10 CDB
275  *************************************************************/
276 #define SCST_RES_3RDPTY              0x10
277 #define SCST_RES_LONGID              0x02
278
279 /*************************************************************
280  ** Values for the control mode page TST field
281  *************************************************************/
282 #define SCST_CONTR_MODE_ONE_TASK_SET  0
283 #define SCST_CONTR_MODE_SEP_TASK_SETS 1
284
285 /*******************************************************************
286  ** Values for the control mode page QUEUE ALGORITHM MODIFIER field
287  *******************************************************************/
288 #define SCST_CONTR_MODE_QUEUE_ALG_RESTRICTED_REORDER   0
289 #define SCST_CONTR_MODE_QUEUE_ALG_UNRESTRICTED_REORDER 1
290
291 /*************************************************************
292  ** Values for the control mode page D_SENSE field
293  *************************************************************/
294 #define SCST_CONTR_MODE_FIXED_SENSE  0
295 #define SCST_CONTR_MODE_DESCR_SENSE 1
296
297 /*************************************************************
298  ** Misc SCSI constants
299  *************************************************************/
300 #define SCST_SENSE_ASC_UA_RESET      0x29
301 #define READ_CAP_LEN                 8
302 #define READ_CAP16_LEN               32
303 #define BYTCHK                       0x02
304 #define POSITION_LEN_SHORT           20
305 #define POSITION_LEN_LONG            32
306
307 /*************************************************************
308  ** Various timeouts
309  *************************************************************/
310 #define SCST_DEFAULT_TIMEOUT                    (60 * HZ)
311
312 #define SCST_GENERIC_CHANGER_TIMEOUT            (3 * HZ)
313 #define SCST_GENERIC_CHANGER_LONG_TIMEOUT       (14000 * HZ)
314
315 #define SCST_GENERIC_PROCESSOR_TIMEOUT          (3 * HZ)
316 #define SCST_GENERIC_PROCESSOR_LONG_TIMEOUT     (14000 * HZ)
317
318 #define SCST_GENERIC_TAPE_SMALL_TIMEOUT         (3 * HZ)
319 #define SCST_GENERIC_TAPE_REG_TIMEOUT           (900 * HZ)
320 #define SCST_GENERIC_TAPE_LONG_TIMEOUT          (14000 * HZ)
321
322 #define SCST_GENERIC_MODISK_SMALL_TIMEOUT       (3 * HZ)
323 #define SCST_GENERIC_MODISK_REG_TIMEOUT         (900 * HZ)
324 #define SCST_GENERIC_MODISK_LONG_TIMEOUT        (14000 * HZ)
325
326 #define SCST_GENERIC_DISK_SMALL_TIMEOUT         (3 * HZ)
327 #define SCST_GENERIC_DISK_REG_TIMEOUT           (60 * HZ)
328 #define SCST_GENERIC_DISK_LONG_TIMEOUT          (3600 * HZ)
329
330 #define SCST_GENERIC_RAID_TIMEOUT               (3 * HZ)
331 #define SCST_GENERIC_RAID_LONG_TIMEOUT          (14000 * HZ)
332
333 #define SCST_GENERIC_CDROM_SMALL_TIMEOUT        (3 * HZ)
334 #define SCST_GENERIC_CDROM_REG_TIMEOUT          (900 * HZ)
335 #define SCST_GENERIC_CDROM_LONG_TIMEOUT         (14000 * HZ)
336
337 #define SCST_MAX_OTHER_TIMEOUT                  (14000 * HZ)
338
339 /*************************************************************
340  ** Misc constants
341  *************************************************************/
342 #define SCST_SYSFS_BLOCK_SIZE PAGE_SIZE
343
344 #endif /* __SCST_CONST_H */