/* SPDX-License-Identifier: GPL-2.0 */
/*
 * This header file contains public constants and structures used by
 * both the SCSI initiator and the SCSI target code.
 *
 * For documentation on the OPCODES, MESSAGES, and SENSE values,
 * please consult the SCSI standard.
 */

#ifndef _SCSI_PROTO_H_
#define _SCSI_PROTO_H_

#include <linux/build_bug.h>
#include <linux/types.h>

/*
 *      SCSI opcodes
 */

#define TEST_UNIT_READY       0x00
#define REZERO_UNIT           0x01
#define REQUEST_SENSE         0x03
#define FORMAT_UNIT           0x04
#define READ_BLOCK_LIMITS     0x05
#define REASSIGN_BLOCKS       0x07
#define INITIALIZE_ELEMENT_STATUS 0x07
#define READ_6                0x08
#define WRITE_6               0x0a
#define SEEK_6                0x0b
#define READ_REVERSE          0x0f
#define WRITE_FILEMARKS       0x10
#define SPACE                 0x11
#define INQUIRY               0x12
#define RECOVER_BUFFERED_DATA 0x14
#define MODE_SELECT           0x15
#define RESERVE               0x16
#define RELEASE               0x17
#define COPY                  0x18
#define ERASE                 0x19
#define MODE_SENSE            0x1a
#define START_STOP            0x1b
#define RECEIVE_DIAGNOSTIC    0x1c
#define SEND_DIAGNOSTIC       0x1d
#define ALLOW_MEDIUM_REMOVAL  0x1e

#define READ_FORMAT_CAPACITIES 0x23
#define SET_WINDOW            0x24
#define READ_CAPACITY         0x25
#define READ_10               0x28
#define WRITE_10              0x2a
#define SEEK_10               0x2b
#define POSITION_TO_ELEMENT   0x2b
#define WRITE_VERIFY          0x2e
#define VERIFY                0x2f
#define SEARCH_HIGH           0x30
#define SEARCH_EQUAL          0x31
#define SEARCH_LOW            0x32
#define SET_LIMITS            0x33
#define PRE_FETCH             0x34
#define READ_POSITION         0x34
#define SYNCHRONIZE_CACHE     0x35
#define LOCK_UNLOCK_CACHE     0x36
#define READ_DEFECT_DATA      0x37
#define MEDIUM_SCAN           0x38
#define COMPARE               0x39
#define COPY_VERIFY           0x3a
#define WRITE_BUFFER          0x3b
#define READ_BUFFER           0x3c
#define UPDATE_BLOCK          0x3d
#define READ_LONG             0x3e
#define WRITE_LONG            0x3f
#define CHANGE_DEFINITION     0x40
#define WRITE_SAME            0x41
#define UNMAP		      0x42
#define READ_TOC              0x43
#define READ_HEADER           0x44
#define GET_EVENT_STATUS_NOTIFICATION 0x4a
#define LOG_SELECT            0x4c
#define LOG_SENSE             0x4d
#define XDWRITEREAD_10        0x53
#define MODE_SELECT_10        0x55
#define RESERVE_10            0x56
#define RELEASE_10            0x57
#define MODE_SENSE_10         0x5a
#define PERSISTENT_RESERVE_IN 0x5e
#define PERSISTENT_RESERVE_OUT 0x5f
#define VARIABLE_LENGTH_CMD   0x7f
#define REPORT_LUNS           0xa0
#define SECURITY_PROTOCOL_IN  0xa2
#define MAINTENANCE_IN        0xa3
#define MAINTENANCE_OUT       0xa4
#define MOVE_MEDIUM           0xa5
#define EXCHANGE_MEDIUM       0xa6
#define READ_12               0xa8
#define SERVICE_ACTION_OUT_12 0xa9
#define WRITE_12              0xaa
#define READ_MEDIA_SERIAL_NUMBER 0xab /* Obsolete with SPC-2 */
#define SERVICE_ACTION_IN_12  0xab
#define WRITE_VERIFY_12       0xae
#define VERIFY_12	      0xaf
#define SEARCH_HIGH_12        0xb0
#define SEARCH_EQUAL_12       0xb1
#define SEARCH_LOW_12         0xb2
#define SECURITY_PROTOCOL_OUT 0xb5
#define READ_ELEMENT_STATUS   0xb8
#define SEND_VOLUME_TAG       0xb6
#define WRITE_LONG_2          0xea
#define EXTENDED_COPY         0x83
#define RECEIVE_COPY_RESULTS  0x84
#define ACCESS_CONTROL_IN     0x86
#define ACCESS_CONTROL_OUT    0x87
#define READ_16               0x88
#define COMPARE_AND_WRITE     0x89
#define WRITE_16              0x8a
#define READ_ATTRIBUTE        0x8c
#define WRITE_ATTRIBUTE	      0x8d
#define WRITE_VERIFY_16	      0x8e
#define VERIFY_16	      0x8f
#define SYNCHRONIZE_CACHE_16  0x91
#define WRITE_SAME_16	      0x93
#define ZBC_OUT		      0x94
#define ZBC_IN		      0x95
#define SERVICE_ACTION_BIDIRECTIONAL 0x9d
#define SERVICE_ACTION_IN_16  0x9e
#define SERVICE_ACTION_OUT_16 0x9f
/* values for service action in */
#define	SAI_READ_CAPACITY_16  0x10
#define SAI_GET_LBA_STATUS    0x12
#define SAI_REPORT_REFERRALS  0x13
#define SAI_GET_STREAM_STATUS 0x16
/* values for maintenance in */
#define MI_REPORT_IDENTIFYING_INFORMATION 0x05
#define MI_REPORT_TARGET_PGS  0x0a
#define MI_REPORT_ALIASES     0x0b
#define MI_REPORT_SUPPORTED_OPERATION_CODES 0x0c
#define MI_REPORT_SUPPORTED_TASK_MANAGEMENT_FUNCTIONS 0x0d
#define MI_REPORT_PRIORITY    0x0e
#define MI_REPORT_TIMESTAMP   0x0f
#define MI_MANAGEMENT_PROTOCOL_IN 0x10
/* value for MI_REPORT_TARGET_PGS ext header */
#define MI_EXT_HDR_PARAM_FMT  0x20
/* values for maintenance out */
#define MO_SET_IDENTIFYING_INFORMATION 0x06
#define MO_SET_TARGET_PGS     0x0a
#define MO_CHANGE_ALIASES     0x0b
#define MO_SET_PRIORITY       0x0e
#define MO_SET_TIMESTAMP      0x0f
#define MO_MANAGEMENT_PROTOCOL_OUT 0x10
/* values for ZBC_IN */
#define ZI_REPORT_ZONES	      0x00
/* values for ZBC_OUT */
#define ZO_CLOSE_ZONE	      0x01
#define ZO_FINISH_ZONE	      0x02
#define ZO_OPEN_ZONE	      0x03
#define ZO_RESET_WRITE_POINTER 0x04
/* values for PR in service action */
#define READ_KEYS             0x00
#define READ_RESERVATION      0x01
#define REPORT_CAPABILITES    0x02
#define READ_FULL_STATUS      0x03
/* values for variable length command */
#define XDREAD_32	      0x03
#define XDWRITE_32	      0x04
#define XPWRITE_32	      0x06
#define XDWRITEREAD_32	      0x07
#define READ_32		      0x09
#define VERIFY_32	      0x0a
#define WRITE_32	      0x0b
#define WRITE_VERIFY_32	      0x0c
#define WRITE_SAME_32	      0x0d
#define ATA_32		      0x1ff0

