cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

scsi.h (5919B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2/*
      3 * This header file contains public constants and structures used by
      4 * the SCSI initiator code.
      5 */
      6#ifndef _SCSI_SCSI_H
      7#define _SCSI_SCSI_H
      8
      9#include <linux/types.h>
     10#include <linux/scatterlist.h>
     11#include <linux/kernel.h>
     12#include <scsi/scsi_common.h>
     13#include <scsi/scsi_proto.h>
     14#include <scsi/scsi_status.h>
     15
     16struct scsi_cmnd;
     17
     18enum scsi_timeouts {
     19	SCSI_DEFAULT_EH_TIMEOUT		= 10 * HZ,
     20};
     21
     22/*
     23 * DIX-capable adapters effectively support infinite chaining for the
     24 * protection information scatterlist
     25 */
     26#define SCSI_MAX_PROT_SG_SEGMENTS	0xFFFF
     27
     28/*
     29 * Special value for scanning to specify scanning or rescanning of all
     30 * possible channels, (target) ids, or luns on a given shost.
     31 */
     32#define SCAN_WILD_CARD	~0
     33
     34/*
     35 * standard mode-select header prepended to all mode-select commands
     36 */
     37
     38struct ccs_modesel_head {
     39	__u8 _r1;			/* reserved */
     40	__u8 medium;		/* device-specific medium type */
     41	__u8 _r2;			/* reserved */
     42	__u8 block_desc_length;	/* block descriptor length */
     43	__u8 density;		/* device-specific density code */
     44	__u8 number_blocks_hi;	/* number of blocks in this block desc */
     45	__u8 number_blocks_med;
     46	__u8 number_blocks_lo;
     47	__u8 _r3;
     48	__u8 block_length_hi;	/* block length for blocks in this desc */
     49	__u8 block_length_med;
     50	__u8 block_length_lo;
     51};
     52
     53/*
     54 * The Well Known LUNS (SAM-3) in our int representation of a LUN
     55 */
     56#define SCSI_W_LUN_BASE 0xc100
     57#define SCSI_W_LUN_REPORT_LUNS (SCSI_W_LUN_BASE + 1)
     58#define SCSI_W_LUN_ACCESS_CONTROL (SCSI_W_LUN_BASE + 2)
     59#define SCSI_W_LUN_TARGET_LOG_PAGE (SCSI_W_LUN_BASE + 3)
     60
     61static inline int scsi_is_wlun(u64 lun)
     62{
     63	return (lun & 0xff00) == SCSI_W_LUN_BASE;
     64}
     65
     66/**
     67 * scsi_status_is_check_condition - check the status return.
     68 *
     69 * @status: the status passed up from the driver (including host and
     70 *          driver components)
     71 *
     72 * This returns true if the status code is SAM_STAT_CHECK_CONDITION.
     73 */
     74static inline int scsi_status_is_check_condition(int status)
     75{
     76	if (status < 0)
     77		return false;
     78	status &= 0xfe;
     79	return status == SAM_STAT_CHECK_CONDITION;
     80}
     81
     82/*
     83 *  Extended message codes.
     84 */
     85#define     EXTENDED_MODIFY_DATA_POINTER    0x00
     86#define     EXTENDED_SDTR                   0x01
     87#define     EXTENDED_EXTENDED_IDENTIFY      0x02    /* SCSI-I only */
     88#define     EXTENDED_WDTR                   0x03
     89#define     EXTENDED_PPR                    0x04
     90#define     EXTENDED_MODIFY_BIDI_DATA_PTR   0x05
     91
     92/*
     93 * Internal return values.
     94 */
     95enum scsi_disposition {
     96	NEEDS_RETRY		= 0x2001,
     97	SUCCESS			= 0x2002,
     98	FAILED			= 0x2003,
     99	QUEUED			= 0x2004,
    100	SOFT_ERROR		= 0x2005,
    101	ADD_TO_MLQUEUE		= 0x2006,
    102	TIMEOUT_ERROR		= 0x2007,
    103	SCSI_RETURN_NOT_HANDLED	= 0x2008,
    104	FAST_IO_FAIL		= 0x2009,
    105};
    106
    107/*
    108 * Midlevel queue return values.
    109 */
    110#define SCSI_MLQUEUE_HOST_BUSY   0x1055
    111#define SCSI_MLQUEUE_DEVICE_BUSY 0x1056
    112#define SCSI_MLQUEUE_EH_RETRY    0x1057
    113#define SCSI_MLQUEUE_TARGET_BUSY 0x1058
    114
    115/*
    116 *  Use these to separate status msg and our bytes
    117 *
    118 *  These are set by:
    119 *
    120 *      status byte = set from target device
    121 *      msg_byte    (unused)
    122 *      host_byte   = set by low-level driver to indicate status.
    123 */
    124#define host_byte(result)   (((result) >> 16) & 0xff)
    125
    126#define sense_class(sense)  (((sense) >> 4) & 0x7)
    127#define sense_error(sense)  ((sense) & 0xf)
    128#define sense_valid(sense)  ((sense) & 0x80)
    129
    130/*
    131 * default timeouts
    132*/
    133#define FORMAT_UNIT_TIMEOUT		(2 * 60 * 60 * HZ)
    134#define START_STOP_TIMEOUT		(60 * HZ)
    135#define MOVE_MEDIUM_TIMEOUT		(5 * 60 * HZ)
    136#define READ_ELEMENT_STATUS_TIMEOUT	(5 * 60 * HZ)
    137#define READ_DEFECT_DATA_TIMEOUT	(60 * HZ )
    138
    139
    140#define IDENTIFY_BASE       0x80
    141#define IDENTIFY(can_disconnect, lun)   (IDENTIFY_BASE |\
    142		     ((can_disconnect) ?  0x40 : 0) |\
    143		     ((lun) & 0x07))
    144
    145/*
    146 *  struct scsi_device::scsi_level values. For SCSI devices other than those
    147 *  prior to SCSI-2 (i.e. over 12 years old) this value is (resp[2] + 1)
    148 *  where "resp" is a byte array of the response to an INQUIRY. The scsi_level
    149 *  variable is visible to the user via sysfs.
    150 */
    151
    152#define SCSI_UNKNOWN    0
    153#define SCSI_1          1
    154#define SCSI_1_CCS      2
    155#define SCSI_2          3
    156#define SCSI_3          4        /* SPC */
    157#define SCSI_SPC_2      5
    158#define SCSI_SPC_3      6
    159
    160/*
    161 * INQ PERIPHERAL QUALIFIERS
    162 */
    163#define SCSI_INQ_PQ_CON         0x00
    164#define SCSI_INQ_PQ_NOT_CON     0x01
    165#define SCSI_INQ_PQ_NOT_CAP     0x03
    166
    167
    168/*
    169 * Here are some scsi specific ioctl commands which are sometimes useful.
    170 *
    171 * Note that include/linux/cdrom.h also defines IOCTL 0x5300 - 0x5395
    172 */
    173
    174/* Used to obtain PUN and LUN info.  Conflicts with CDROMAUDIOBUFSIZ */
    175#define SCSI_IOCTL_GET_IDLUN		0x5382
    176
    177/* 0x5383 and 0x5384 were used for SCSI_IOCTL_TAGGED_{ENABLE,DISABLE} */
    178
    179/* Used to obtain the host number of a device. */
    180#define SCSI_IOCTL_PROBE_HOST		0x5385
    181
    182/* Used to obtain the bus number for a device */
    183#define SCSI_IOCTL_GET_BUS_NUMBER	0x5386
    184
    185/* Used to obtain the PCI location of a device */
    186#define SCSI_IOCTL_GET_PCI		0x5387
    187
    188/** scsi_status_is_good - check the status return.
    189 *
    190 * @status: the status passed up from the driver (including host and
    191 *          driver components)
    192 *
    193 * This returns true for known good conditions that may be treated as
    194 * command completed normally
    195 */
    196static inline bool scsi_status_is_good(int status)
    197{
    198	if (status < 0)
    199		return false;
    200
    201	if (host_byte(status) == DID_NO_CONNECT)
    202		return false;
    203
    204	/*
    205	 * FIXME: bit0 is listed as reserved in SCSI-2, but is
    206	 * significant in SCSI-3.  For now, we follow the SCSI-2
    207	 * behaviour and ignore reserved bits.
    208	 */
    209	status &= 0xfe;
    210	return ((status == SAM_STAT_GOOD) ||
    211		(status == SAM_STAT_CONDITION_MET) ||
    212		/* Next two "intermediate" statuses are obsolete in SAM-4 */
    213		(status == SAM_STAT_INTERMEDIATE) ||
    214		(status == SAM_STAT_INTERMEDIATE_CONDITION_MET) ||
    215		/* FIXME: this is obsolete in SAM-3 */
    216		(status == SAM_STAT_COMMAND_TERMINATED));
    217}
    218
    219#endif /* _SCSI_SCSI_H */