1230557Sjimharris/*-
2230557Sjimharris * This file is provided under a dual BSD/GPLv2 license.  When using or
3230557Sjimharris * redistributing this file, you may do so under either license.
4230557Sjimharris *
5230557Sjimharris * GPL LICENSE SUMMARY
6230557Sjimharris *
7230557Sjimharris * Copyright(c) 2008 - 2011 Intel Corporation. All rights reserved.
8230557Sjimharris *
9230557Sjimharris * This program is free software; you can redistribute it and/or modify
10230557Sjimharris * it under the terms of version 2 of the GNU General Public License as
11230557Sjimharris * published by the Free Software Foundation.
12230557Sjimharris *
13230557Sjimharris * This program is distributed in the hope that it will be useful, but
14230557Sjimharris * WITHOUT ANY WARRANTY; without even the implied warranty of
15230557Sjimharris * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16230557Sjimharris * General Public License for more details.
17230557Sjimharris *
18230557Sjimharris * You should have received a copy of the GNU General Public License
19230557Sjimharris * along with this program; if not, write to the Free Software
20230557Sjimharris * Foundation, Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
21230557Sjimharris * The full GNU General Public License is included in this distribution
22230557Sjimharris * in the file called LICENSE.GPL.
23230557Sjimharris *
24230557Sjimharris * BSD LICENSE
25230557Sjimharris *
26230557Sjimharris * Copyright(c) 2008 - 2010 Intel Corporation. All rights reserved.
27230557Sjimharris * All rights reserved.
28230557Sjimharris *
29230557Sjimharris * Redistribution and use in source and binary forms, with or without
30230557Sjimharris * modification, are permitted provided that the following conditions
31230557Sjimharris * are met:
32230557Sjimharris *
33230557Sjimharris *   * Redistributions of source code must retain the above copyright
34230557Sjimharris *     notice, this list of conditions and the following disclaimer.
35230557Sjimharris *   * Redistributions in binary form must reproduce the above copyright
36230557Sjimharris *     notice, this list of conditions and the following disclaimer in
37230557Sjimharris *     the documentation and/or other materials provided with the
38230557Sjimharris *     distribution.
39230557Sjimharris *
40230557Sjimharris * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
41230557Sjimharris * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
42230557Sjimharris * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
43230557Sjimharris * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
44230557Sjimharris * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
45230557Sjimharris * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
46230557Sjimharris * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
47230557Sjimharris * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
48230557Sjimharris * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
49230557Sjimharris * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
50230557Sjimharris * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
51230557Sjimharris *
52230557Sjimharris * $FreeBSD$
53230557Sjimharris */
54230557Sjimharris/**
55230557Sjimharris * @file
56230557Sjimharris * @brief This file defines all of the SCSI related constants, enumerations,
57230557Sjimharris *        and types.  Please note that this file does not necessarily contain
58230557Sjimharris *        an exhaustive list of all constants, commands, sub-commands, etc.
59230557Sjimharris */
60230557Sjimharris
61230557Sjimharris#ifndef _SCSI_H__
62230557Sjimharris#define _SCSI_H__
63230557Sjimharris
64230557Sjimharris
65230557Sjimharris//******************************************************************************
66230557Sjimharris//* C O N S T A N T S   A N D   M A C R O S
67230557Sjimharris//******************************************************************************
68230557Sjimharris
69230557Sjimharris/**
70230557Sjimharris * @enum _SCSI_TASK_MGMT_REQUEST_CODES
71230557Sjimharris *
72230557Sjimharris * @brief This enumberation contains the constants to be used for SCSI task
73230557Sjimharris *        management request codes.  SAM does not specify any particular
74230557Sjimharris *        values for these codes so constants used here are the same as
75230557Sjimharris *        those specified in SAS.
76230557Sjimharris */
77230557Sjimharristypedef enum _SCSI_TASK_MGMT_REQUEST_CODES
78230557Sjimharris{
79230557Sjimharris   SCSI_TASK_REQUEST_ABORT_TASK           = 0x01,
80230557Sjimharris   SCSI_TASK_REQUEST_ABORT_TASK_SET       = 0x02,
81230557Sjimharris   SCSI_TASK_REQUEST_CLEAR_TASK_SET       = 0x04,
82230557Sjimharris   SCSI_TASK_REQUEST_LOGICAL_UNIT_RESET   = 0x08,
83230557Sjimharris   SCSI_TASK_REQUEST_I_T_NEXUS_RESET      = 0x10,
84230557Sjimharris   SCSI_TASK_REQUEST_CLEAR_ACA            = 0x40,
85230557Sjimharris   SCSI_TASK_REQUEST_QUERY_TASK           = 0x80,
86230557Sjimharris   SCSI_TASK_REQUEST_QUERY_TASK_SET       = 0x81,
87230557Sjimharris   SCSI_TASK_REQUEST_QUERY_UNIT_ATTENTION = 0x82,
88230557Sjimharris
89230557Sjimharris} SCSI_TASK_MGMT_REQUEST_CODES;
90230557Sjimharris
91230557Sjimharris/**
92230557Sjimharris * @enum _SCSI_TASK_MGMT_RESPONSE_CODES
93230557Sjimharris *
94230557Sjimharris * @brief This enumeration contains all of the SCSI task management response
95230557Sjimharris *        codes.
96230557Sjimharris */
97230557Sjimharristypedef enum _SCSI_TASK_MGMT_RESPONSE_CODES
98230557Sjimharris{
99230557Sjimharris   SCSI_TASK_MGMT_FUNC_COMPLETE      = 0,
100230557Sjimharris   SCSI_INVALID_FRAME                = 2,
101230557Sjimharris   SCSI_TASK_MGMT_FUNC_NOT_SUPPORTED = 4,
102230557Sjimharris   SCSI_TASK_MGMT_FUNC_FAILED        = 5,
103230557Sjimharris   SCSI_TASK_MGMT_FUNC_SUCCEEDED     = 8,
104230557Sjimharris   SCSI_INVALID_LUN                  = 9
105230557Sjimharris} SCSI_TASK_MGMT_RESPONSE_CODES;
106230557Sjimharris
107230557Sjimharris/**
108230557Sjimharris * @enum _SCSI_SENSE_RESPONSE_CODE
109230557Sjimharris *
110230557Sjimharris * @brief this enumeration depicts the types of sense data responses as
111230557Sjimharris *      per SPC-3.
112230557Sjimharris */
113230557Sjimharristypedef enum _SCSI_SENSE_RESPONSE_CODE
114230557Sjimharris{
115230557Sjimharris   SCSI_FIXED_CURRENT_RESPONSE_CODE       = 0x70,
116230557Sjimharris   SCSI_FIXED_DEFERRED_RESPONSE_CODE      = 0x71,
117230557Sjimharris   SCSI_DESCRIPTOR_CURRENT_RESPONSE_CODE  = 0x72,
118230557Sjimharris   SCSI_DESCRIPTOR_DEFERRED_RESPONSE_CODE = 0x73
119230557Sjimharris
120230557Sjimharris} SCSI_SENSE_RESPONSE_CODE;
121230557Sjimharris
122230557Sjimharris/**
123230557Sjimharris * @enum _SCSI_SENSE_DATA_DESCRIPTOR_TYPE
124230557Sjimharris *
125230557Sjimharris * @brief this enumeration depicts the types of sense data descriptor as
126230557Sjimharris *      per SPC-4.
127230557Sjimharris */
128230557Sjimharristypedef enum _SCSI_SENSE_DATA_DESCRIPTOR_TYPE
129230557Sjimharris{
130230557Sjimharris    SCSI_INFORMATION_DESCRIPTOR_TYPE                = 0x00,
131230557Sjimharris    SCSI_CMD_SPECIFIC_DESCRIPTOR_TYPE            = 0x01,
132230557Sjimharris    SCSI_KEY_SPECIFIC_DESCRIPTOR_TYPE                = 0x02,
133230557Sjimharris    SCSI_FIELD_REPLACEABLE_UNIT_DESCRIPTOR_TYPE        = 0x03,
134230557Sjimharris    SCSI_STREAM_CMD_DESCRIPTOR_TYPE                     = 0x04,
135230557Sjimharris    SCSI_BLOCK_DESCRIPTOR_TYPE                         = 0x05,
136230557Sjimharris    SCSI_OSD_OBJ_IDENTIFICATION_DESCRIPTOR_TYPE      = 0x06,
137230557Sjimharris    SCSI_OSC_RESPONSE_INTEGRITY_DESCRIPTOR_TYPE      = 0x07,
138230557Sjimharris    SCSI_OSD_ATTR_IDENTIFICATION_DESCRIPTOR_TYPE     = 0x08,
139230557Sjimharris    SCSI_ATA_STATUS_RETURN_DESCRIPTOR_TYPE            = 0x09,
140230557Sjimharris    SCSI_PROGRESS_INDICATION_DESCRIPTOR_TYPE        = 0x0a,
141230557Sjimharris    SCSI_USER_DATA_SEGEMNT_REF_DESCRIPTOR_TYPE        = 0x0b
142230557Sjimharris} SCSI_SENSE_DATA_DESCRIPTOR_TYPE;
143230557Sjimharris
144230557Sjimharris#define SCSI_CMD_SPECIFIC_DESCRIPTOR_ADDITIONAL_LENGTH    0x0a
145230557Sjimharris#define SCSI_CMD_SPECIFIC_DESCRIPTOR_LENGTH                0x0c
146230557Sjimharris#define SCSI_INFORMATION_DESCRIPTOR_ADDITIONAL_LENGTH    0x0a
147230557Sjimharris#define SCSI_INFORMATION_DESCRIPTOR_LENGTH                0x0c
148230557Sjimharris#define SCSI_BLOCK_DESCRIPTOR_ADDITIONAL_LENGTH            0x2
149230557Sjimharris#define SCSI_BLOCK_DESCRIPTOR_LENGTH                    0x4
150230557Sjimharris
151230557Sjimharris#define SCSI_SENSE_DATA_DESC_BIT    0x01
152230557Sjimharris
153230557Sjimharris// This constant represents the valid bit located in byte 0 of a FIXED
154230557Sjimharris// format sense data.
155230557Sjimharris#define SCSI_FIXED_SENSE_DATA_VALID_BIT   0x80
156230557Sjimharris
157230557Sjimharris#define SCSI_FIXED_SENSE_DATA_BASE_LENGTH 18
158230557Sjimharris
159230557Sjimharris// This value is used in the DATAPRES field of the SCSI Response IU.
160230557Sjimharris#define SCSI_RESPONSE_DATA_PRES_SENSE_DATA 0x02
161230557Sjimharris
162230557Sjimharris/**
163230557Sjimharris * @name SCSI_SENSE_KEYS
164230557Sjimharris *
165230557Sjimharris * These constants delineate all of the SCSI protocol sense key constants
166230557Sjimharris */
167230557Sjimharris/*@{*/
168230557Sjimharris#define SCSI_SENSE_NO_SENSE        0x00
169230557Sjimharris#define SCSI_SENSE_RECOVERED_ERROR 0x01
170230557Sjimharris#define SCSI_SENSE_NOT_READY       0x02
171230557Sjimharris#define SCSI_SENSE_MEDIUM_ERROR    0x03
172230557Sjimharris#define SCSI_SENSE_HARDWARE_ERROR  0x04
173230557Sjimharris#define SCSI_SENSE_ILLEGAL_REQUEST 0x05
174230557Sjimharris#define SCSI_SENSE_UNIT_ATTENTION  0x06
175230557Sjimharris#define SCSI_SENSE_DATA_PROTECT    0x07
176230557Sjimharris#define SCSI_SENSE_BLANK_CHECK     0x08
177230557Sjimharris#define SCSI_SENSE_VENDOR_SPECIFIC 0x09
178230557Sjimharris#define SCSI_SENSE_COPY_ABORTED    0x0A
179230557Sjimharris#define SCSI_SENSE_ABORTED_COMMAND 0x0B
180230557Sjimharris#define SCSI_SENSE_VOLUME_OVERFLOW 0x0D
181230557Sjimharris#define SCSI_SENSE_MISCOMPARE      0x0E
182230557Sjimharris/*@}*/
183230557Sjimharris
184230557Sjimharris/**
185230557Sjimharris * @name SCSI_ADDITIONAL_SENSE_CODES
186230557Sjimharris *
187230557Sjimharris * These constants delineate all of the SCSI protocol additional sense
188230557Sjimharris * code constants.
189230557Sjimharris */
190230557Sjimharris/*@{*/
191230557Sjimharris#define SCSI_ASC_NO_ADDITIONAL_SENSE             0x00
192230557Sjimharris#define SCSI_ASC_INITIALIZING_COMMAND_REQUIRED   0x04
193230557Sjimharris#define SCSI_ASC_LUN_SELF_TEST_IN_PROGRESS       0x04
194230557Sjimharris#define SCSI_ASC_LUN_FORMAT_IN_PROGRESS          0x04
195230557Sjimharris#define SCSI_ASC_LUN_NOT_RESPOND_TO_SELECTION    0x05
196230557Sjimharris#define SCSI_ASC_UNRECOVERED_READ_ERROR          0x11
197230557Sjimharris#define SCSI_ASC_INVALID_COMMAND_OPERATION_CODE  0x20
198230557Sjimharris#define SCSI_ASC_LBA_OUT_OF_RANGE                0x21
199230557Sjimharris#define SCSI_ASC_INVALID_FIELD_IN_CDB            0x24
200230557Sjimharris#define SCSI_ASC_LOGICAL_UNIT_NOT_SUPPORTED      0x25
201230557Sjimharris#define SCSI_ASC_INVALID_FIELD_IN_PARM_LIST      0x26
202230557Sjimharris#define SCSI_ASC_WRITE_PROTECTED                 0x27
203230557Sjimharris#define SCSI_ASC_NOT_READY_TO_READY_CHANGE       0x28
204230557Sjimharris#define SCSI_ASC_MEDIUM_FORMAT_CORRUPTED         0x31
205230557Sjimharris#define SCSI_ASC_ENCLOSURE_SERVICES_UNAVAILABLE  0x35
206230557Sjimharris#define SCSI_ASC_SAVING_PARMS_NOT_SUPPORTED      0x39
207230557Sjimharris#define SCSI_ASC_MEDIUM_NOT_PRESENT              0x3A
208230557Sjimharris#define SCSI_ASC_INTERNAL_TARGET_FAILURE         0x44
209230557Sjimharris#define SCSI_ASC_IU_CRC_ERROR_DETECTED           0x47
210230557Sjimharris#define SCSI_ASC_MEDIUM_REMOVAL_REQUEST          0x5A
211230557Sjimharris#define SCSI_ASC_COMMAND_SEQUENCE_ERROR          0x2C
212230557Sjimharris#define SCSI_ASC_MEDIA_LOAD_OR_EJECT_FAILED      0x53
213230557Sjimharris#define SCSI_ASC_HARDWARE_IMPENDING_FAILURE      0x5D
214230557Sjimharris#define SCSI_ASC_POWER_STATE_CHANGE              0x5E
215230557Sjimharris#define SCSI_DIAGNOSTIC_FAILURE_ON_COMPONENT     0x40
216230557Sjimharris#define SCSI_ASC_LOGICAL_UNIT_FAILED             0x4C
217230557Sjimharris#define SCSI_ASC_ATA_DEVICE_FEATURE_NOT_ENABLED  0x67
218230557Sjimharris#define SCSI_ASC_MICROCODE_HAS_CHANGED           0x3F
219230557Sjimharris/*@}*/
220230557Sjimharris
221230557Sjimharris/**
222230557Sjimharris * @name SCSI_ADDITIONAL_SENSE_CODE_QUALIFIERS
223230557Sjimharris *
224230557Sjimharris * This enumeration contains all of the used SCSI protocol additional
225230557Sjimharris * sense code qualifier constants.
226230557Sjimharris */
227230557Sjimharris/*@{*/
228230557Sjimharris#define SCSI_ASCQ_NO_ADDITIONAL_SENSE                            0x00
229230557Sjimharris#define SCSI_ASCQ_INVALID_FIELD_IN_CDB                           0x00
230230557Sjimharris#define SCSI_ASCQ_INVALID_FIELD_IN_PARM_LIST                     0x00
231230557Sjimharris#define SCSI_ASCQ_LUN_NOT_RESPOND_TO_SELECTION                   0x00
232230557Sjimharris#define SCSI_ASCQ_INTERNAL_TARGET_FAILURE                        0x00
233230557Sjimharris#define SCSI_ASCQ_LBA_OUT_OF_RANGE                               0x00
234230557Sjimharris#define SCSI_ASCQ_MEDIUM_NOT_PRESENT                             0x00
235230557Sjimharris#define SCSI_ASCQ_NOT_READY_TO_READY_CHANGE                      0x00
236230557Sjimharris#define SCSI_ASCQ_WRITE_PROTECTED                                0x00
237230557Sjimharris#define SCSI_ASCQ_UNRECOVERED_READ_ERROR                         0x00
238230557Sjimharris#define SCSI_ASCQ_SAVING_PARMS_NOT_SUPPORTED                     0x00
239230557Sjimharris#define SCSI_ASCQ_INVALID_COMMAND_OPERATION_CODE                 0x00
240230557Sjimharris#define SCSI_ASCQ_MEDIUM_REMOVAL_REQUEST                         0x01
241230557Sjimharris#define SCSI_ASCQ_INITIALIZING_COMMAND_REQUIRED                  0x02
242230557Sjimharris#define SCSI_ASCQ_IU_CRC_ERROR_DETECTED                          0x03
243230557Sjimharris#define SCSI_ASCQ_LUN_FORMAT_IN_PROGRESS                         0x04
244230557Sjimharris#define SCSI_ASCQ_LUN_SELF_TEST_IN_PROGRESS                      0x09
245230557Sjimharris#define SCSI_ASCQ_GENERAL_HARD_DRIVE_FAILURE                     0x10
246230557Sjimharris#define SCSI_ASCQ_IDLE_CONDITION_ACTIVATE_BY_COMMAND             0x03
247230557Sjimharris#define SCSI_ASCQ_STANDBY_CONDITION_ACTIVATE_BY_COMMAND          0x04
248230557Sjimharris#define SCSI_ASCQ_POWER_STATE_CHANGE_TO_IDLE                     0x42
249230557Sjimharris#define SCSI_ASCQ_POWER_STATE_CHANGE_TO_STANDBY                  0x43
250230557Sjimharris#define SCSI_ASCQ_ATA_DEVICE_FEATURE_NOT_ENABLED                 0x0B
251230557Sjimharris#define SCSI_ASCQ_UNRECOVERED_READ_ERROR_AUTO_REALLOCATE_FAIL    0x04
252230557Sjimharris#define SCSI_ASCQ_ATA_PASS_THROUGH_INFORMATION_AVAILABLE         0x1D
253230557Sjimharris#define SCSI_ASCQ_MICROCODE_HAS_CHANGED                          0x01
254230557Sjimharris/*@}*/
255230557Sjimharris
256230557Sjimharris/**
257230557Sjimharris * @name SCSI_STATUS_CODES
258230557Sjimharris *
259230557Sjimharris * These constants define all of the used SCSI status values.
260230557Sjimharris */
261230557Sjimharris/*@{*/
262230557Sjimharris#define SCSI_STATUS_GOOD            0x00
263230557Sjimharris#define SCSI_STATUS_CHECK_CONDITION 0x02
264230557Sjimharris#define SCSI_STATUS_CONDITION_MET   0x04
265230557Sjimharris#define SCSI_STATUS_BUSY            0x08
266230557Sjimharris#define SCSI_STATUS_TASKFULL        0x28
267230557Sjimharris#define SCSI_STATUS_ACA             0x30
268230557Sjimharris#define SCSI_STATUS_ABORT           0x40
269230557Sjimharris/*@}*/
270230557Sjimharris
271230557Sjimharris/**
272230557Sjimharris * @name SCSI_OPERATION_CODES
273230557Sjimharris *
274230557Sjimharris * These constants delineate all of the SCSI command/operation codes.
275230557Sjimharris */
276230557Sjimharris/*@{*/
277230557Sjimharris#define SCSI_INQUIRY                0x12
278230557Sjimharris#define SCSI_READ_CAPACITY_10       0x25
279230557Sjimharris#define SCSI_SERVICE_ACTION_IN_16   0x9E
280230557Sjimharris#define SCSI_TEST_UNIT_READY        0x00
281230557Sjimharris#define SCSI_START_STOP_UNIT        0x1B
282230557Sjimharris#define SCSI_SYNCHRONIZE_CACHE_10   0x35
283230557Sjimharris#define SCSI_SYNCHRONIZE_CACHE_16   0x91
284230557Sjimharris#define SCSI_REQUEST_SENSE          0x03
285230557Sjimharris#define SCSI_REPORT_LUNS            0xA0
286230557Sjimharris#define SCSI_REASSIGN_BLOCKS        0x07
287230557Sjimharris#define SCSI_READ_6                 0x08
288230557Sjimharris#define SCSI_READ_10                0x28
289230557Sjimharris#define SCSI_READ_12                0xA8
290230557Sjimharris#define SCSI_READ_16                0x88
291230557Sjimharris#define SCSI_WRITE_6                0x0A
292230557Sjimharris#define SCSI_WRITE_10               0x2A
293230557Sjimharris#define SCSI_WRITE_12               0xAA
294230557Sjimharris#define SCSI_WRITE_16               0x8A
295230557Sjimharris#define SCSI_VERIFY_10              0x2F
296230557Sjimharris#define SCSI_VERIFY_12              0xAF
297230557Sjimharris#define SCSI_VERIFY_16              0x8F
298230557Sjimharris#define SCSI_SEEK_6                 0x01
299230557Sjimharris#define SCSI_SEEK_10                0x02
300230557Sjimharris#define SCSI_WRITE_VERIFY           0x2E
301230557Sjimharris#define SCSI_FORMAT_UNIT            0x04
302230557Sjimharris#define SCSI_READ_BUFFER            0x3C
303230557Sjimharris#define SCSI_WRITE_BUFFER           0x3B
304230557Sjimharris#define SCSI_SEND_DIAGNOSTIC        0x1D
305230557Sjimharris#define SCSI_RECEIVE_DIAGNOSTIC     0x1C
306230557Sjimharris#define SCSI_MODE_SENSE_6           0x1A
307230557Sjimharris#define SCSI_MODE_SENSE_10          0x5A
308230557Sjimharris#define SCSI_MODE_SELECT_6          0x15
309230557Sjimharris#define SCSI_MODE_SELECT_10         0x55
310230557Sjimharris#define SCSI_MAINTENANCE_IN         0xA3
311230557Sjimharris#define SCSI_LOG_SENSE              0x4D
312230557Sjimharris#define SCSI_LOG_SELECT             0x4C
313230557Sjimharris#define SCSI_RESERVE_6              0x16
314230557Sjimharris#define SCSI_RESERVE_10             0x56
315230557Sjimharris#define SCSI_RELEASE_6              0x17
316230557Sjimharris#define SCSI_RELEASE_10             0x57
317230557Sjimharris#define SCSI_ATA_PASSTHRU_12        0xA1
318230557Sjimharris#define SCSI_ATA_PASSTHRU_16        0x85
319230557Sjimharris#define SCSI_WRITE_LONG_10          0x3F
320230557Sjimharris#define SCSI_WRITE_LONG_16          0x9F
321230557Sjimharris#define SCSI_PERSISTENT_RESERVE_IN  0x5E
322230557Sjimharris#define SCSI_PERSISTENT_RESERVE_OUT 0x5F
323230557Sjimharris#define SCSI_SECURITY_PROTOCOL_IN   0xA2
324230557Sjimharris#define SCSI_SECURITY_PROTOCOL_OUT  0xB5
325230557Sjimharris#define SCSI_UNMAP                  0x42
326230557Sjimharris#define SCSI_WRITE_AND_VERIFY_10    0x2E
327230557Sjimharris#define SCSI_WRITE_AND_VERIFY_12    0xAE
328230557Sjimharris#define SCSI_WRITE_AND_VERIFY_16    0x8E
329230557Sjimharris/*@}*/
330230557Sjimharris
331230557Sjimharris/**
332230557Sjimharris * @name SCSI_SERVICE_ACTION_IN_CODES
333230557Sjimharris *
334230557Sjimharris * Service action in operations.
335230557Sjimharris */
336230557Sjimharris/*@{*/
337230557Sjimharris#define SCSI_SERVICE_ACTION_IN_CODES_READ_CAPACITY_16     0x10
338230557Sjimharris/*@}*/
339230557Sjimharris
340230557Sjimharris/**
341230557Sjimharris*
342230557Sjimharris* Service action mask.
343230557Sjimharris */
344230557Sjimharris/*@{*/
345230557Sjimharris#define SCSI_SERVICE_ACTION_MASK 0x1f
346230557Sjimharris/*@}*/
347230557Sjimharris
348230557Sjimharris/**
349230557Sjimharris * @name SCSI_MAINTENANCE_IN_SERVICE_ACTION_CODES
350230557Sjimharris *
351230557Sjimharris * MAINTENANCE IN service action codes.
352230557Sjimharris */
353230557Sjimharris/*@{*/
354230557Sjimharris#define SCSI_REPORT_TASK_MGMT  0x0D
355230557Sjimharris#define SCSI_REPORT_OP_CODES   0x0C
356230557Sjimharris/*@}*/
357230557Sjimharris
358230557Sjimharris/**
359230557Sjimharris * @name SCSI_MODE_PAGE_CONTROLS
360230557Sjimharris *
361230557Sjimharris * These constants delineate all of the used SCSI Mode Page control
362230557Sjimharris * values.
363230557Sjimharris */
364230557Sjimharris/*@{*/
365230557Sjimharris#define SCSI_MODE_SENSE_PC_CURRENT     0x0
366230557Sjimharris#define SCSI_MODE_SENSE_PC_CHANGEABLE  0x1
367230557Sjimharris#define SCSI_MODE_SENSE_PC_DEFAULT     0x2
368230557Sjimharris#define SCSI_MODE_SENSE_PC_SAVED       0x3
369230557Sjimharris/*@}*/
370230557Sjimharris
371230557Sjimharris#define SCSI_MODE_SENSE_PC_SHIFT           0x06
372230557Sjimharris#define SCSI_MODE_SENSE_PAGE_CODE_ENABLE   0x3F
373230557Sjimharris#define SCSI_MODE_SENSE_DBD_ENABLE         0x08
374230557Sjimharris#define SCSI_MODE_SENSE_LLBAA_ENABLE       0x10
375230557Sjimharris
376230557Sjimharris#define SCSI_MODE_PAGE_CONTROL_D_SENSE_DISABLE  0x0
377230557Sjimharris#define SCSI_MODE_PAGE_CONTROL_D_SENSE_ENABLE    0x1
378230557Sjimharris/**
379230557Sjimharris * @name SCSI_MODE_PAGE_CODES
380230557Sjimharris *
381230557Sjimharris * These constants delineate all of the used SCSI Mode Page codes.
382230557Sjimharris */
383230557Sjimharris/*@{*/
384230557Sjimharris#define SCSI_MODE_PAGE_READ_WRITE_ERROR           0x01
385230557Sjimharris#define SCSI_MODE_PAGE_DISCONNECT_RECONNECT       0x02
386230557Sjimharris#define SCSI_MODE_PAGE_CACHING                    0x08
387230557Sjimharris#define SCSI_MODE_PAGE_CONTROL                    0x0A
388230557Sjimharris#define SCSI_MODE_PAGE_PROTOCOL_SPECIFIC_PORT     0x19
389230557Sjimharris#define SCSI_MODE_PAGE_POWER_CONDITION            0x1A
390230557Sjimharris#define SCSI_MODE_PAGE_INFORMATIONAL_EXCP_CONTROL 0x1C
391230557Sjimharris#define SCSI_MODE_PAGE_ALL_PAGES                  0x3F
392230557Sjimharris/*@}*/
393230557Sjimharris
394230557Sjimharris#define SCSI_MODE_SENSE_ALL_SUB_PAGES_CODE         0xFF
395230557Sjimharris#define SCSI_MODE_SENSE_NO_SUB_PAGES_CODE          0x0
396230557Sjimharris#define SCSI_MODE_SENSE_PROTOCOL_PORT_NUM_SUBPAGES 0x1
397230557Sjimharris#define SCSI_MODE_PAGE_CACHE_PAGE_WCE_BIT          0x04
398230557Sjimharris#define SCSI_MODE_PAGE_CACHE_PAGE_DRA_BIT          0x20
399230557Sjimharris#define SCSI_MODE_PAGE_DEXCPT_ENABLE               0x08
400230557Sjimharris#define SCSI_MODE_SENSE_HEADER_FUA_ENABLE          0x10
401230557Sjimharris#define SCSI_MODE_PAGE_POWER_CONDITION_STANDBY     0x1
402230557Sjimharris#define SCSI_MODE_PAGE_POWER_CONDITION_IDLE        0x2
403230557Sjimharris
404230557Sjimharris#define SCSI_MODE_SENSE_6_HEADER_LENGTH              4
405230557Sjimharris#define SCSI_MODE_SENSE_10_HEADER_LENGTH             8
406230557Sjimharris#define SCSI_MODE_SENSE_STD_BLOCK_DESCRIPTOR_LENGTH  8
407230557Sjimharris#define SCSI_MODE_SENSE_LLBA_BLOCK_DESCRIPTOR_LENGTH 16
408230557Sjimharris
409230557Sjimharris#define SCSI_MODE_PAGE_INFORMATIONAL_EXCP_DXCPT_ENABLE 0x08
410230557Sjimharris#define SCSI_MODE_PAGE_19_SAS_ID         0x6
411230557Sjimharris#define SCSI_MODE_PAGE_19_SUB1_PAGE_NUM  0x1
412230557Sjimharris#define SCSI_MODE_PAGE_19_SUB1_PC        0x59
413230557Sjimharris
414230557Sjimharris#define SCSI_MODE_HEADER_MEDIUM_TYPE_SBC 0x00
415230557Sjimharris
416230557Sjimharris//Mode Select constrains related masks value
417230557Sjimharris#define SCSI_MODE_SELECT_PF_BIT                       0x1
418230557Sjimharris#define SCSI_MODE_SELECT_PF_MASK                      0x10
419230557Sjimharris#define SCSI_MODE_SELECT_MODE_PAGE_MRIE_BYTE          0x6
420230557Sjimharris#define SCSI_MODE_SELECT_MODE_PAGE_MRIE_MASK          0x0F
421230557Sjimharris#define SCSI_MODE_SELECT_MODE_PAGE_SPF_MASK           0x40
422230557Sjimharris#define SCSI_MODE_SELECT_MODE_PAGE_01_AWRE_MASK       0x80
423230557Sjimharris#define SCSI_MODE_SELECT_MODE_PAGE_01_ARRE_MASK       0x40
424230557Sjimharris#define SCSI_MODE_SELECT_MODE_PAGE_01_RC_ERBITS_MASK  0x1F
425230557Sjimharris#define SCSI_MODE_SELECT_MODE_PAGE_08_FSW_LBCSS_NVDIS 0xC1
426230557Sjimharris#define SCSI_MODE_SELECT_MODE_PAGE_1C_PERF_TEST       0x84
427230557Sjimharris#define SCSI_MODE_SELECT_MODE_PAGE_0A_TST_TMF_RLEC    0xF1
428230557Sjimharris#define SCSI_MODE_SELECT_MODE_PAGE_0A_MODIFIER        0xE0
429230557Sjimharris#define SCSI_MODE_SELECT_MODE_PAGE_0A_UA_SWP          0x38
430230557Sjimharris#define SCSI_MODE_SELECT_MODE_PAGE_0A_TAS_AUTO        0x47
431230557Sjimharris#define SCSI_MODE_SELECT_MODE_PAGE_D_SENSE            0x4
432230557Sjimharris
433230557Sjimharris#define SCSI_CONTROL_BYTE_NACA_BIT_ENABLE  0x04
434230557Sjimharris#define SCSI_MOVE_FUA_BIT_ENABLE           0x08
435230557Sjimharris#define SCSI_READ_CAPACITY_PMI_BIT_ENABLE  0x01
436230557Sjimharris#define SCSI_READ_CAPACITY_10_DATA_LENGTH  8
437230557Sjimharris#define SCSI_READ_CAPACITY_16_DATA_LENGTH  32
438230557Sjimharris
439230557Sjimharris// Inquiry constants
440230557Sjimharris#define SCSI_INQUIRY_EVPD_ENABLE          0x01
441230557Sjimharris#define SCSI_INQUIRY_PAGE_CODE_OFFSET     0x02
442230557Sjimharris#define SCSI_INQUIRY_SUPPORTED_PAGES_PAGE 0x00
443230557Sjimharris#define SCSI_INQUIRY_UNIT_SERIAL_NUM_PAGE 0x80
444230557Sjimharris#define SCSI_INQUIRY_DEVICE_ID_PAGE       0x83
445230557Sjimharris#define SCSI_INQUIRY_ATA_INFORMATION_PAGE 0x89
446230557Sjimharris#define SCSI_INQUIRY_BLOCK_DEVICE_PAGE    0xB1
447230557Sjimharris#define SCSI_INQUIRY_BLOCK_DEVICE_LENGTH  0x3C
448230557Sjimharris#define SCSI_INQUIRY_STANDARD_ALLOCATION_LENGTH 0x24 //36
449230557Sjimharris
450230557Sjimharris#define SCSI_REQUEST_SENSE_ALLOCATION_LENGTH   0xFC  //252
451230557Sjimharris
452230557Sjimharris/** Defines the log page codes that are use in gathing Smart data
453230557Sjimharris*/
454230557Sjimharris#define SCSI_LOG_PAGE_SUPPORTED_PAGES       0x00
455230557Sjimharris#define SCSI_LOG_PAGE_INFORMATION_EXCEPTION 0x2F
456230557Sjimharris#define SCSI_LOG_PAGE_SELF_TEST             0x10
457230557Sjimharris
458230557Sjimharris/**
459230557Sjimharris * @name SCSI_INQUIRY_VPD
460230557Sjimharris *
461230557Sjimharris * The following are constants used with vital product data inquiry pages.
462230557Sjimharris * Values are already shifted into the proper nibble location.
463230557Sjimharris */
464230557Sjimharris/*@{*/
465230557Sjimharris#define SCSI_PIV_ENABLE                 0x80
466230557Sjimharris#define SCSI_LUN_ASSOCIATION            0x00
467230557Sjimharris#define SCSI_TARGET_PORT_ASSOCIATION    0x10
468230557Sjimharris
469230557Sjimharris#define SCSI_VEN_UNIQUE_IDENTIFIER_TYPE 0x00
470230557Sjimharris#define SCSI_NAA_IDENTIFIER_TYPE        0x03
471230557Sjimharris
472230557Sjimharris#define SCSI_T10_IDENTIFIER_TYPE        0x01
473230557Sjimharris#define SCSI_BINARY_CODE_SET            0x01
474230557Sjimharris#define SCSI_ASCII_CODE_SET             0x02
475230557Sjimharris#define SCSI_FC_PROTOCOL_IDENTIFIER     0x00
476230557Sjimharris#define SCSI_SAS_PROTOCOL_IDENTIFIER    0x60
477230557Sjimharris/*@}*/
478230557Sjimharris
479230557Sjimharris#define SCSI_VERIFY_BYTCHK_ENABLED      0x02
480230557Sjimharris
481230557Sjimharris#define SCSI_SYNCHRONIZE_CACHE_IMMED_ENABLED 0x02
482230557Sjimharris/**
483230557Sjimharris * @name SCSI_START_STOP_UNIT_POWER_CONDITION_CODES
484230557Sjimharris *
485230557Sjimharris * The following are SCSI Start Stop Unit command Power Condition codes.
486230557Sjimharris */
487230557Sjimharris/*@{*/
488230557Sjimharris#define SCSI_START_STOP_UNIT_POWER_CONDITION_START_VALID       0x0
489230557Sjimharris#define SCSI_START_STOP_UNIT_POWER_CONDITION_ACTIVE            0x1
490230557Sjimharris#define SCSI_START_STOP_UNIT_POWER_CONDITION_IDLE              0x2
491230557Sjimharris#define SCSI_START_STOP_UNIT_POWER_CONDITION_STANDBY           0x3
492230557Sjimharris#define SCSI_START_STOP_UNIT_POWER_CONDITION_LU_CONTROL        0x7
493230557Sjimharris#define SCSI_START_STOP_UNIT_POWER_CONDITION_FORCE_S_CONTROL   0xB
494230557Sjimharris/*@}*/
495230557Sjimharris
496230557Sjimharris#define SCSI_START_STOP_UNIT_IMMED_MASK            0x1
497230557Sjimharris#define SCSI_START_STOP_UNIT_IMMED_SHIFT           0
498230557Sjimharris
499230557Sjimharris#define SCSI_START_STOP_UNIT_START_BIT_MASK        0x1
500230557Sjimharris#define SCSI_START_STOP_UNIT_START_BIT_SHIFT       0
501230557Sjimharris
502230557Sjimharris#define SCSI_START_STOP_UNIT_LOEJ_BIT_MASK         0x2
503230557Sjimharris#define SCSI_START_STOP_UNIT_LOEJ_BIT_SHIFT        1
504230557Sjimharris
505230557Sjimharris#define SCSI_START_STOP_UNIT_NO_FLUSH_MASK         0x4
506230557Sjimharris#define SCSI_START_STOP_UNIT_NO_FLUSH_SHIFT        2
507230557Sjimharris
508230557Sjimharris#define SCSI_START_STOP_UNIT_POWER_CONDITION_MODIFIER_MASK   0xF
509230557Sjimharris#define SCSI_START_STOP_UNIT_POWER_CONDITION_MODIFIER_SHIFT  0
510230557Sjimharris
511230557Sjimharris#define SCSI_START_STOP_UNIT_POWER_CONDITION_MASK  0xF0
512230557Sjimharris#define SCSI_START_STOP_UNIT_POWER_CONDITION_SHIFT 4
513230557Sjimharris
514230557Sjimharris#define SCSI_LOG_SENSE_PC_FIELD_MASK      0xC0
515230557Sjimharris#define SCSI_LOG_SENSE_PC_FIELD_SHIFT     6
516230557Sjimharris
517230557Sjimharris#define SCSI_LOG_SENSE_PAGE_CODE_FIELD_MASK      0x3F
518230557Sjimharris#define SCSI_LOG_SENSE_PAGE_CODE_FIELD_SHIFT     0
519230557Sjimharris
520230557Sjimharris/**
521230557Sjimharris * @name MRIE - Method of reporting informational exceptions codes
522230557Sjimharris */
523230557Sjimharris/*@{*/
524230557Sjimharris#define NO_REPORTING_INFO_EXCEPTION_CONDITION      0x0
525230557Sjimharris#define ASYNCHRONOUS_EVENT_REPORTING               0x1
526230557Sjimharris#define ESTABLISH_UNIT_ATTENTION_CONDITION         0x2
527230557Sjimharris#define CONDITIONALLY_GENERATE_RECOVERED_ERROR     0x3
528230557Sjimharris#define UNCONDITIONALLY_GENERATE_RECOVERED_ERROR   0x4
529230557Sjimharris#define GENERATE_NO_SENSE                          0x5
530230557Sjimharris#define REPORT_INFO_EXCEPTION_CONDITION_ON_REQUEST 0x6
531230557Sjimharris/*@}*/
532230557Sjimharris
533230557Sjimharris#define SCSI_INFORMATION_EXCEPTION_DEXCPT_BIT      0x08
534230557Sjimharris
535230557Sjimharris//Reassign Blocks masks
536230557Sjimharris#define SCSI_REASSIGN_BLOCKS_LONGLBA_BIT           0x02
537230557Sjimharris#define SCSI_REASSIGN_BLOCKS_LONGLIST_BIT          0x01
538230557Sjimharris
539230557Sjimharris#endif // _SCSI_H_
540230557Sjimharris
541