/* Values for T10/04-262r7 */
#define	ATA_16		      0x85	/* 16-byte pass-thru */
#define	ATA_12		      0xa1	/* 12-byte pass-thru */

/* Vendor specific CDBs start here */
#define VENDOR_SPECIFIC_CDB 0xc0

/*
 *	SCSI command lengths
 */

#define SCSI_MAX_VARLEN_CDB_SIZE 260

/* defined in T10 SCSI Primary Commands-2 (SPC2) */
struct scsi_varlen_cdb_hdr {
	__u8 opcode;        /* opcode always == VARIABLE_LENGTH_CMD */
	__u8 control;
	__u8 misc[5];
	__u8 additional_cdb_length;         /* total cdb length - 8 */
	__be16 service_action;
	/* service specific data follows */
};

/*
 *  SCSI Architecture Model (SAM) Status codes. Taken from SAM-3 draft
 *  T10/1561-D Revision 4 Draft dated 7th November 2002.
 */
enum sam_status {
	SAM_STAT_GOOD				= 0x00,
	SAM_STAT_CHECK_CONDITION		= 0x02,
	SAM_STAT_CONDITION_MET			= 0x04,
	SAM_STAT_BUSY				= 0x08,
	SAM_STAT_INTERMEDIATE			= 0x10,
	SAM_STAT_INTERMEDIATE_CONDITION_MET	= 0x14,
	SAM_STAT_RESERVATION_CONFLICT		= 0x18,
	SAM_STAT_COMMAND_TERMINATED		= 0x22,	/* obsolete in SAM-3 */
	SAM_STAT_TASK_SET_FULL			= 0x28,
	SAM_STAT_ACA_ACTIVE			= 0x30,
	SAM_STAT_TASK_ABORTED			= 0x40,
};

#define STATUS_MASK         0xfe

/*
 *  SENSE KEYS
 */
