^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /* SPDX-License-Identifier: GPL-2.0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) * This header file contains public constants and structures used by
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) * both the SCSI initiator and the SCSI target code.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) * For documentation on the OPCODES, MESSAGES, and SENSE values,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) * please consult the SCSI standard.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) #ifndef _SCSI_PROTO_H_
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) #define _SCSI_PROTO_H_
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) #include <linux/types.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) * SCSI opcodes
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) #define TEST_UNIT_READY 0x00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) #define REZERO_UNIT 0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) #define REQUEST_SENSE 0x03
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) #define FORMAT_UNIT 0x04
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) #define READ_BLOCK_LIMITS 0x05
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) #define REASSIGN_BLOCKS 0x07
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) #define INITIALIZE_ELEMENT_STATUS 0x07
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) #define READ_6 0x08
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) #define WRITE_6 0x0a
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) #define SEEK_6 0x0b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) #define READ_REVERSE 0x0f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) #define WRITE_FILEMARKS 0x10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) #define SPACE 0x11
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) #define INQUIRY 0x12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) #define RECOVER_BUFFERED_DATA 0x14
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) #define MODE_SELECT 0x15
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) #define RESERVE 0x16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) #define RELEASE 0x17
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) #define COPY 0x18
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) #define ERASE 0x19
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) #define MODE_SENSE 0x1a
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) #define START_STOP 0x1b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) #define RECEIVE_DIAGNOSTIC 0x1c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) #define SEND_DIAGNOSTIC 0x1d
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) #define ALLOW_MEDIUM_REMOVAL 0x1e
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) #define READ_FORMAT_CAPACITIES 0x23
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) #define SET_WINDOW 0x24
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) #define READ_CAPACITY 0x25
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) #define READ_10 0x28
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) #define WRITE_10 0x2a
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) #define SEEK_10 0x2b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) #define POSITION_TO_ELEMENT 0x2b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) #define WRITE_VERIFY 0x2e
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) #define VERIFY 0x2f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) #define SEARCH_HIGH 0x30
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) #define SEARCH_EQUAL 0x31
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) #define SEARCH_LOW 0x32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) #define SET_LIMITS 0x33
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) #define PRE_FETCH 0x34
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) #define READ_POSITION 0x34
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) #define SYNCHRONIZE_CACHE 0x35
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) #define LOCK_UNLOCK_CACHE 0x36
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) #define READ_DEFECT_DATA 0x37
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) #define MEDIUM_SCAN 0x38
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) #define COMPARE 0x39
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) #define COPY_VERIFY 0x3a
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) #define WRITE_BUFFER 0x3b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) #define READ_BUFFER 0x3c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) #define UPDATE_BLOCK 0x3d
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) #define READ_LONG 0x3e
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) #define WRITE_LONG 0x3f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) #define CHANGE_DEFINITION 0x40
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) #define WRITE_SAME 0x41
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) #define UNMAP 0x42
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) #define READ_TOC 0x43
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) #define READ_HEADER 0x44
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) #define GET_EVENT_STATUS_NOTIFICATION 0x4a
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) #define LOG_SELECT 0x4c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) #define LOG_SENSE 0x4d
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) #define XDWRITEREAD_10 0x53
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) #define MODE_SELECT_10 0x55
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) #define RESERVE_10 0x56
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) #define RELEASE_10 0x57
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) #define MODE_SENSE_10 0x5a
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) #define PERSISTENT_RESERVE_IN 0x5e
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) #define PERSISTENT_RESERVE_OUT 0x5f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) #define VARIABLE_LENGTH_CMD 0x7f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) #define REPORT_LUNS 0xa0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) #define SECURITY_PROTOCOL_IN 0xa2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) #define MAINTENANCE_IN 0xa3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) #define MAINTENANCE_OUT 0xa4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) #define MOVE_MEDIUM 0xa5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) #define EXCHANGE_MEDIUM 0xa6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) #define READ_12 0xa8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) #define SERVICE_ACTION_OUT_12 0xa9
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) #define WRITE_12 0xaa
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) #define READ_MEDIA_SERIAL_NUMBER 0xab /* Obsolete with SPC-2 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) #define SERVICE_ACTION_IN_12 0xab
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) #define WRITE_VERIFY_12 0xae
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99) #define VERIFY_12 0xaf
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) #define SEARCH_HIGH_12 0xb0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) #define SEARCH_EQUAL_12 0xb1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) #define SEARCH_LOW_12 0xb2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) #define SECURITY_PROTOCOL_OUT 0xb5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) #define READ_ELEMENT_STATUS 0xb8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) #define SEND_VOLUME_TAG 0xb6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) #define WRITE_LONG_2 0xea
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) #define EXTENDED_COPY 0x83
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) #define RECEIVE_COPY_RESULTS 0x84
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) #define ACCESS_CONTROL_IN 0x86
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) #define ACCESS_CONTROL_OUT 0x87
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) #define READ_16 0x88
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) #define COMPARE_AND_WRITE 0x89
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) #define WRITE_16 0x8a
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) #define READ_ATTRIBUTE 0x8c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) #define WRITE_ATTRIBUTE 0x8d
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) #define WRITE_VERIFY_16 0x8e
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) #define VERIFY_16 0x8f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) #define SYNCHRONIZE_CACHE_16 0x91
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) #define WRITE_SAME_16 0x93
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) #define ZBC_OUT 0x94
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) #define ZBC_IN 0x95
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) #define SERVICE_ACTION_BIDIRECTIONAL 0x9d
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) #define SERVICE_ACTION_IN_16 0x9e
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) #define SERVICE_ACTION_OUT_16 0x9f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) /* values for service action in */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) #define SAI_READ_CAPACITY_16 0x10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) #define SAI_GET_LBA_STATUS 0x12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) #define SAI_REPORT_REFERRALS 0x13
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) /* values for maintenance in */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) #define MI_REPORT_IDENTIFYING_INFORMATION 0x05
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) #define MI_REPORT_TARGET_PGS 0x0a
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) #define MI_REPORT_ALIASES 0x0b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) #define MI_REPORT_SUPPORTED_OPERATION_CODES 0x0c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) #define MI_REPORT_SUPPORTED_TASK_MANAGEMENT_FUNCTIONS 0x0d
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) #define MI_REPORT_PRIORITY 0x0e
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) #define MI_REPORT_TIMESTAMP 0x0f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) #define MI_MANAGEMENT_PROTOCOL_IN 0x10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) /* value for MI_REPORT_TARGET_PGS ext header */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) #define MI_EXT_HDR_PARAM_FMT 0x20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) /* values for maintenance out */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) #define MO_SET_IDENTIFYING_INFORMATION 0x06
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) #define MO_SET_TARGET_PGS 0x0a
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) #define MO_CHANGE_ALIASES 0x0b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) #define MO_SET_PRIORITY 0x0e
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) #define MO_SET_TIMESTAMP 0x0f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) #define MO_MANAGEMENT_PROTOCOL_OUT 0x10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) /* values for ZBC_IN */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) #define ZI_REPORT_ZONES 0x00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) /* values for ZBC_OUT */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) #define ZO_CLOSE_ZONE 0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) #define ZO_FINISH_ZONE 0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) #define ZO_OPEN_ZONE 0x03
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) #define ZO_RESET_WRITE_POINTER 0x04
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) /* values for variable length command */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) #define XDREAD_32 0x03
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) #define XDWRITE_32 0x04
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) #define XPWRITE_32 0x06
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) #define XDWRITEREAD_32 0x07
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) #define READ_32 0x09
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) #define VERIFY_32 0x0a
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) #define WRITE_32 0x0b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) #define WRITE_VERIFY_32 0x0c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) #define WRITE_SAME_32 0x0d
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) #define ATA_32 0x1ff0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) /* Values for T10/04-262r7 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) #define ATA_16 0x85 /* 16-byte pass-thru */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) #define ATA_12 0xa1 /* 12-byte pass-thru */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) /* Vendor specific CDBs start here */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) #define VENDOR_SPECIFIC_CDB 0xc0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) * SCSI command lengths
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) #define SCSI_MAX_VARLEN_CDB_SIZE 260
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) /* defined in T10 SCSI Primary Commands-2 (SPC2) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) struct scsi_varlen_cdb_hdr {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) __u8 opcode; /* opcode always == VARIABLE_LENGTH_CMD */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) __u8 control;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) __u8 misc[5];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) __u8 additional_cdb_length; /* total cdb length - 8 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) __be16 service_action;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) /* service specific data follows */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) * SCSI Architecture Model (SAM) Status codes. Taken from SAM-3 draft
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) * T10/1561-D Revision 4 Draft dated 7th November 2002.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) #define SAM_STAT_GOOD 0x00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) #define SAM_STAT_CHECK_CONDITION 0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) #define SAM_STAT_CONDITION_MET 0x04
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) #define SAM_STAT_BUSY 0x08
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) #define SAM_STAT_INTERMEDIATE 0x10
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) #define SAM_STAT_INTERMEDIATE_CONDITION_MET 0x14
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) #define SAM_STAT_RESERVATION_CONFLICT 0x18
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) #define SAM_STAT_COMMAND_TERMINATED 0x22 /* obsolete in SAM-3 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) #define SAM_STAT_TASK_SET_FULL 0x28
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) #define SAM_STAT_ACA_ACTIVE 0x30
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) #define SAM_STAT_TASK_ABORTED 0x40
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) * Status codes. These are deprecated as they are shifted 1 bit right
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) * from those found in the SCSI standards. This causes confusion for
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) * applications that are ported to several OSes. Prefer SAM Status codes
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) * above.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) #define GOOD 0x00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) #define CHECK_CONDITION 0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) #define CONDITION_GOOD 0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215) #define BUSY 0x04
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) #define INTERMEDIATE_GOOD 0x08
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) #define INTERMEDIATE_C_GOOD 0x0a
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) #define RESERVATION_CONFLICT 0x0c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) #define COMMAND_TERMINATED 0x11
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) #define QUEUE_FULL 0x14
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) #define ACA_ACTIVE 0x18
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) #define TASK_ABORTED 0x20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) #define STATUS_MASK 0xfe
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) * SENSE KEYS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230) #define NO_SENSE 0x00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231) #define RECOVERED_ERROR 0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232) #define NOT_READY 0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233) #define MEDIUM_ERROR 0x03
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234) #define HARDWARE_ERROR 0x04
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235) #define ILLEGAL_REQUEST 0x05
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236) #define UNIT_ATTENTION 0x06
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237) #define DATA_PROTECT 0x07
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 238) #define BLANK_CHECK 0x08
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 239) #define VENDOR_SPECIFIC 0x09
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 240) #define COPY_ABORTED 0x0a
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 241) #define ABORTED_COMMAND 0x0b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 242) #define VOLUME_OVERFLOW 0x0d
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 243) #define MISCOMPARE 0x0e
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 244)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 245)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 246) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 247) * DEVICE TYPES
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 248) * Please keep them in 0x%02x format for $MODALIAS to work
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 249) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 250)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 251) #define TYPE_DISK 0x00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 252) #define TYPE_TAPE 0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 253) #define TYPE_PRINTER 0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 254) #define TYPE_PROCESSOR 0x03 /* HP scanners use this */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 255) #define TYPE_WORM 0x04 /* Treated as ROM by our system */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 256) #define TYPE_ROM 0x05
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 257) #define TYPE_SCANNER 0x06
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 258) #define TYPE_MOD 0x07 /* Magneto-optical disk -
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 259) * - treated as TYPE_DISK */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 260) #define TYPE_MEDIUM_CHANGER 0x08
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 261) #define TYPE_COMM 0x09 /* Communications device */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 262) #define TYPE_RAID 0x0c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 263) #define TYPE_ENCLOSURE 0x0d /* Enclosure Services Device */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 264) #define TYPE_RBC 0x0e
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 265) #define TYPE_OSD 0x11
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 266) #define TYPE_ZBC 0x14
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 267) #define TYPE_WLUN 0x1e /* well-known logical unit */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 268) #define TYPE_NO_LUN 0x7f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 269)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 270) /* SCSI protocols; these are taken from SPC-3 section 7.5 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 271) enum scsi_protocol {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 272) SCSI_PROTOCOL_FCP = 0, /* Fibre Channel */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 273) SCSI_PROTOCOL_SPI = 1, /* parallel SCSI */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 274) SCSI_PROTOCOL_SSA = 2, /* Serial Storage Architecture - Obsolete */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 275) SCSI_PROTOCOL_SBP = 3, /* firewire */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 276) SCSI_PROTOCOL_SRP = 4, /* Infiniband RDMA */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 277) SCSI_PROTOCOL_ISCSI = 5,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 278) SCSI_PROTOCOL_SAS = 6,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 279) SCSI_PROTOCOL_ADT = 7, /* Media Changers */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 280) SCSI_PROTOCOL_ATA = 8,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 281) SCSI_PROTOCOL_UNSPEC = 0xf, /* No specific protocol */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 282) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 283)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 284) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 285) * ScsiLun: 8 byte LUN.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 286) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 287) struct scsi_lun {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 288) __u8 scsi_lun[8];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 289) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 290)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 291) /* SPC asymmetric access states */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 292) #define SCSI_ACCESS_STATE_OPTIMAL 0x00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 293) #define SCSI_ACCESS_STATE_ACTIVE 0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 294) #define SCSI_ACCESS_STATE_STANDBY 0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 295) #define SCSI_ACCESS_STATE_UNAVAILABLE 0x03
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 296) #define SCSI_ACCESS_STATE_LBA 0x04
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 297) #define SCSI_ACCESS_STATE_OFFLINE 0x0e
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 298) #define SCSI_ACCESS_STATE_TRANSITIONING 0x0f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 299)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 300) /* Values for REPORT TARGET GROUP STATES */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 301) #define SCSI_ACCESS_STATE_MASK 0x0f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 302) #define SCSI_ACCESS_STATE_PREFERRED 0x80
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 303)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 304) /* Reporting options for REPORT ZONES */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 305) enum zbc_zone_reporting_options {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 306) ZBC_ZONE_REPORTING_OPTION_ALL = 0x00,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 307) ZBC_ZONE_REPORTING_OPTION_EMPTY = 0x01,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 308) ZBC_ZONE_REPORTING_OPTION_IMPLICIT_OPEN = 0x02,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 309) ZBC_ZONE_REPORTING_OPTION_EXPLICIT_OPEN = 0x03,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 310) ZBC_ZONE_REPORTING_OPTION_CLOSED = 0x04,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 311) ZBC_ZONE_REPORTING_OPTION_FULL = 0x05,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 312) ZBC_ZONE_REPORTING_OPTION_READONLY = 0x06,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 313) ZBC_ZONE_REPORTING_OPTION_OFFLINE = 0x07,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 314) /* 0x08 to 0x0f are reserved */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 315) ZBC_ZONE_REPORTING_OPTION_NEED_RESET_WP = 0x10,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 316) ZBC_ZONE_REPORTING_OPTION_NON_SEQWRITE = 0x11,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 317) /* 0x12 to 0x3e are reserved */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 318) ZBC_ZONE_REPORTING_OPTION_NON_WP = 0x3f,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 319) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 320)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 321) #define ZBC_REPORT_ZONE_PARTIAL 0x80
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 322)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 323) /* Zone types of REPORT ZONES zone descriptors */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 324) enum zbc_zone_type {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 325) ZBC_ZONE_TYPE_CONV = 0x1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 326) ZBC_ZONE_TYPE_SEQWRITE_REQ = 0x2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 327) ZBC_ZONE_TYPE_SEQWRITE_PREF = 0x3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 328) /* 0x4 to 0xf are reserved */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 329) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 330)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 331) /* Zone conditions of REPORT ZONES zone descriptors */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 332) enum zbc_zone_cond {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 333) ZBC_ZONE_COND_NO_WP = 0x0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 334) ZBC_ZONE_COND_EMPTY = 0x1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 335) ZBC_ZONE_COND_IMP_OPEN = 0x2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 336) ZBC_ZONE_COND_EXP_OPEN = 0x3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 337) ZBC_ZONE_COND_CLOSED = 0x4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 338) /* 0x5 to 0xc are reserved */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 339) ZBC_ZONE_COND_READONLY = 0xd,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 340) ZBC_ZONE_COND_FULL = 0xe,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 341) ZBC_ZONE_COND_OFFLINE = 0xf,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 342) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 343)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 344) #endif /* _SCSI_PROTO_H_ */