| /* |
| * include/scst_const.h |
| * |
| * Copyright (C) 2004 - 2018 Vladislav Bolkhovitin <vst@vlnb.net> |
| * Copyright (C) 2007 - 2018 Western Digital Corporation |
| * |
| * Contains common SCST constants. This file supposed to be included |
| * from both kernel and user spaces. |
| * |
| * This program is free software; you can redistribute it and/or |
| * modify it under the terms of the GNU General Public License |
| * as published by the Free Software Foundation, version 2 |
| * of the License. |
| * |
| * This program is distributed in the hope that it will be useful, |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| * GNU General Public License for more details. |
| */ |
| |
| #ifndef __SCST_CONST_H |
| #define __SCST_CONST_H |
| |
| #ifndef GENERATING_UPSTREAM_PATCH |
| /* |
| * Include <linux/version.h> only when not converting this header file into |
| * a patch for upstream review because only then the symbol LINUX_VERSION_CODE |
| * is needed. |
| */ |
| #include <linux/version.h> |
| #endif |
| #include <scsi/scsi.h> |
| |
| #ifndef __KERNEL__ |
| #include <errno.h> |
| #endif |
| |
| #include "scst_itf_ver.h" |
| |
| /* |
| * Version numbers, the same as for the kernel. |
| * |
| * Changing it don't forget to change SCST_FIO_REV in scst_vdisk.c |
| * and FIO_REV in usr/fileio/common.h as well. |
| */ |
| #define SCST_VERSION(a, b, c, d) (((a) << 24) + ((b) << 16) + ((c) << 8) + d) |
| #define SCST_VERSION_CODE SCST_VERSION(3, 7, 0, 0) |
| #define SCST_VERSION_STRING_SUFFIX |
| #define SCST_VERSION_NAME "3.7.0" |
| #define SCST_VERSION_STRING SCST_VERSION_NAME SCST_VERSION_STRING_SUFFIX |
| |
| #define SCST_CONST_VERSION SCST_CONST_INTF_VER |
| |
| /*** Shared constants between user and kernel spaces ***/ |
| |
| /* Max size of CDB */ |
| #define SCST_MAX_CDB_SIZE 16 |
| |
| /* Max size of long CDB */ |
| #define SCST_MAX_LONG_CDB_SIZE 65536 |
| |
| /* Max size of various names */ |
| #define SCST_MAX_NAME 50 |
| |
| /* Max size of external names, like initiator name */ |
| #define SCST_MAX_EXTERNAL_NAME 256 |
| |
| /* Max LUN. 2 bits are used for addressing method. */ |
| #define SCST_MAX_LUN ((1 << (16-2)) - 1) |
| |
| /* |
| * Size of sense sufficient to carry standard sense data. |
| * Warning! It's allocated on stack! |
| */ |
| #define SCST_STANDARD_SENSE_LEN 18 |
| |
| /* Max size of sense */ |
| #define SCST_SENSE_BUFFERSIZE 252 |
| |
| /************************************************************* |
| ** Allowed delivery statuses for cmd's delivery_status |
| *************************************************************/ |
| |
| #define SCST_CMD_DELIVERY_SUCCESS 0 |
| #define SCST_CMD_DELIVERY_FAILED -1 |
| #define SCST_CMD_DELIVERY_ABORTED -2 |
| |
| /************************************************************* |
| ** Values for task management functions |
| *************************************************************/ |
| #define SCST_ABORT_TASK 0 |
| #define SCST_ABORT_TASK_SET 1 |
| #define SCST_CLEAR_ACA 2 |
| #define SCST_CLEAR_TASK_SET 3 |
| #define SCST_LUN_RESET 4 |
| #define SCST_TARGET_RESET 5 |
| |
| /** |
| ** SCST extensions |
| ** |
| ** !! Adding new extensions don't forget to update |
| ** !! scst_tm_fn_name as well! |
| **/ |
| |
| /* |
| * Notifies about I_T nexus loss event in the corresponding session. |
| * Aborts all tasks there and sets up the I_T Nexus loss UA. |
| */ |
| #define SCST_NEXUS_LOSS_SESS 6 |
| |
| /* Aborts all tasks in the corresponding session */ |
| #define SCST_ABORT_ALL_TASKS_SESS 7 |
| |
| /* |
| * Notifies about I_T nexus loss event. Aborts all tasks in all sessions |
| * of the tgt, and sets up in them the I_T Nexus loss UA. |
| */ |
| #define SCST_NEXUS_LOSS 8 |
| |
| /* Aborts all tasks in all sessions of the tgt */ |
| #define SCST_ABORT_ALL_TASKS 9 |
| |
| /* |
| * Internal TM command issued by SCST in scst_unregister_session(). It is the |
| * same as SCST_NEXUS_LOSS_SESS, except: |
| * - it doesn't call task_mgmt_affected_cmds_done() |
| * - it doesn't call task_mgmt_fn_done() |
| * - it doesn't queue NEXUS LOSS UA. |
| * |
| * Target drivers must NEVER use it!! |
| */ |
| #define SCST_UNREG_SESS_TM 10 |
| |
| /* |
| * Internal TM command issued by SCST in scst_pr_abort_reg(). It aborts all |
| * tasks from mcmd->origin_pr_cmd->tgt_dev, except mcmd->origin_pr_cmd. |
| * Additionally: |
| * - it signals pr_aborting_cmpl completion when all affected |
| * commands marked as aborted. |
| * - it doesn't call task_mgmt_affected_cmds_done() |
| * - it doesn't call task_mgmt_fn_done() |
| * - it calls mcmd->origin_pr_cmd->scst_cmd_done() when all affected |
| * commands aborted. |
| * |
| * Target drivers must NEVER use it!! |
| */ |
| #define SCST_PR_ABORT_ALL 11 |
| |
| /************************************************************* |
| ** Values for mgmt cmd's status field. Codes taken from iSCSI |
| *************************************************************/ |
| #define SCST_MGMT_STATUS_SUCCESS 0 |
| #define SCST_MGMT_STATUS_TASK_NOT_EXIST -1 |
| #define SCST_MGMT_STATUS_LUN_NOT_EXIST -2 |
| #define SCST_MGMT_STATUS_FN_NOT_SUPPORTED -5 |
| #define SCST_MGMT_STATUS_REJECTED -255 |
| #define SCST_MGMT_STATUS_FAILED -129 |
| |
| /* Extra status meaning that the received stage completed, not done */ |
| #define SCST_MGMT_STATUS_RECEIVED_STAGE_COMPLETED 200 |
| |
| /************************************************************* |
| ** SCSI LUN addressing methods. See also SAM-2 and the |
| ** section about eight byte LUNs. |
| *************************************************************/ |
| enum scst_lun_addr_method { |
| SCST_LUN_ADDR_METHOD_PERIPHERAL = 0, |
| SCST_LUN_ADDR_METHOD_FLAT = 1, |
| SCST_LUN_ADDR_METHOD_LUN = 2, |
| SCST_LUN_ADDR_METHOD_EXTENDED_LUN = 3, |
| }; |
| |
| /************************************************************* |
| ** SCSI task attribute queue types |
| *************************************************************/ |
| enum scst_cmd_queue_type { |
| SCST_CMD_QUEUE_UNTAGGED = 0, |
| SCST_CMD_QUEUE_SIMPLE, |
| SCST_CMD_QUEUE_ORDERED, |
| SCST_CMD_QUEUE_HEAD_OF_QUEUE, |
| SCST_CMD_QUEUE_ACA |
| }; |
| |
| /*************************************************************** |
| ** CDB flags. All must be single bit fit in int32. Bit fields |
| ** approach (unsigned int x:1) was not used, because those |
| ** flags supposed to be passed to the user space where another |
| ** compiler with another bitfields layout can be used. |
| ***************************************************************/ |
| enum scst_cdb_flags { |
| /* |
| * !! Both timeouts must be the lowest bits to match |
| * !! scst_generic_parse() expectations! |
| */ |
| SCST_SMALL_TIMEOUT = 0x0001, |
| SCST_LONG_TIMEOUT = 0x0002, |
| #define SCST_BOTH_TIMEOUTS (SCST_SMALL_TIMEOUT | SCST_LONG_TIMEOUT) |
| SCST_TRANSFER_LEN_TYPE_FIXED = 0x0004, |
| SCST_UNKNOWN_LBA = 0x0008, |
| SCST_UNKNOWN_LENGTH = 0x0010, |
| SCST_INFO_VALID = 0x0020, |
| |
| /* |
| * Set if LBA not defined for this CDB. The "NOT" approach |
| * was used to make sure that all dev handlers either init |
| * cmd->lba or set this flag (for backward compatibility) |
| */ |
| SCST_LBA_NOT_VALID = 0x0040, |
| |
| SCST_IMPLICIT_HQ = 0x0080, |
| SCST_SKIP_UA = 0x0100, |
| SCST_WRITE_MEDIUM = 0x0200, |
| /* |
| * Set if a command should be executed by the SCST core instead |
| * of by the device handler. |
| */ |
| SCST_LOCAL_CMD = 0x0400, |
| |
| /* |
| * Set if CDB is fully locally handled by SCST. Dev handlers |
| * parse() and dev_done() not called for such commands |
| */ |
| SCST_FULLY_LOCAL_CMD = 0x0800, |
| |
| SCST_REG_RESERVE_ALLOWED = 0x1000, |
| SCST_WRITE_EXCL_ALLOWED = 0x2000, |
| SCST_EXCL_ACCESS_ALLOWED = 0x4000, |
| #ifdef CONFIG_SCST_TEST_IO_IN_SIRQ |
| SCST_TEST_IO_IN_SIRQ_ALLOWED = 0x8000, |
| #endif |
| SCST_SERIALIZED = 0x10000, |
| SCST_STRICTLY_SERIALIZED = 0x20000|SCST_SERIALIZED, |
| SCST_CAN_GEN_3PARTY_COMMANDS = 0x40000, |
| SCST_DESCRIPTORS_BASED = 0x80000, |
| SCST_SCSI_ATOMIC = 0x100000, |
| }; |
| |
| /************************************************************* |
| ** Data direction aliases. Changing it don't forget to change |
| ** scst_to_tgt_dma_dir and SCST_DATA_DIR_MAX as well!! |
| *************************************************************/ |
| typedef enum scst_data_direction { |
| SCST_DATA_UNKNOWN = 0, |
| SCST_DATA_WRITE = 1, |
| SCST_DATA_READ = 2, |
| SCST_DATA_BIDI = (SCST_DATA_WRITE | SCST_DATA_READ), |
| SCST_DATA_NONE = 4, |
| } scst_data_direction; |
| |
| #define SCST_DATA_DIR_MAX (SCST_DATA_NONE+1) |
| |
| |
| /************************************************************* |
| ** Default suffix for targets with NULL names |
| *************************************************************/ |
| #define SCST_DEFAULT_TGT_NAME_SUFFIX "_target_" |
| |
| /************************************************************* |
| ** Sense manipulation and examination |
| *************************************************************/ |
| #define SCST_LOAD_SENSE(key_asc_ascq) key_asc_ascq |
| |
| static inline int scst_sense_valid(const uint8_t *sense) |
| { |
| return (sense != NULL) && ((sense[0] & 0x70) == 0x70); |
| } |
| |
| static inline int scst_no_sense(const uint8_t *sense) |
| { |
| return (sense != NULL) && (sense[2] == 0); |
| } |
| |
| static inline int scst_sense_response_code(const uint8_t *sense) |
| { |
| return sense[0] & 0x7F; |
| } |
| |
| /************************************************************* |
| ** Sense data for the appropriate errors. Can be used with |
| ** scst_set_cmd_error(). Column order: key, ASC, ASCQ. See |
| ** also http://www.t10.org/lists/asc-num.htm. |
| *************************************************************/ |
| |
| /* NO_SENSE is 0 */ |
| #define scst_sense_no_sense NO_SENSE, 0x00, 0 |
| |
| /* NOT_READY is 2 */ |
| #define scst_sense_format_in_progress NOT_READY, 0x04, 0x04 |
| #define scst_sense_alua_transitioning NOT_READY, 0x04, 0x0A |
| #define scst_sense_alua_standby NOT_READY, 0x04, 0x0B |
| #define scst_sense_alua_unav NOT_READY, 0x04, 0x0C |
| #define scst_sense_no_medium NOT_READY, 0x3a, 0 |
| |
| /* MEDIUM_ERROR is 3 */ |
| #define scst_sense_write_error MEDIUM_ERROR, 0x03, 0 |
| #define scst_sense_read_error MEDIUM_ERROR, 0x11, 0 |
| |
| /* HARDWARE_ERROR is 4 */ |
| #define scst_sense_hardw_error HARDWARE_ERROR, 0x44, 0 /* non-retriable */ |
| #define scst_sense_set_target_pgs_failed HARDWARE_ERROR, 0x67, 0xA |
| |
| /* ILLEGAL_REQUEST is 5 */ |
| #define scst_sense_operation_in_progress ILLEGAL_REQUEST, 0x0, 0x16 |
| #define scst_sense_parameter_list_length_invalid ILLEGAL_REQUEST, 0x1A, 0 |
| #define scst_sense_invalid_opcode ILLEGAL_REQUEST, 0x20, 0 |
| #define scst_sense_block_out_range_error ILLEGAL_REQUEST, 0x21, 0 |
| /* Don't use it directly, use scst_set_invalid_field_in_cdb() instead! */ |
| #define scst_sense_invalid_field_in_cdb ILLEGAL_REQUEST, 0x24, 0 |
| #define scst_sense_lun_not_supported ILLEGAL_REQUEST, 0x25, 0 |
| /* Don't use it directly, use scst_set_invalid_field_in_parm_list() instead! */ |
| #define scst_sense_invalid_field_in_parm_list ILLEGAL_REQUEST, 0x26, 0 |
| #define scst_sense_parameter_value_invalid ILLEGAL_REQUEST, 0x26, 2 |
| #define scst_sense_invalid_release ILLEGAL_REQUEST, 0x26, 4 |
| #define scst_sense_too_many_target_descriptors ILLEGAL_REQUEST, 0x26, 6 |
| #define scst_sense_unsupported_tgt_descr_type ILLEGAL_REQUEST, 0x26, 7 |
| #define scst_sense_too_many_segment_descriptors ILLEGAL_REQUEST, 0x26, 8 |
| #define scst_sense_unsupported_seg_descr_type ILLEGAL_REQUEST, 0x26, 9 |
| #define scst_sense_inline_data_length_exceeded ILLEGAL_REQUEST, 0x26, 0xB |
| #define scst_sense_saving_params_unsup ILLEGAL_REQUEST, 0x39, 0 |
| #define scst_sense_invalid_message ILLEGAL_REQUEST, 0x49, 0 |
| #define scst_sense_parameter_list_length_invalid ILLEGAL_REQUEST, 0x1A, 0 |
| #define scst_sense_invalid_field_in_command_information_unit ILLEGAL_REQUEST, 0xE, 0x3 |
| |
| /* UNIT_ATTENTION is 6 */ |
| #define scst_sense_medium_changed_UA UNIT_ATTENTION, 0x28, 0 |
| #define scst_sense_reset_UA UNIT_ATTENTION, 0x29, 0 |
| #define scst_sense_nexus_loss_UA UNIT_ATTENTION, 0x29, 0x7 |
| #define scst_sense_reservation_preempted UNIT_ATTENTION, 0x2A, 0x03 |
| #define scst_sense_reservation_released UNIT_ATTENTION, 0x2A, 0x04 |
| #define scst_sense_registrations_preempted UNIT_ATTENTION, 0x2A, 0x05 |
| #define scst_sense_asym_access_state_changed UNIT_ATTENTION, 0x2A, 0x06 |
| #define scst_sense_capacity_data_changed UNIT_ATTENTION, 0x2A, 0x9 |
| #define scst_sense_cleared_by_another_ini_UA UNIT_ATTENTION, 0x2F, 0 |
| #define scst_sense_tp_soft_threshold_reached UNIT_ATTENTION, 0x38, 0x7 |
| #define scst_sense_inquiry_data_changed UNIT_ATTENTION, 0x3F, 0x3 |
| #define scst_sense_reported_luns_data_changed UNIT_ATTENTION, 0x3F, 0xE |
| |
| /* DATA_PROTECT is 7 */ |
| #define scst_sense_data_protect DATA_PROTECT, 0x00, 0 |
| #define scst_space_allocation_failed_write_protect DATA_PROTECT, 0x27, 7 |
| |
| /* ABORTED_COMMAND is 0xb */ |
| #define scst_sense_aborted_command ABORTED_COMMAND, 0x00, 0 |
| #define scst_logical_block_guard_check_failed ABORTED_COMMAND, 0x10, 1 |
| #define scst_logical_block_app_tag_check_failed ABORTED_COMMAND, 0x10, 2 |
| #define scst_logical_block_ref_tag_check_failed ABORTED_COMMAND, 0x10, 3 |
| #define scst_sense_internal_failure ABORTED_COMMAND, 0x44, 0 /* retriable */ |
| |
| /* MISCOMPARE is 0xe */ |
| #define scst_sense_miscompare_error MISCOMPARE, 0x1D, 0 |
| |
| |
| /************************************************************* |
| * SCSI opcodes not listed anywhere else |
| *************************************************************/ |
| #define INIT_ELEMENT_STATUS 0x07 |
| #define INIT_ELEMENT_STATUS_RANGE 0x37 |
| #define PREVENT_ALLOW_MEDIUM 0x1E |
| #define REQUEST_VOLUME_ADDRESS 0xB5 |
| #if (!defined(__KERNEL__) || LINUX_VERSION_CODE < KERNEL_VERSION(4, 12, 0)) &&\ |
| !defined(WRITE_VERIFY_16) |
| #define WRITE_VERIFY_16 0x8E |
| #endif |
| #define VERIFY_6 0x13 |
| #ifndef VERIFY_12 |
| #define VERIFY_12 0xAF |
| #endif |
| #if !defined(GENERATING_UPSTREAM_PATCH) |
| /* |
| * The constants below have been defined in the kernel header <scsi/scsi.h> |
| * and hence are not needed when this header file is included in kernel code. |
| * The definitions below are only used when this header file is included during |
| * compilation of SCST's user space components. |
| */ |
| #ifndef GET_EVENT_STATUS_NOTIFICATION |
| /* Upstream commit 93aae17a (v2.6.38) */ |
| #define GET_EVENT_STATUS_NOTIFICATION 0x4a |
| #endif |
| #ifndef READ_16 |
| #define READ_16 0x88 |
| #endif |
| #ifndef WRITE_16 |
| #define WRITE_16 0x8a |
| #endif |
| #ifndef VERIFY_16 |
| #define VERIFY_16 0x8f |
| #endif |
| #ifndef SAI_READ_CAPACITY_16 |
| /* values for service action in */ |
| #define SAI_READ_CAPACITY_16 0x10 |
| #endif |
| #endif |
| #ifndef GENERATING_UPSTREAM_PATCH |
| #ifndef REPORT_LUNS |
| #define REPORT_LUNS 0xa0 |
| #endif |
| #endif |
| |
| #ifndef WRITE_SAME_16 |
| #define WRITE_SAME_16 0x93 |
| #endif |
| |
| #ifndef EXTENDED_COPY |
| #define EXTENDED_COPY 0x83 |
| #endif |
| |
| #ifndef RECEIVE_COPY_RESULTS |
| #define RECEIVE_COPY_RESULTS 0x84 |
| #endif |
| |
| #ifndef SYNCHRONIZE_CACHE_16 |
| #define SYNCHRONIZE_CACHE_16 0x91 |
| #endif |
| |
| /* Subcodes of VARIABLE_LENGTH_CMD (0x7F) */ |
| #define SUBCODE_READ_32 0x09 |
| #define SUBCODE_VERIFY_32 0x0a |
| #define SUBCODE_WRITE_32 0x0b |
| #define SUBCODE_WRITE_VERIFY_32 0x0c |
| #define SUBCODE_WRITE_SAME_32 0x0d |
| |
| #if LINUX_VERSION_CODE < KERNEL_VERSION(3, 12, 0) |
| /* |
| * From <scsi/scsi.h>. See also commit |
| * 1c68cc1626341665a8bd1d2c7dfffd7fc852a79c. |
| */ |
| #ifndef COMPARE_AND_WRITE |
| #define COMPARE_AND_WRITE 0x89 |
| #endif |
| #endif |
| |
| #if !defined(__KERNEL__) || LINUX_VERSION_CODE < KERNEL_VERSION(3, 19, 0) |
| /* |
| * See also patch "scsi: rename SERVICE_ACTION_IN_16 to SERVICE_ACTION_IN_16" |
| * (commit eb846d9f147455e4e5e1863bfb5e31974bb69b7c; kernel 3.19.0). |
| */ |
| #ifndef SERVICE_ACTION_IN_16 |
| #define SERVICE_ACTION_IN_16 0x9e |
| #endif |
| #endif |
| |
| /************************************************************* |
| ** SCSI Architecture Model (SAM) Status codes. Taken from SAM-3 draft |
| ** T10/1561-D Revision 4 Draft dated 7th November 2002. |
| *************************************************************/ |
| #define SAM_STAT_GOOD 0x00 |
| #define SAM_STAT_CHECK_CONDITION 0x02 |
| #define SAM_STAT_CONDITION_MET 0x04 |
| #define SAM_STAT_BUSY 0x08 |
| #define SAM_STAT_INTERMEDIATE 0x10 |
| #define SAM_STAT_INTERMEDIATE_CONDITION_MET 0x14 |
| #define SAM_STAT_RESERVATION_CONFLICT 0x18 |
| #define SAM_STAT_COMMAND_TERMINATED 0x22 /* obsolete in SAM-3 */ |
| #define SAM_STAT_TASK_SET_FULL 0x28 |
| #define SAM_STAT_ACA_ACTIVE 0x30 |
| #define SAM_STAT_TASK_ABORTED 0x40 |
| |
| /************************************************************* |
| ** Control byte field in CDB |
| *************************************************************/ |
| #define CONTROL_BYTE_LINK_BIT 0x01 |
| #define CONTROL_BYTE_NACA_BIT 0x04 |
| |
| /************************************************************* |
| ** Byte 1 in INQUIRY CDB |
| *************************************************************/ |
| #define SCST_INQ_EVPD 0x01 |
| |
| /************************************************************* |
| ** TPGS field in byte 5 of the INQUIRY response (SPC-4). |
| *************************************************************/ |
| enum { |
| SCST_INQ_TPGS_MODE_IMPLICIT = 0x10, |
| SCST_INQ_TPGS_MODE_EXPLICIT = 0x20, |
| }; |
| |
| /************************************************************* |
| ** Byte 2 in RESERVE_10 CDB |
| *************************************************************/ |
| #define SCST_RES_3RDPTY 0x10 |
| #define SCST_RES_LONGID 0x02 |
| |
| /************************************************************* |
| ** Values for the control mode page TST field |
| *************************************************************/ |
| #define SCST_TST_0_SINGLE_TASK_SET 0 |
| #define SCST_TST_1_SEP_TASK_SETS 1 |
| |
| /******************************************************************* |
| ** Values for the control mode page QUEUE ALGORITHM MODIFIER field |
| *******************************************************************/ |
| #define SCST_QUEUE_ALG_0_RESTRICTED_REORDER 0 |
| #define SCST_QUEUE_ALG_1_UNRESTRICTED_REORDER 1 |
| |
| /************************************************************* |
| ** Values for the control mode page D_SENSE field |
| *************************************************************/ |
| #define SCST_D_SENSE_0_FIXED_SENSE 0 |
| #define SCST_D_SENSE_1_DESCR_SENSE 1 |
| |
| /************************************************************* |
| ** Values for the control mode page QErr field |
| *************************************************************/ |
| #define SCST_QERR_0_ALL_RESUME 0 |
| #define SCST_QERR_1_ABORT_ALL 1 |
| #define SCST_QERR_2_RESERVED 2 |
| #define SCST_QERR_3_ABORT_THIS_NEXUS_ONLY 3 |
| |
| /************************************************************* |
| ** Values for the control mode page ATO field |
| *************************************************************/ |
| |
| /* I.e., app tags owned by storage */ |
| #define SCST_ATO_0_MODIFIED_BY_STORAGE 0 |
| |
| /* I.e., app tags owned by application */ |
| #define SCST_ATO_1_NOT_MODIFIED_BY_STORAGE 1 |
| |
| /************************************************************* |
| ** Values for the control mode page DPICZ field |
| *************************************************************/ |
| #define SCST_DPICZ_CHECK_ON_xPROT_0 0 |
| #define SCST_DPICZ_NO_CHECK_ON_xPROT_0 1 |
| |
| /************************************************************* |
| ** APP/REF TAG DIF constants |
| *************************************************************/ |
| |
| /* Skip all guards checks for this block */ |
| #define SCST_DIF_NO_CHECK_ALL_APP_TAG cpu_to_be16(0xFFFF) |
| #define SCST_DIF_NO_CHECK_ALL_REF_TAG cpu_to_be32(0xFFFFFFFF) |
| |
| /* Don't check app tag for this block */ |
| #define SCST_DIF_NO_CHECK_APP_TAG 0 |
| |
| /************************************************************* |
| ** Shift of size of DIF tag (8 bytes) |
| *************************************************************/ |
| #define SCST_DIF_TAG_SHIFT 3 |
| |
| /************************************************************* |
| ** Formats of DIF guard tags |
| *************************************************************/ |
| #define SCST_DIF_GUARD_FORMAT_CRC 0 |
| #define SCST_DIF_GUARD_FORMAT_IP 1 |
| |
| /************************************************************* |
| ** TransportID protocol identifiers |
| *************************************************************/ |
| |
| #define SCSI_TRANSPORTID_PROTOCOLID_FCP2 0 |
| #define SCSI_TRANSPORTID_PROTOCOLID_SPI5 1 |
| #define SCSI_TRANSPORTID_PROTOCOLID_SRP 4 |
| #define SCSI_TRANSPORTID_PROTOCOLID_ISCSI 5 |
| #define SCSI_TRANSPORTID_PROTOCOLID_SAS 6 |
| |
| /* |
| * SCST extension. Added, because there is no TransportID for Copy Manager |
| * defined anywhere in the SCSI standards. |
| */ |
| #define SCST_TRANSPORTID_PROTOCOLID_COPY_MGR 0xC |
| |
| /** |
| * enum scst_tg_state - SCSI target port group asymmetric access state. |
| * |
| * See also the documentation of the REPORT TARGET PORT GROUPS command in SPC-4. |
| */ |
| enum scst_tg_state { |
| SCST_TG_STATE_UNDEFINED = -1, |
| SCST_TG_STATE_OPTIMIZED = 0x0, |
| SCST_TG_STATE_NONOPTIMIZED = 0x1, |
| SCST_TG_STATE_STANDBY = 0x2, |
| SCST_TG_STATE_UNAVAILABLE = 0x3, |
| SCST_TG_STATE_LBA_DEPENDENT = 0x4, |
| SCST_TG_STATE_OFFLINE = 0xe, |
| SCST_TG_STATE_TRANSITIONING = 0xf, |
| }; |
| |
| /** |
| * Target port group preferred bit. |
| * |
| * See also the documentation of the REPORT TARGET PORT GROUPS command in SPC-4. |
| */ |
| enum { |
| SCST_TG_PREFERRED = 0x80, |
| }; |
| |
| /** |
| * enum scst_tg_sup - Supported SCSI target port group states. |
| * |
| * See also the documentation of the REPORT TARGET PORT GROUPS command in SPC-4. |
| */ |
| enum scst_tg_sup { |
| SCST_TG_SUP_OPTIMIZED = 0x01, |
| SCST_TG_SUP_NONOPTIMIZED = 0x02, |
| SCST_TG_SUP_STANDBY = 0x04, |
| SCST_TG_SUP_UNAVAILABLE = 0x08, |
| SCST_TG_SUP_LBA_DEPENDENT = 0x10, |
| SCST_TG_SUP_OFFLINE = 0x40, |
| SCST_TG_SUP_TRANSITION = 0x80, |
| }; |
| |
| /************************************************************* |
| ** Misc SCSI constants |
| *************************************************************/ |
| #define SCST_SENSE_ASC_UA_RESET 0x29 |
| |
| /************************************************************* |
| ** Compatibility constants |
| *************************************************************/ |
| #ifndef DID_TRANSPORT_DISRUPTED |
| #define DID_TRANSPORT_DISRUPTED 0xe |
| #endif |
| |
| #ifndef DID_TRANSPORT_FAILFAST |
| #define DID_TRANSPORT_FAILFAST 0xf |
| #endif |
| |
| /* See also patch "Add detailed SCSI I/O errors" (commit ID 63583cca745f) */ |
| #ifndef DID_TARGET_FAILURE |
| #define DID_TARGET_FAILURE 0x10 |
| #endif |
| |
| #ifndef DID_NEXUS_FAILURE |
| #define DID_NEXUS_FAILURE 0x11 |
| #endif |
| |
| #ifndef DID_ALLOC_FAILURE |
| #define DID_ALLOC_FAILURE 0x12 |
| #endif |
| |
| #ifndef DID_MEDIUM_ERROR |
| #define DID_MEDIUM_ERROR 0x13 |
| #endif |
| |
| /************************************************************* |
| ** Various timeouts |
| *************************************************************/ |
| #define SCST_DEFAULT_TIMEOUT (30 * HZ) |
| #define SCST_DEFAULT_NOMINAL_TIMEOUT_SEC 1 |
| |
| #define SCST_GENERIC_CHANGER_TIMEOUT (3 * HZ) |
| #define SCST_GENERIC_CHANGER_LONG_TIMEOUT (14000 * HZ) |
| |
| #define SCST_GENERIC_PROCESSOR_TIMEOUT (3 * HZ) |
| #define SCST_GENERIC_PROCESSOR_LONG_TIMEOUT (14000 * HZ) |
| |
| #define SCST_GENERIC_TAPE_SMALL_TIMEOUT (3 * HZ) |
| #define SCST_GENERIC_TAPE_REG_TIMEOUT (900 * HZ) |
| #define SCST_GENERIC_TAPE_LONG_TIMEOUT (14000 * HZ) |
| |
| #define SCST_GENERIC_MODISK_SMALL_TIMEOUT (3 * HZ) |
| #define SCST_GENERIC_MODISK_REG_TIMEOUT (900 * HZ) |
| #define SCST_GENERIC_MODISK_LONG_TIMEOUT (14000 * HZ) |
| |
| #define SCST_GENERIC_DISK_SMALL_TIMEOUT (10 * HZ) |
| #define SCST_GENERIC_DISK_REG_TIMEOUT (60 * HZ) |
| #define SCST_GENERIC_DISK_LONG_TIMEOUT (3600 * HZ) |
| |
| #define SCST_GENERIC_RAID_TIMEOUT (3 * HZ) |
| #define SCST_GENERIC_RAID_LONG_TIMEOUT (14000 * HZ) |
| |
| #define SCST_GENERIC_CDROM_SMALL_TIMEOUT (3 * HZ) |
| #define SCST_GENERIC_CDROM_REG_TIMEOUT (900 * HZ) |
| #define SCST_GENERIC_CDROM_LONG_TIMEOUT (14000 * HZ) |
| |
| #define SCST_MAX_OTHER_TIMEOUT (14000 * HZ) |
| |
| /************************************************************* |
| ** I/O grouping attribute string values. Must match constants |
| ** w/o '_STR' suffix! |
| *************************************************************/ |
| #define SCST_IO_GROUPING_AUTO_STR "auto" |
| #define SCST_IO_GROUPING_THIS_GROUP_ONLY_STR "this_group_only" |
| #define SCST_IO_GROUPING_NEVER_STR "never" |
| |
| /************************************************************* |
| ** Threads pool type attribute string values. |
| ** Must match scst_dev_type_threads_pool_type! |
| *************************************************************/ |
| #define SCST_THREADS_POOL_PER_INITIATOR_STR "per_initiator" |
| #define SCST_THREADS_POOL_SHARED_STR "shared" |
| |
| /************************************************************* |
| ** Misc constants |
| *************************************************************/ |
| #define SCST_SYSFS_BLOCK_SIZE PAGE_SIZE |
| |
| #define SCST_VAR_DIR "/var/lib/scst" |
| #define SCST_PR_DIR (SCST_VAR_DIR "/pr") |
| |
| #define TID_COMMON_SIZE 24 |
| |
| #define SCST_SYSFS_KEY_MARK "[key]" |
| |
| #define SCST_MIN_REL_TGT_ID 1 |
| #define SCST_MAX_REL_TGT_ID 65535 |
| |
| /* |
| * Error code returned by target attribute sysfs methods if invoked after |
| * scst_register_target() finished but before scst_tgt_set_tgt_priv() has been |
| * invoked. |
| */ |
| enum { |
| E_TGT_PRIV_NOT_YET_SET = EBUSY |
| }; |
| |
| /* Size of the lock value block in the DLM PR lockspace */ |
| #define PR_DLM_LVB_LEN 256 |
| |
| |
| #endif /* __SCST_CONST_H */ |