#define NO_SENSE            0x00
#define RECOVERED_ERROR     0x01
#define NOT_READY           0x02
#define MEDIUM_ERROR        0x03
#define HARDWARE_ERROR      0x04
#define ILLEGAL_REQUEST     0x05
#define UNIT_ATTENTION      0x06
#define DATA_PROTECT        0x07
#define BLANK_CHECK         0x08
#define VENDOR_SPECIFIC     0x09
#define COPY_ABORTED        0x0a
#define ABORTED_COMMAND     0x0b
#define VOLUME_OVERFLOW     0x0d
#define MISCOMPARE          0x0e
#define COMPLETED	    0x0f

/*
 *  DEVICE TYPES
 *  Please keep them in 0x%02x format for $MODALIAS to work
 */

#define TYPE_DISK           0x00
#define TYPE_TAPE           0x01
#define TYPE_PRINTER        0x02
#define TYPE_PROCESSOR      0x03    /* HP scanners use this */
#define TYPE_WORM           0x04    /* Treated as ROM by our system */
#define TYPE_ROM            0x05
#define TYPE_SCANNER        0x06
#define TYPE_MOD            0x07    /* Magneto-optical disk -
				     * - treated as TYPE_DISK */
#define TYPE_MEDIUM_CHANGER 0x08
#define TYPE_COMM           0x09    /* Communications device */
#define TYPE_RAID           0x0c
#define TYPE_ENCLOSURE      0x0d    /* Enclosure Services Device */
#define TYPE_RBC	    0x0e
#define TYPE_OSD            0x11
#define TYPE_ZBC            0x14
#define TYPE_WLUN           0x1e    /* well-known logical unit */
#define TYPE_NO_LUN         0x7f

/* SCSI protocols; these are taken from SPC-3 section 7.5 */
enum scsi_protocol {
	SCSI_PROTOCOL_FCP = 0,	/* Fibre Channel */
	SCSI_PROTOCOL_SPI = 1,	/* parallel SCSI */
	SCSI_PROTOCOL_SSA = 2,	/* Serial Storage Architecture - Obsolete */
	SCSI_PROTOCOL_SBP = 3,	/* firewire */
	SCSI_PROTOCOL_SRP = 4,	/* Infiniband RDMA */
	SCSI_PROTOCOL_ISCSI = 5,
	SCSI_PROTOCOL_SAS = 6,
	SCSI_PROTOCOL_ADT = 7,	/* Media Changers */
	SCSI_PROTOCOL_ATA = 8,
	SCSI_PROTOCOL_UNSPEC = 0xf, /* No specific protocol */
};

/*
 * ScsiLun: 8 byte LUN.
 */
struct scsi_lun {
	__u8 scsi_lun[8];
};

/* SBC-5 IO advice hints group descriptor */
struct scsi_io_group_descriptor {
#if defined(__BIG_ENDIAN)
	u8 io_advice_hints_mode: 2;
	u8 reserved1: 3;
	u8 st_enble: 1;
	u8 cs_enble: 1;
	u8 ic_enable: 1;
#elif defined(__LITTLE_ENDIAN)
	u8 ic_enable: 1;
	u8 cs_enble: 1;
	u8 st_enble: 1;
	u8 reserved1: 3;
	u8 io_advice_hints_mode: 2;
#else
#error
#endif
	u8 reserved2[3];
	/* Logical block markup descriptor */
#if defined(__BIG_ENDIAN)
	u8 acdlu: 1;
	u8 reserved3: 1;
	u8 rlbsr: 2;
	u8 lbm_descriptor_type: 4;
#elif defined(__LITTLE_ENDIAN)
	u8 lbm_descriptor_type: 4;
	u8 rlbsr: 2;
	u8 reserved3: 1;
	u8 acdlu: 1;
#else
#error
#endif
	u8 params[2];
	u8 reserved4;
	u8 reserved5[8];
};

static_assert(sizeof(struct scsi_io_group_descriptor) == 16);

/* SCSI stream status descriptor */
struct scsi_stream_status {
#if defined(__BIG_ENDIAN)
	u8 perm: 1;
	u8 reserved1: 7;
#elif defined(__LITTLE_ENDIAN)
	u8 reserved1: 7;
	u8 perm: 1;
#else
#error
#endif
	u8 reserved2;
	__be16 stream_identifier;
#if defined(__BIG_ENDIAN)
	u8 reserved3: 2;
	u8 rel_lifetime: 6;
#elif defined(__LITTLE_ENDIAN)
	u8 rel_lifetime: 6;
	u8 reserved3: 2;
#else
#error
#endif
	u8 reserved4[3];
};

static_assert(sizeof(struct scsi_stream_status) == 8);

/* GET STREAM STATUS parameter data */
struct scsi_stream_status_header {
	__be32 len;	/* length in bytes of stream_status[] array. */
	u16 reserved;
	__be16 number_of_open_streams;
	DECLARE_FLEX_ARRAY(struct scsi_stream_status, stream_status);
};

