1 /*-
2 * SPDX-License-Identifier: BSD-2-Clause OR GPL-2.0
3 *
4 * This file is provided under a dual BSD/GPLv2 license. When using or
5 * redistributing this file, you may do so under either license.
6 *
7 * GPL LICENSE SUMMARY
8 *
9 * Copyright(c) 2008 - 2011 Intel Corporation. All rights reserved.
10 *
11 * This program is free software; you can redistribute it and/or modify
12 * it under the terms of version 2 of the GNU General Public License as
13 * published by the Free Software Foundation.
14 *
15 * This program is distributed in the hope that it will be useful, but
16 * WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 * General Public License for more details.
19 *
20 * You should have received a copy of the GNU General Public License
21 * along with this program; if not, write to the Free Software
22 * Foundation, Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
23 * The full GNU General Public License is included in this distribution
24 * in the file called LICENSE.GPL.
25 *
26 * BSD LICENSE
27 *
28 * Copyright(c) 2008 - 2010 Intel Corporation. All rights reserved.
29 * All rights reserved.
30 *
31 * Redistribution and use in source and binary forms, with or without
32 * modification, are permitted provided that the following conditions
33 * are met:
34 *
35 * * Redistributions of source code must retain the above copyright
36 * notice, this list of conditions and the following disclaimer.
37 * * Redistributions in binary form must reproduce the above copyright
38 * notice, this list of conditions and the following disclaimer in
39 * the documentation and/or other materials provided with the
40 * distribution.
41 *
42 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
43 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
44 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
45 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
46 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
47 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
48 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
49 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
50 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
51 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
52 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
53 *
54 * $FreeBSD$
55 */
56 /**
57 * @file
58 * @brief This file defines all of the SCSI related constants, enumerations,
59 * and types. Please note that this file does not necessarily contain
60 * an exhaustive list of all constants, commands, sub-commands, etc.
61 */
62
63 #ifndef _SCSI_H__
64 #define _SCSI_H__
65
66
67 //******************************************************************************
68 //* C O N S T A N T S A N D M A C R O S
69 //******************************************************************************
70
71 /**
72 * @enum _SCSI_TASK_MGMT_REQUEST_CODES
73 *
74 * @brief This enumberation contains the constants to be used for SCSI task
75 * management request codes. SAM does not specify any particular
76 * values for these codes so constants used here are the same as
77 * those specified in SAS.
78 */
79 typedef enum _SCSI_TASK_MGMT_REQUEST_CODES
80 {
81 SCSI_TASK_REQUEST_ABORT_TASK = 0x01,
82 SCSI_TASK_REQUEST_ABORT_TASK_SET = 0x02,
83 SCSI_TASK_REQUEST_CLEAR_TASK_SET = 0x04,
84 SCSI_TASK_REQUEST_LOGICAL_UNIT_RESET = 0x08,
85 SCSI_TASK_REQUEST_I_T_NEXUS_RESET = 0x10,
86 SCSI_TASK_REQUEST_CLEAR_ACA = 0x40,
87 SCSI_TASK_REQUEST_QUERY_TASK = 0x80,
88 SCSI_TASK_REQUEST_QUERY_TASK_SET = 0x81,
89 SCSI_TASK_REQUEST_QUERY_UNIT_ATTENTION = 0x82,
90
91 } SCSI_TASK_MGMT_REQUEST_CODES;
92
93 /**
94 * @enum _SCSI_TASK_MGMT_RESPONSE_CODES
95 *
96 * @brief This enumeration contains all of the SCSI task management response
97 * codes.
98 */
99 typedef enum _SCSI_TASK_MGMT_RESPONSE_CODES
100 {
101 SCSI_TASK_MGMT_FUNC_COMPLETE = 0,
102 SCSI_INVALID_FRAME = 2,
103 SCSI_TASK_MGMT_FUNC_NOT_SUPPORTED = 4,
104 SCSI_TASK_MGMT_FUNC_FAILED = 5,
105 SCSI_TASK_MGMT_FUNC_SUCCEEDED = 8,
106 SCSI_INVALID_LUN = 9
107 } SCSI_TASK_MGMT_RESPONSE_CODES;
108
109 /**
110 * @enum _SCSI_SENSE_RESPONSE_CODE
111 *
112 * @brief this enumeration depicts the types of sense data responses as
113 * per SPC-3.
114 */
115 typedef enum _SCSI_SENSE_RESPONSE_CODE
116 {
117 SCSI_FIXED_CURRENT_RESPONSE_CODE = 0x70,
118 SCSI_FIXED_DEFERRED_RESPONSE_CODE = 0x71,
119 SCSI_DESCRIPTOR_CURRENT_RESPONSE_CODE = 0x72,
120 SCSI_DESCRIPTOR_DEFERRED_RESPONSE_CODE = 0x73
121
122 } SCSI_SENSE_RESPONSE_CODE;
123
124 /**
125 * @enum _SCSI_SENSE_DATA_DESCRIPTOR_TYPE
126 *
127 * @brief this enumeration depicts the types of sense data descriptor as
128 * per SPC-4.
129 */
130 typedef enum _SCSI_SENSE_DATA_DESCRIPTOR_TYPE
131 {
132 SCSI_INFORMATION_DESCRIPTOR_TYPE = 0x00,
133 SCSI_CMD_SPECIFIC_DESCRIPTOR_TYPE = 0x01,
134 SCSI_KEY_SPECIFIC_DESCRIPTOR_TYPE = 0x02,
135 SCSI_FIELD_REPLACEABLE_UNIT_DESCRIPTOR_TYPE = 0x03,
136 SCSI_STREAM_CMD_DESCRIPTOR_TYPE = 0x04,
137 SCSI_BLOCK_DESCRIPTOR_TYPE = 0x05,
138 SCSI_OSD_OBJ_IDENTIFICATION_DESCRIPTOR_TYPE = 0x06,
139 SCSI_OSC_RESPONSE_INTEGRITY_DESCRIPTOR_TYPE = 0x07,
140 SCSI_OSD_ATTR_IDENTIFICATION_DESCRIPTOR_TYPE = 0x08,
141 SCSI_ATA_STATUS_RETURN_DESCRIPTOR_TYPE = 0x09,
142 SCSI_PROGRESS_INDICATION_DESCRIPTOR_TYPE = 0x0a,
143 SCSI_USER_DATA_SEGEMNT_REF_DESCRIPTOR_TYPE = 0x0b
144 } SCSI_SENSE_DATA_DESCRIPTOR_TYPE;
145
146 #define SCSI_CMD_SPECIFIC_DESCRIPTOR_ADDITIONAL_LENGTH 0x0a
147 #define SCSI_CMD_SPECIFIC_DESCRIPTOR_LENGTH 0x0c
148 #define SCSI_INFORMATION_DESCRIPTOR_ADDITIONAL_LENGTH 0x0a
149 #define SCSI_INFORMATION_DESCRIPTOR_LENGTH 0x0c
150 #define SCSI_BLOCK_DESCRIPTOR_ADDITIONAL_LENGTH 0x2
151 #define SCSI_BLOCK_DESCRIPTOR_LENGTH 0x4
152
153 #define SCSI_SENSE_DATA_DESC_BIT 0x01
154
155 // This constant represents the valid bit located in byte 0 of a FIXED
156 // format sense data.
157 #define SCSI_FIXED_SENSE_DATA_VALID_BIT 0x80
158
159 #define SCSI_FIXED_SENSE_DATA_BASE_LENGTH 18
160
161 // This value is used in the DATAPRES field of the SCSI Response IU.
162 #define SCSI_RESPONSE_DATA_PRES_SENSE_DATA 0x02
163
164 /**
165 * @name SCSI_SENSE_KEYS
166 *
167 * These constants delineate all of the SCSI protocol sense key constants
168 */
169 /*@{*/
170 #define SCSI_SENSE_NO_SENSE 0x00
171 #define SCSI_SENSE_RECOVERED_ERROR 0x01
172 #define SCSI_SENSE_NOT_READY 0x02
173 #define SCSI_SENSE_MEDIUM_ERROR 0x03
174 #define SCSI_SENSE_HARDWARE_ERROR 0x04
175 #define SCSI_SENSE_ILLEGAL_REQUEST 0x05
176 #define SCSI_SENSE_UNIT_ATTENTION 0x06
177 #define SCSI_SENSE_DATA_PROTECT 0x07
178 #define SCSI_SENSE_BLANK_CHECK 0x08
179 #define SCSI_SENSE_VENDOR_SPECIFIC 0x09
180 #define SCSI_SENSE_COPY_ABORTED 0x0A
181 #define SCSI_SENSE_ABORTED_COMMAND 0x0B
182 #define SCSI_SENSE_VOLUME_OVERFLOW 0x0D
183 #define SCSI_SENSE_MISCOMPARE 0x0E
184 /*@}*/
185
186 /**
187 * @name SCSI_ADDITIONAL_SENSE_CODES
188 *
189 * These constants delineate all of the SCSI protocol additional sense
190 * code constants.
191 */
192 /*@{*/
193 #define SCSI_ASC_NO_ADDITIONAL_SENSE 0x00
194 #define SCSI_ASC_INITIALIZING_COMMAND_REQUIRED 0x04
195 #define SCSI_ASC_LUN_SELF_TEST_IN_PROGRESS 0x04
196 #define SCSI_ASC_LUN_FORMAT_IN_PROGRESS 0x04
197 #define SCSI_ASC_LUN_NOT_RESPOND_TO_SELECTION 0x05
198 #define SCSI_ASC_UNRECOVERED_READ_ERROR 0x11
199 #define SCSI_ASC_INVALID_COMMAND_OPERATION_CODE 0x20
200 #define SCSI_ASC_LBA_OUT_OF_RANGE 0x21
201 #define SCSI_ASC_INVALID_FIELD_IN_CDB 0x24
202 #define SCSI_ASC_LOGICAL_UNIT_NOT_SUPPORTED 0x25
203 #define SCSI_ASC_INVALID_FIELD_IN_PARM_LIST 0x26
204 #define SCSI_ASC_WRITE_PROTECTED 0x27
205 #define SCSI_ASC_NOT_READY_TO_READY_CHANGE 0x28
206 #define SCSI_ASC_MEDIUM_FORMAT_CORRUPTED 0x31
207 #define SCSI_ASC_ENCLOSURE_SERVICES_UNAVAILABLE 0x35
208 #define SCSI_ASC_SAVING_PARMS_NOT_SUPPORTED 0x39
209 #define SCSI_ASC_MEDIUM_NOT_PRESENT 0x3A
210 #define SCSI_ASC_INTERNAL_TARGET_FAILURE 0x44
211 #define SCSI_ASC_IU_CRC_ERROR_DETECTED 0x47
212 #define SCSI_ASC_MEDIUM_REMOVAL_REQUEST 0x5A
213 #define SCSI_ASC_COMMAND_SEQUENCE_ERROR 0x2C
214 #define SCSI_ASC_MEDIA_LOAD_OR_EJECT_FAILED 0x53
215 #define SCSI_ASC_HARDWARE_IMPENDING_FAILURE 0x5D
216 #define SCSI_ASC_POWER_STATE_CHANGE 0x5E
217 #define SCSI_DIAGNOSTIC_FAILURE_ON_COMPONENT 0x40
218 #define SCSI_ASC_LOGICAL_UNIT_FAILED 0x4C
219 #define SCSI_ASC_ATA_DEVICE_FEATURE_NOT_ENABLED 0x67
220 #define SCSI_ASC_MICROCODE_HAS_CHANGED 0x3F
221 /*@}*/
222
223 /**
224 * @name SCSI_ADDITIONAL_SENSE_CODE_QUALIFIERS
225 *
226 * This enumeration contains all of the used SCSI protocol additional
227 * sense code qualifier constants.
228 */
229 /*@{*/
230 #define SCSI_ASCQ_NO_ADDITIONAL_SENSE 0x00
231 #define SCSI_ASCQ_INVALID_FIELD_IN_CDB 0x00
232 #define SCSI_ASCQ_INVALID_FIELD_IN_PARM_LIST 0x00
233 #define SCSI_ASCQ_LUN_NOT_RESPOND_TO_SELECTION 0x00
234 #define SCSI_ASCQ_INTERNAL_TARGET_FAILURE 0x00
235 #define SCSI_ASCQ_LBA_OUT_OF_RANGE 0x00
236 #define SCSI_ASCQ_MEDIUM_NOT_PRESENT 0x00
237 #define SCSI_ASCQ_NOT_READY_TO_READY_CHANGE 0x00
238 #define SCSI_ASCQ_WRITE_PROTECTED 0x00
239 #define SCSI_ASCQ_UNRECOVERED_READ_ERROR 0x00
240 #define SCSI_ASCQ_SAVING_PARMS_NOT_SUPPORTED 0x00
241 #define SCSI_ASCQ_INVALID_COMMAND_OPERATION_CODE 0x00
242 #define SCSI_ASCQ_MEDIUM_REMOVAL_REQUEST 0x01
243 #define SCSI_ASCQ_INITIALIZING_COMMAND_REQUIRED 0x02
244 #define SCSI_ASCQ_IU_CRC_ERROR_DETECTED 0x03
245 #define SCSI_ASCQ_LUN_FORMAT_IN_PROGRESS 0x04
246 #define SCSI_ASCQ_LUN_SELF_TEST_IN_PROGRESS 0x09
247 #define SCSI_ASCQ_GENERAL_HARD_DRIVE_FAILURE 0x10
248 #define SCSI_ASCQ_IDLE_CONDITION_ACTIVATE_BY_COMMAND 0x03
249 #define SCSI_ASCQ_STANDBY_CONDITION_ACTIVATE_BY_COMMAND 0x04
250 #define SCSI_ASCQ_POWER_STATE_CHANGE_TO_IDLE 0x42
251 #define SCSI_ASCQ_POWER_STATE_CHANGE_TO_STANDBY 0x43
252 #define SCSI_ASCQ_ATA_DEVICE_FEATURE_NOT_ENABLED 0x0B
253 #define SCSI_ASCQ_UNRECOVERED_READ_ERROR_AUTO_REALLOCATE_FAIL 0x04
254 #define SCSI_ASCQ_ATA_PASS_THROUGH_INFORMATION_AVAILABLE 0x1D
255 #define SCSI_ASCQ_MICROCODE_HAS_CHANGED 0x01
256 /*@}*/
257
258 /**
259 * @name SCSI_STATUS_CODES
260 *
261 * These constants define all of the used SCSI status values.
262 */
263 /*@{*/
264 #define SCSI_STATUS_GOOD 0x00
265 #define SCSI_STATUS_CHECK_CONDITION 0x02
266 #define SCSI_STATUS_CONDITION_MET 0x04
267 #define SCSI_STATUS_BUSY 0x08
268 #define SCSI_STATUS_TASKFULL 0x28
269 #define SCSI_STATUS_ACA 0x30
270 #define SCSI_STATUS_ABORT 0x40
271 /*@}*/
272
273 /**
274 * @name SCSI_OPERATION_CODES
275 *
276 * These constants delineate all of the SCSI command/operation codes.
277 */
278 /*@{*/
279 #define SCSI_INQUIRY 0x12
280 #define SCSI_READ_CAPACITY_10 0x25
281 #define SCSI_SERVICE_ACTION_IN_16 0x9E
282 #define SCSI_TEST_UNIT_READY 0x00
283 #define SCSI_START_STOP_UNIT 0x1B
284 #define SCSI_SYNCHRONIZE_CACHE_10 0x35
285 #define SCSI_SYNCHRONIZE_CACHE_16 0x91
286 #define SCSI_REQUEST_SENSE 0x03
287 #define SCSI_REPORT_LUNS 0xA0
288 #define SCSI_REASSIGN_BLOCKS 0x07
289 #define SCSI_READ_6 0x08
290 #define SCSI_READ_10 0x28
291 #define SCSI_READ_12 0xA8
292 #define SCSI_READ_16 0x88
293 #define SCSI_WRITE_6 0x0A
294 #define SCSI_WRITE_10 0x2A
295 #define SCSI_WRITE_12 0xAA
296 #define SCSI_WRITE_16 0x8A
297 #define SCSI_VERIFY_10 0x2F
298 #define SCSI_VERIFY_12 0xAF
299 #define SCSI_VERIFY_16 0x8F
300 #define SCSI_SEEK_6 0x01
301 #define SCSI_SEEK_10 0x02
302 #define SCSI_WRITE_VERIFY 0x2E
303 #define SCSI_FORMAT_UNIT 0x04
304 #define SCSI_READ_BUFFER 0x3C
305 #define SCSI_WRITE_BUFFER 0x3B
306 #define SCSI_SEND_DIAGNOSTIC 0x1D
307 #define SCSI_RECEIVE_DIAGNOSTIC 0x1C
308 #define SCSI_MODE_SENSE_6 0x1A
309 #define SCSI_MODE_SENSE_10 0x5A
310 #define SCSI_MODE_SELECT_6 0x15
311 #define SCSI_MODE_SELECT_10 0x55
312 #define SCSI_MAINTENANCE_IN 0xA3
313 #define SCSI_LOG_SENSE 0x4D
314 #define SCSI_LOG_SELECT 0x4C
315 #define SCSI_RESERVE_6 0x16
316 #define SCSI_RESERVE_10 0x56
317 #define SCSI_RELEASE_6 0x17
318 #define SCSI_RELEASE_10 0x57
319 #define SCSI_ATA_PASSTHRU_12 0xA1
320 #define SCSI_ATA_PASSTHRU_16 0x85
321 #define SCSI_WRITE_LONG_10 0x3F
322 #define SCSI_WRITE_LONG_16 0x9F
323 #define SCSI_PERSISTENT_RESERVE_IN 0x5E
324 #define SCSI_PERSISTENT_RESERVE_OUT 0x5F
325 #define SCSI_SECURITY_PROTOCOL_IN 0xA2
326 #define SCSI_SECURITY_PROTOCOL_OUT 0xB5
327 #define SCSI_UNMAP 0x42
328 #define SCSI_WRITE_AND_VERIFY_10 0x2E
329 #define SCSI_WRITE_AND_VERIFY_12 0xAE
330 #define SCSI_WRITE_AND_VERIFY_16 0x8E
331 /*@}*/
332
333 /**
334 * @name SCSI_SERVICE_ACTION_IN_CODES
335 *
336 * Service action in operations.
337 */
338 /*@{*/
339 #define SCSI_SERVICE_ACTION_IN_CODES_READ_CAPACITY_16 0x10
340 /*@}*/
341
342 /**
343 *
344 * Service action mask.
345 */
346 /*@{*/
347 #define SCSI_SERVICE_ACTION_MASK 0x1f
348 /*@}*/
349
350 /**
351 * @name SCSI_MAINTENANCE_IN_SERVICE_ACTION_CODES
352 *
353 * MAINTENANCE IN service action codes.
354 */
355 /*@{*/
356 #define SCSI_REPORT_TASK_MGMT 0x0D
357 #define SCSI_REPORT_OP_CODES 0x0C
358 /*@}*/
359
360 /**
361 * @name SCSI_MODE_PAGE_CONTROLS
362 *
363 * These constants delineate all of the used SCSI Mode Page control
364 * values.
365 */
366 /*@{*/
367 #define SCSI_MODE_SENSE_PC_CURRENT 0x0
368 #define SCSI_MODE_SENSE_PC_CHANGEABLE 0x1
369 #define SCSI_MODE_SENSE_PC_DEFAULT 0x2
370 #define SCSI_MODE_SENSE_PC_SAVED 0x3
371 /*@}*/
372
373 #define SCSI_MODE_SENSE_PC_SHIFT 0x06
374 #define SCSI_MODE_SENSE_PAGE_CODE_ENABLE 0x3F
375 #define SCSI_MODE_SENSE_DBD_ENABLE 0x08
376 #define SCSI_MODE_SENSE_LLBAA_ENABLE 0x10
377
378 #define SCSI_MODE_PAGE_CONTROL_D_SENSE_DISABLE 0x0
379 #define SCSI_MODE_PAGE_CONTROL_D_SENSE_ENABLE 0x1
380 /**
381 * @name SCSI_MODE_PAGE_CODES
382 *
383 * These constants delineate all of the used SCSI Mode Page codes.
384 */
385 /*@{*/
386 #define SCSI_MODE_PAGE_READ_WRITE_ERROR 0x01
387 #define SCSI_MODE_PAGE_DISCONNECT_RECONNECT 0x02
388 #define SCSI_MODE_PAGE_CACHING 0x08
389 #define SCSI_MODE_PAGE_CONTROL 0x0A
390 #define SCSI_MODE_PAGE_PROTOCOL_SPECIFIC_PORT 0x19
391 #define SCSI_MODE_PAGE_POWER_CONDITION 0x1A
392 #define SCSI_MODE_PAGE_INFORMATIONAL_EXCP_CONTROL 0x1C
393 #define SCSI_MODE_PAGE_ALL_PAGES 0x3F
394 /*@}*/
395
396 #define SCSI_MODE_SENSE_ALL_SUB_PAGES_CODE 0xFF
397 #define SCSI_MODE_SENSE_NO_SUB_PAGES_CODE 0x0
398 #define SCSI_MODE_SENSE_PROTOCOL_PORT_NUM_SUBPAGES 0x1
399 #define SCSI_MODE_PAGE_CACHE_PAGE_WCE_BIT 0x04
400 #define SCSI_MODE_PAGE_CACHE_PAGE_DRA_BIT 0x20
401 #define SCSI_MODE_PAGE_DEXCPT_ENABLE 0x08
402 #define SCSI_MODE_SENSE_HEADER_FUA_ENABLE 0x10
403 #define SCSI_MODE_PAGE_POWER_CONDITION_STANDBY 0x1
404 #define SCSI_MODE_PAGE_POWER_CONDITION_IDLE 0x2
405
406 #define SCSI_MODE_SENSE_6_HEADER_LENGTH 4
407 #define SCSI_MODE_SENSE_10_HEADER_LENGTH 8
408 #define SCSI_MODE_SENSE_STD_BLOCK_DESCRIPTOR_LENGTH 8
409 #define SCSI_MODE_SENSE_LLBA_BLOCK_DESCRIPTOR_LENGTH 16
410
411 #define SCSI_MODE_PAGE_INFORMATIONAL_EXCP_DXCPT_ENABLE 0x08
412 #define SCSI_MODE_PAGE_19_SAS_ID 0x6
413 #define SCSI_MODE_PAGE_19_SUB1_PAGE_NUM 0x1
414 #define SCSI_MODE_PAGE_19_SUB1_PC 0x59
415
416 #define SCSI_MODE_HEADER_MEDIUM_TYPE_SBC 0x00
417
418 //Mode Select constrains related masks value
419 #define SCSI_MODE_SELECT_PF_BIT 0x1
420 #define SCSI_MODE_SELECT_PF_MASK 0x10
421 #define SCSI_MODE_SELECT_MODE_PAGE_MRIE_BYTE 0x6
422 #define SCSI_MODE_SELECT_MODE_PAGE_MRIE_MASK 0x0F
423 #define SCSI_MODE_SELECT_MODE_PAGE_SPF_MASK 0x40
424 #define SCSI_MODE_SELECT_MODE_PAGE_01_AWRE_MASK 0x80
425 #define SCSI_MODE_SELECT_MODE_PAGE_01_ARRE_MASK 0x40
426 #define SCSI_MODE_SELECT_MODE_PAGE_01_RC_ERBITS_MASK 0x1F
427 #define SCSI_MODE_SELECT_MODE_PAGE_08_FSW_LBCSS_NVDIS 0xC1
428 #define SCSI_MODE_SELECT_MODE_PAGE_1C_PERF_TEST 0x84
429 #define SCSI_MODE_SELECT_MODE_PAGE_0A_TST_TMF_RLEC 0xF1
430 #define SCSI_MODE_SELECT_MODE_PAGE_0A_MODIFIER 0xE0
431 #define SCSI_MODE_SELECT_MODE_PAGE_0A_UA_SWP 0x38
432 #define SCSI_MODE_SELECT_MODE_PAGE_0A_TAS_AUTO 0x47
433 #define SCSI_MODE_SELECT_MODE_PAGE_D_SENSE 0x4
434
435 #define SCSI_CONTROL_BYTE_NACA_BIT_ENABLE 0x04
436 #define SCSI_MOVE_FUA_BIT_ENABLE 0x08
437 #define SCSI_READ_CAPACITY_PMI_BIT_ENABLE 0x01
438 #define SCSI_READ_CAPACITY_10_DATA_LENGTH 8
439 #define SCSI_READ_CAPACITY_16_DATA_LENGTH 32
440
441 // Inquiry constants
442 #define SCSI_INQUIRY_EVPD_ENABLE 0x01
443 #define SCSI_INQUIRY_PAGE_CODE_OFFSET 0x02
444 #define SCSI_INQUIRY_SUPPORTED_PAGES_PAGE 0x00
445 #define SCSI_INQUIRY_UNIT_SERIAL_NUM_PAGE 0x80
446 #define SCSI_INQUIRY_DEVICE_ID_PAGE 0x83
447 #define SCSI_INQUIRY_ATA_INFORMATION_PAGE 0x89
448 #define SCSI_INQUIRY_BLOCK_DEVICE_PAGE 0xB1
449 #define SCSI_INQUIRY_BLOCK_DEVICE_LENGTH 0x3C
450 #define SCSI_INQUIRY_STANDARD_ALLOCATION_LENGTH 0x24 //36
451
452 #define SCSI_REQUEST_SENSE_ALLOCATION_LENGTH 0xFC //252
453
454 /** Defines the log page codes that are use in gathing Smart data
455 */
456 #define SCSI_LOG_PAGE_SUPPORTED_PAGES 0x00
457 #define SCSI_LOG_PAGE_INFORMATION_EXCEPTION 0x2F
458 #define SCSI_LOG_PAGE_SELF_TEST 0x10
459
460 /**
461 * @name SCSI_INQUIRY_VPD
462 *
463 * The following are constants used with vital product data inquiry pages.
464 * Values are already shifted into the proper nibble location.
465 */
466 /*@{*/
467 #define SCSI_PIV_ENABLE 0x80
468 #define SCSI_LUN_ASSOCIATION 0x00
469 #define SCSI_TARGET_PORT_ASSOCIATION 0x10
470
471 #define SCSI_VEN_UNIQUE_IDENTIFIER_TYPE 0x00
472 #define SCSI_NAA_IDENTIFIER_TYPE 0x03
473
474 #define SCSI_T10_IDENTIFIER_TYPE 0x01
475 #define SCSI_BINARY_CODE_SET 0x01
476 #define SCSI_ASCII_CODE_SET 0x02
477 #define SCSI_FC_PROTOCOL_IDENTIFIER 0x00
478 #define SCSI_SAS_PROTOCOL_IDENTIFIER 0x60
479 /*@}*/
480
481 #define SCSI_VERIFY_BYTCHK_ENABLED 0x02
482
483 #define SCSI_SYNCHRONIZE_CACHE_IMMED_ENABLED 0x02
484 /**
485 * @name SCSI_START_STOP_UNIT_POWER_CONDITION_CODES
486 *
487 * The following are SCSI Start Stop Unit command Power Condition codes.
488 */
489 /*@{*/
490 #define SCSI_START_STOP_UNIT_POWER_CONDITION_START_VALID 0x0
491 #define SCSI_START_STOP_UNIT_POWER_CONDITION_ACTIVE 0x1
492 #define SCSI_START_STOP_UNIT_POWER_CONDITION_IDLE 0x2
493 #define SCSI_START_STOP_UNIT_POWER_CONDITION_STANDBY 0x3
494 #define SCSI_START_STOP_UNIT_POWER_CONDITION_LU_CONTROL 0x7
495 #define SCSI_START_STOP_UNIT_POWER_CONDITION_FORCE_S_CONTROL 0xB
496 /*@}*/
497
498 #define SCSI_START_STOP_UNIT_IMMED_MASK 0x1
499 #define SCSI_START_STOP_UNIT_IMMED_SHIFT 0
500
501 #define SCSI_START_STOP_UNIT_START_BIT_MASK 0x1
502 #define SCSI_START_STOP_UNIT_START_BIT_SHIFT 0
503
504 #define SCSI_START_STOP_UNIT_LOEJ_BIT_MASK 0x2
505 #define SCSI_START_STOP_UNIT_LOEJ_BIT_SHIFT 1
506
507 #define SCSI_START_STOP_UNIT_NO_FLUSH_MASK 0x4
508 #define SCSI_START_STOP_UNIT_NO_FLUSH_SHIFT 2
509
510 #define SCSI_START_STOP_UNIT_POWER_CONDITION_MODIFIER_MASK 0xF
511 #define SCSI_START_STOP_UNIT_POWER_CONDITION_MODIFIER_SHIFT 0
512
513 #define SCSI_START_STOP_UNIT_POWER_CONDITION_MASK 0xF0
514 #define SCSI_START_STOP_UNIT_POWER_CONDITION_SHIFT 4
515
516 #define SCSI_LOG_SENSE_PC_FIELD_MASK 0xC0
517 #define SCSI_LOG_SENSE_PC_FIELD_SHIFT 6
518
519 #define SCSI_LOG_SENSE_PAGE_CODE_FIELD_MASK 0x3F
520 #define SCSI_LOG_SENSE_PAGE_CODE_FIELD_SHIFT 0
521
522 /**
523 * @name MRIE - Method of reporting informational exceptions codes
524 */
525 /*@{*/
526 #define NO_REPORTING_INFO_EXCEPTION_CONDITION 0x0
527 #define ASYNCHRONOUS_EVENT_REPORTING 0x1
528 #define ESTABLISH_UNIT_ATTENTION_CONDITION 0x2
529 #define CONDITIONALLY_GENERATE_RECOVERED_ERROR 0x3
530 #define UNCONDITIONALLY_GENERATE_RECOVERED_ERROR 0x4
531 #define GENERATE_NO_SENSE 0x5
532 #define REPORT_INFO_EXCEPTION_CONDITION_ON_REQUEST 0x6
533 /*@}*/
534
535 #define SCSI_INFORMATION_EXCEPTION_DEXCPT_BIT 0x08
536
537 //Reassign Blocks masks
538 #define SCSI_REASSIGN_BLOCKS_LONGLBA_BIT 0x02
539 #define SCSI_REASSIGN_BLOCKS_LONGLIST_BIT 0x01
540
541 #endif // _SCSI_H_
542
Cache object: e5b233330606ea1a7e5a201eddb22f03
|