static_assert(sizeof(struct scsi_stream_status_header) == 8);

/* SPC asymmetric access states */
#define SCSI_ACCESS_STATE_OPTIMAL     0x00
#define SCSI_ACCESS_STATE_ACTIVE      0x01
#define SCSI_ACCESS_STATE_STANDBY     0x02
#define SCSI_ACCESS_STATE_UNAVAILABLE 0x03
#define SCSI_ACCESS_STATE_LBA         0x04
#define SCSI_ACCESS_STATE_OFFLINE     0x0e
#define SCSI_ACCESS_STATE_TRANSITIONING 0x0f

/* Values for REPORT TARGET GROUP STATES */
#define SCSI_ACCESS_STATE_MASK        0x0f
#define SCSI_ACCESS_STATE_PREFERRED   0x80

/* Reporting options for REPORT ZONES */
enum zbc_zone_reporting_options {
	ZBC_ZONE_REPORTING_OPTION_ALL		= 0x00,
	ZBC_ZONE_REPORTING_OPTION_EMPTY		= 0x01,
	ZBC_ZONE_REPORTING_OPTION_IMPLICIT_OPEN	= 0x02,
	ZBC_ZONE_REPORTING_OPTION_EXPLICIT_OPEN	= 0x03,
	ZBC_ZONE_REPORTING_OPTION_CLOSED	= 0x04,
	ZBC_ZONE_REPORTING_OPTION_FULL		= 0x05,
	ZBC_ZONE_REPORTING_OPTION_READONLY	= 0x06,
	ZBC_ZONE_REPORTING_OPTION_OFFLINE	= 0x07,
	/* 0x08 to 0x0f are reserved */
	ZBC_ZONE_REPORTING_OPTION_NEED_RESET_WP	= 0x10,
	ZBC_ZONE_REPORTING_OPTION_NON_SEQWRITE	= 0x11,
	/* 0x12 to 0x3e are reserved */
	ZBC_ZONE_REPORTING_OPTION_NON_WP	= 0x3f,
};

#define ZBC_REPORT_ZONE_PARTIAL 0x80

/* Zone types of REPORT ZONES zone descriptors */
enum zbc_zone_type {
	ZBC_ZONE_TYPE_CONV		= 0x1,
	ZBC_ZONE_TYPE_SEQWRITE_REQ	= 0x2,
	ZBC_ZONE_TYPE_SEQWRITE_PREF	= 0x3,
	ZBC_ZONE_TYPE_SEQ_OR_BEFORE_REQ	= 0x4,
	ZBC_ZONE_TYPE_GAP		= 0x5,
	/* 0x6 to 0xf are reserved */
};

/* Zone conditions of REPORT ZONES zone descriptors */
enum zbc_zone_cond {
	ZBC_ZONE_COND_NO_WP		= 0x0,
	ZBC_ZONE_COND_EMPTY		= 0x1,
	ZBC_ZONE_COND_IMP_OPEN		= 0x2,
	ZBC_ZONE_COND_EXP_OPEN		= 0x3,
	ZBC_ZONE_COND_CLOSED		= 0x4,
	/* 0x5 to 0xc are reserved */
	ZBC_ZONE_COND_READONLY		= 0xd,
	ZBC_ZONE_COND_FULL		= 0xe,
	ZBC_ZONE_COND_OFFLINE		= 0xf,
};

enum zbc_zone_alignment_method {
	ZBC_CONSTANT_ZONE_LENGTH	= 0x1,
	ZBC_CONSTANT_ZONE_START_OFFSET	= 0x8,
};

/* Version descriptor values for INQUIRY */
enum scsi_version_descriptor {
	SCSI_VERSION_DESCRIPTOR_FCP4	= 0x0a40,
	SCSI_VERSION_DESCRIPTOR_ISCSI	= 0x0960,
	SCSI_VERSION_DESCRIPTOR_SAM5	= 0x00a0,
	SCSI_VERSION_DESCRIPTOR_SAS3	= 0x0c60,
	SCSI_VERSION_DESCRIPTOR_SBC3	= 0x04c0,
	SCSI_VERSION_DESCRIPTOR_SBP3	= 0x0980,
	SCSI_VERSION_DESCRIPTOR_SPC4	= 0x0460,
	SCSI_VERSION_DESCRIPTOR_SRP	= 0x0940
};

enum scsi_support_opcode {
	SCSI_SUPPORT_NO_INFO		= 0,
	SCSI_SUPPORT_NOT_SUPPORTED	= 1,
	SCSI_SUPPORT_FULL		= 3,
	SCSI_SUPPORT_VENDOR		= 5,
};

#define SCSI_CONTROL_MASK 0
#define SCSI_GROUP_NUMBER_MASK 0

#endif /* _SCSI_PROTO_H_ */
