linux/drivers/scsi/scsi_debug.c
<<
>>
Prefs
   1/*
   2 * vvvvvvvvvvvvvvvvvvvvvvv Original vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
   3 *  Copyright (C) 1992  Eric Youngdale
   4 *  Simulate a host adapter with 2 disks attached.  Do a lot of checking
   5 *  to make sure that we are not getting blocks mixed up, and PANIC if
   6 *  anything out of the ordinary is seen.
   7 * ^^^^^^^^^^^^^^^^^^^^^^^ Original ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   8 *
   9 *  This version is more generic, simulating a variable number of disk
  10 *  (or disk like devices) sharing a common amount of RAM. To be more
  11 *  realistic, the simulated devices have the transport attributes of
  12 *  SAS disks.
  13 *
  14 *
  15 *  For documentation see http://sg.danny.cz/sg/sdebug26.html
  16 *
  17 *   D. Gilbert (dpg) work for Magneto-Optical device test [20010421]
  18 *   dpg: work for devfs large number of disks [20010809]
  19 *        forked for lk 2.5 series [20011216, 20020101]
  20 *        use vmalloc() more inquiry+mode_sense [20020302]
  21 *        add timers for delayed responses [20020721]
  22 *   Patrick Mansfield <patmans@us.ibm.com> max_luns+scsi_level [20021031]
  23 *   Mike Anderson <andmike@us.ibm.com> sysfs work [20021118]
  24 *   dpg: change style of boot options to "scsi_debug.num_tgts=2" and
  25 *        module options to "modprobe scsi_debug num_tgts=2" [20021221]
  26 */
  27
  28#include <linux/module.h>
  29
  30#include <linux/kernel.h>
  31#include <linux/errno.h>
  32#include <linux/timer.h>
  33#include <linux/slab.h>
  34#include <linux/types.h>
  35#include <linux/string.h>
  36#include <linux/genhd.h>
  37#include <linux/fs.h>
  38#include <linux/init.h>
  39#include <linux/proc_fs.h>
  40#include <linux/vmalloc.h>
  41#include <linux/moduleparam.h>
  42#include <linux/scatterlist.h>
  43#include <linux/blkdev.h>
  44#include <linux/crc-t10dif.h>
  45#include <linux/spinlock.h>
  46#include <linux/interrupt.h>
  47#include <linux/atomic.h>
  48#include <linux/hrtimer.h>
  49
  50#include <net/checksum.h>
  51
  52#include <asm/unaligned.h>
  53
  54#include <scsi/scsi.h>
  55#include <scsi/scsi_cmnd.h>
  56#include <scsi/scsi_device.h>
  57#include <scsi/scsi_host.h>
  58#include <scsi/scsicam.h>
  59#include <scsi/scsi_eh.h>
  60#include <scsi/scsi_tcq.h>
  61#include <scsi/scsi_dbg.h>
  62
  63#include "sd.h"
  64#include "scsi_logging.h"
  65
  66#define SCSI_DEBUG_VERSION "1.85"
  67static const char *scsi_debug_version_date = "20141022";
  68
  69#define MY_NAME "scsi_debug"
  70
  71/* Additional Sense Code (ASC) */
  72#define NO_ADDITIONAL_SENSE 0x0
  73#define LOGICAL_UNIT_NOT_READY 0x4
  74#define LOGICAL_UNIT_COMMUNICATION_FAILURE 0x8
  75#define UNRECOVERED_READ_ERR 0x11
  76#define PARAMETER_LIST_LENGTH_ERR 0x1a
  77#define INVALID_OPCODE 0x20
  78#define LBA_OUT_OF_RANGE 0x21
  79#define INVALID_FIELD_IN_CDB 0x24
  80#define INVALID_FIELD_IN_PARAM_LIST 0x26
  81#define UA_RESET_ASC 0x29
  82#define UA_CHANGED_ASC 0x2a
  83#define TARGET_CHANGED_ASC 0x3f
  84#define LUNS_CHANGED_ASCQ 0x0e
  85#define INSUFF_RES_ASC 0x55
  86#define INSUFF_RES_ASCQ 0x3
  87#define POWER_ON_RESET_ASCQ 0x0
  88#define BUS_RESET_ASCQ 0x2      /* scsi bus reset occurred */
  89#define MODE_CHANGED_ASCQ 0x1   /* mode parameters changed */
  90#define CAPACITY_CHANGED_ASCQ 0x9
  91#define SAVING_PARAMS_UNSUP 0x39
  92#define TRANSPORT_PROBLEM 0x4b
  93#define THRESHOLD_EXCEEDED 0x5d
  94#define LOW_POWER_COND_ON 0x5e
  95#define MISCOMPARE_VERIFY_ASC 0x1d
  96#define MICROCODE_CHANGED_ASCQ 0x1      /* with TARGET_CHANGED_ASC */
  97#define MICROCODE_CHANGED_WO_RESET_ASCQ 0x16
  98
  99/* Additional Sense Code Qualifier (ASCQ) */
 100#define ACK_NAK_TO 0x3
 101
 102
 103/* Default values for driver parameters */
 104#define DEF_NUM_HOST   1
 105#define DEF_NUM_TGTS   1
 106#define DEF_MAX_LUNS   1
 107/* With these defaults, this driver will make 1 host with 1 target
 108 * (id 0) containing 1 logical unit (lun 0). That is 1 device.
 109 */
 110#define DEF_ATO 1
 111#define DEF_DELAY   1           /* if > 0 unit is a jiffy */
 112#define DEF_DEV_SIZE_MB   8
 113#define DEF_DIF 0
 114#define DEF_DIX 0
 115#define DEF_D_SENSE   0
 116#define DEF_EVERY_NTH   0
 117#define DEF_FAKE_RW     0
 118#define DEF_GUARD 0
 119#define DEF_HOST_LOCK 0
 120#define DEF_LBPU 0
 121#define DEF_LBPWS 0
 122#define DEF_LBPWS10 0
 123#define DEF_LBPRZ 1
 124#define DEF_LOWEST_ALIGNED 0
 125#define DEF_NDELAY   0          /* if > 0 unit is a nanosecond */
 126#define DEF_NO_LUN_0   0
 127#define DEF_NUM_PARTS   0
 128#define DEF_OPTS   0
 129#define DEF_OPT_BLKS 64
 130#define DEF_PHYSBLK_EXP 0
 131#define DEF_PTYPE   0
 132#define DEF_REMOVABLE false
 133#define DEF_SCSI_LEVEL   6    /* INQUIRY, byte2 [6->SPC-4] */
 134#define DEF_SECTOR_SIZE 512
 135#define DEF_UNMAP_ALIGNMENT 0
 136#define DEF_UNMAP_GRANULARITY 1
 137#define DEF_UNMAP_MAX_BLOCKS 0xFFFFFFFF
 138#define DEF_UNMAP_MAX_DESC 256
 139#define DEF_VIRTUAL_GB   0
 140#define DEF_VPD_USE_HOSTNO 1
 141#define DEF_WRITESAME_LENGTH 0xFFFF
 142#define DEF_STRICT 0
 143#define DELAY_OVERRIDDEN -9999
 144
 145/* bit mask values for scsi_debug_opts */
 146#define SCSI_DEBUG_OPT_NOISE   1
 147#define SCSI_DEBUG_OPT_MEDIUM_ERR   2
 148#define SCSI_DEBUG_OPT_TIMEOUT   4
 149#define SCSI_DEBUG_OPT_RECOVERED_ERR   8
 150#define SCSI_DEBUG_OPT_TRANSPORT_ERR   16
 151#define SCSI_DEBUG_OPT_DIF_ERR   32
 152#define SCSI_DEBUG_OPT_DIX_ERR   64
 153#define SCSI_DEBUG_OPT_MAC_TIMEOUT  128
 154#define SCSI_DEBUG_OPT_SHORT_TRANSFER   0x100
 155#define SCSI_DEBUG_OPT_Q_NOISE  0x200
 156#define SCSI_DEBUG_OPT_ALL_TSF  0x400
 157#define SCSI_DEBUG_OPT_RARE_TSF 0x800
 158#define SCSI_DEBUG_OPT_N_WCE    0x1000
 159#define SCSI_DEBUG_OPT_RESET_NOISE 0x2000
 160#define SCSI_DEBUG_OPT_NO_CDB_NOISE 0x4000
 161#define SCSI_DEBUG_OPT_ALL_NOISE (0x1 | 0x200 | 0x2000)
 162/* When "every_nth" > 0 then modulo "every_nth" commands:
 163 *   - a no response is simulated if SCSI_DEBUG_OPT_TIMEOUT is set
 164 *   - a RECOVERED_ERROR is simulated on successful read and write
 165 *     commands if SCSI_DEBUG_OPT_RECOVERED_ERR is set.
 166 *   - a TRANSPORT_ERROR is simulated on successful read and write
 167 *     commands if SCSI_DEBUG_OPT_TRANSPORT_ERR is set.
 168 *
 169 * When "every_nth" < 0 then after "- every_nth" commands:
 170 *   - a no response is simulated if SCSI_DEBUG_OPT_TIMEOUT is set
 171 *   - a RECOVERED_ERROR is simulated on successful read and write
 172 *     commands if SCSI_DEBUG_OPT_RECOVERED_ERR is set.
 173 *   - a TRANSPORT_ERROR is simulated on successful read and write
 174 *     commands if SCSI_DEBUG_OPT_TRANSPORT_ERR is set.
 175 * This will continue until some other action occurs (e.g. the user
 176 * writing a new value (other than -1 or 1) to every_nth via sysfs).
 177 */
 178
 179/* As indicated in SAM-5 and SPC-4 Unit Attentions (UAs)are returned in
 180 * priority order. In the subset implemented here lower numbers have higher
 181 * priority. The UA numbers should be a sequence starting from 0 with
 182 * SDEBUG_NUM_UAS being 1 higher than the highest numbered UA. */
 183#define SDEBUG_UA_POR 0         /* Power on, reset, or bus device reset */
 184#define SDEBUG_UA_BUS_RESET 1
 185#define SDEBUG_UA_MODE_CHANGED 2
 186#define SDEBUG_UA_CAPACITY_CHANGED 3
 187#define SDEBUG_UA_LUNS_CHANGED 4
 188#define SDEBUG_UA_MICROCODE_CHANGED 5   /* simulate firmware change */
 189#define SDEBUG_UA_MICROCODE_CHANGED_WO_RESET 6
 190#define SDEBUG_NUM_UAS 7
 191
 192/* for check_readiness() */
 193#define UAS_ONLY 1      /* check for UAs only */
 194#define UAS_TUR 0       /* if no UAs then check if media access possible */
 195
 196/* when 1==SCSI_DEBUG_OPT_MEDIUM_ERR, a medium error is simulated at this
 197 * sector on read commands: */
 198#define OPT_MEDIUM_ERR_ADDR   0x1234 /* that's sector 4660 in decimal */
 199#define OPT_MEDIUM_ERR_NUM    10     /* number of consecutive medium errs */
 200
 201/* If REPORT LUNS has luns >= 256 it can choose "flat space" (value 1)
 202 * or "peripheral device" addressing (value 0) */
 203#define SAM2_LUN_ADDRESS_METHOD 0
 204#define SAM2_WLUN_REPORT_LUNS 0xc101
 205
 206/* SCSI_DEBUG_CANQUEUE is the maximum number of commands that can be queued
 207 * (for response) at one time. Can be reduced by max_queue option. Command
 208 * responses are not queued when delay=0 and ndelay=0. The per-device
 209 * DEF_CMD_PER_LUN can be changed via sysfs:
 210 * /sys/class/scsi_device/<h:c:t:l>/device/queue_depth but cannot exceed
 211 * SCSI_DEBUG_CANQUEUE. */
 212#define SCSI_DEBUG_CANQUEUE_WORDS  9    /* a WORD is bits in a long */
 213#define SCSI_DEBUG_CANQUEUE  (SCSI_DEBUG_CANQUEUE_WORDS * BITS_PER_LONG)
 214#define DEF_CMD_PER_LUN  255
 215
 216#if DEF_CMD_PER_LUN > SCSI_DEBUG_CANQUEUE
 217#warning "Expect DEF_CMD_PER_LUN <= SCSI_DEBUG_CANQUEUE"
 218#endif
 219
 220/* SCSI opcodes (first byte of cdb) mapped onto these indexes */
 221enum sdeb_opcode_index {
 222        SDEB_I_INVALID_OPCODE = 0,
 223        SDEB_I_INQUIRY = 1,
 224        SDEB_I_REPORT_LUNS = 2,
 225        SDEB_I_REQUEST_SENSE = 3,
 226        SDEB_I_TEST_UNIT_READY = 4,
 227        SDEB_I_MODE_SENSE = 5,          /* 6, 10 */
 228        SDEB_I_MODE_SELECT = 6,         /* 6, 10 */
 229        SDEB_I_LOG_SENSE = 7,
 230        SDEB_I_READ_CAPACITY = 8,       /* 10; 16 is in SA_IN(16) */
 231        SDEB_I_READ = 9,                /* 6, 10, 12, 16 */
 232        SDEB_I_WRITE = 10,              /* 6, 10, 12, 16 */
 233        SDEB_I_START_STOP = 11,
 234        SDEB_I_SERV_ACT_IN = 12,        /* 12, 16 */
 235        SDEB_I_SERV_ACT_OUT = 13,       /* 12, 16 */
 236        SDEB_I_MAINT_IN = 14,
 237        SDEB_I_MAINT_OUT = 15,
 238        SDEB_I_VERIFY = 16,             /* 10 only */
 239        SDEB_I_VARIABLE_LEN = 17,
 240        SDEB_I_RESERVE = 18,            /* 6, 10 */
 241        SDEB_I_RELEASE = 19,            /* 6, 10 */
 242        SDEB_I_ALLOW_REMOVAL = 20,      /* PREVENT ALLOW MEDIUM REMOVAL */
 243        SDEB_I_REZERO_UNIT = 21,        /* REWIND in SSC */
 244        SDEB_I_ATA_PT = 22,             /* 12, 16 */
 245        SDEB_I_SEND_DIAG = 23,
 246        SDEB_I_UNMAP = 24,
 247        SDEB_I_XDWRITEREAD = 25,        /* 10 only */
 248        SDEB_I_WRITE_BUFFER = 26,
 249        SDEB_I_WRITE_SAME = 27,         /* 10, 16 */
 250        SDEB_I_SYNC_CACHE = 28,         /* 10 only */
 251        SDEB_I_COMP_WRITE = 29,
 252        SDEB_I_LAST_ELEMENT = 30,       /* keep this last */
 253};
 254
 255static const unsigned char opcode_ind_arr[256] = {
 256/* 0x0; 0x0->0x1f: 6 byte cdbs */
 257        SDEB_I_TEST_UNIT_READY, SDEB_I_REZERO_UNIT, 0, SDEB_I_REQUEST_SENSE,
 258            0, 0, 0, 0,
 259        SDEB_I_READ, 0, SDEB_I_WRITE, 0, 0, 0, 0, 0,
 260        0, 0, SDEB_I_INQUIRY, 0, 0, SDEB_I_MODE_SELECT, SDEB_I_RESERVE,
 261            SDEB_I_RELEASE,
 262        0, 0, SDEB_I_MODE_SENSE, SDEB_I_START_STOP, 0, SDEB_I_SEND_DIAG,
 263            SDEB_I_ALLOW_REMOVAL, 0,
 264/* 0x20; 0x20->0x3f: 10 byte cdbs */
 265        0, 0, 0, 0, 0, SDEB_I_READ_CAPACITY, 0, 0,
 266        SDEB_I_READ, 0, SDEB_I_WRITE, 0, 0, 0, 0, SDEB_I_VERIFY,
 267        0, 0, 0, 0, 0, SDEB_I_SYNC_CACHE, 0, 0,
 268        0, 0, 0, SDEB_I_WRITE_BUFFER, 0, 0, 0, 0,
 269/* 0x40; 0x40->0x5f: 10 byte cdbs */
 270        0, SDEB_I_WRITE_SAME, SDEB_I_UNMAP, 0, 0, 0, 0, 0,
 271        0, 0, 0, 0, 0, SDEB_I_LOG_SENSE, 0, 0,
 272        0, 0, 0, SDEB_I_XDWRITEREAD, 0, SDEB_I_MODE_SELECT, SDEB_I_RESERVE,
 273            SDEB_I_RELEASE,
 274        0, 0, SDEB_I_MODE_SENSE, 0, 0, 0, 0, 0,
 275/* 0x60; 0x60->0x7d are reserved */
 276        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 277        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 278        0, SDEB_I_VARIABLE_LEN,
 279/* 0x80; 0x80->0x9f: 16 byte cdbs */
 280        0, 0, 0, 0, 0, SDEB_I_ATA_PT, 0, 0,
 281        SDEB_I_READ, SDEB_I_COMP_WRITE, SDEB_I_WRITE, 0, 0, 0, 0, 0,
 282        0, 0, 0, SDEB_I_WRITE_SAME, 0, 0, 0, 0,
 283        0, 0, 0, 0, 0, 0, SDEB_I_SERV_ACT_IN, SDEB_I_SERV_ACT_OUT,
 284/* 0xa0; 0xa0->0xbf: 12 byte cdbs */
 285        SDEB_I_REPORT_LUNS, SDEB_I_ATA_PT, 0, SDEB_I_MAINT_IN,
 286             SDEB_I_MAINT_OUT, 0, 0, 0,
 287        SDEB_I_READ, SDEB_I_SERV_ACT_OUT, SDEB_I_WRITE, SDEB_I_SERV_ACT_IN,
 288             0, 0, 0, 0,
 289        0, 0, 0, 0, 0, 0, 0, 0,
 290        0, 0, 0, 0, 0, 0, 0, 0,
 291/* 0xc0; 0xc0->0xff: vendor specific */
 292        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 293        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 294        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 295        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 296};
 297
 298#define F_D_IN                  1
 299#define F_D_OUT                 2
 300#define F_D_OUT_MAYBE           4       /* WRITE SAME, NDOB bit */
 301#define F_D_UNKN                8
 302#define F_RL_WLUN_OK            0x10
 303#define F_SKIP_UA               0x20
 304#define F_DELAY_OVERR           0x40
 305#define F_SA_LOW                0x80    /* cdb byte 1, bits 4 to 0 */
 306#define F_SA_HIGH               0x100   /* as used by variable length cdbs */
 307#define F_INV_OP                0x200
 308#define F_FAKE_RW               0x400
 309#define F_M_ACCESS              0x800   /* media access */
 310
 311#define FF_RESPOND (F_RL_WLUN_OK | F_SKIP_UA | F_DELAY_OVERR)
 312#define FF_DIRECT_IO (F_M_ACCESS | F_FAKE_RW)
 313#define FF_SA (F_SA_HIGH | F_SA_LOW)
 314
 315struct sdebug_dev_info;
 316static int resp_inquiry(struct scsi_cmnd *, struct sdebug_dev_info *);
 317static int resp_report_luns(struct scsi_cmnd *, struct sdebug_dev_info *);
 318static int resp_requests(struct scsi_cmnd *, struct sdebug_dev_info *);
 319static int resp_mode_sense(struct scsi_cmnd *, struct sdebug_dev_info *);
 320static int resp_mode_select(struct scsi_cmnd *, struct sdebug_dev_info *);
 321static int resp_log_sense(struct scsi_cmnd *, struct sdebug_dev_info *);
 322static int resp_readcap(struct scsi_cmnd *, struct sdebug_dev_info *);
 323static int resp_read_dt0(struct scsi_cmnd *, struct sdebug_dev_info *);
 324static int resp_write_dt0(struct scsi_cmnd *, struct sdebug_dev_info *);
 325static int resp_start_stop(struct scsi_cmnd *, struct sdebug_dev_info *);
 326static int resp_readcap16(struct scsi_cmnd *, struct sdebug_dev_info *);
 327static int resp_get_lba_status(struct scsi_cmnd *, struct sdebug_dev_info *);
 328static int resp_report_tgtpgs(struct scsi_cmnd *, struct sdebug_dev_info *);
 329static int resp_unmap(struct scsi_cmnd *, struct sdebug_dev_info *);
 330static int resp_rsup_opcodes(struct scsi_cmnd *, struct sdebug_dev_info *);
 331static int resp_rsup_tmfs(struct scsi_cmnd *, struct sdebug_dev_info *);
 332static int resp_write_same_10(struct scsi_cmnd *, struct sdebug_dev_info *);
 333static int resp_write_same_16(struct scsi_cmnd *, struct sdebug_dev_info *);
 334static int resp_xdwriteread_10(struct scsi_cmnd *, struct sdebug_dev_info *);
 335static int resp_comp_write(struct scsi_cmnd *, struct sdebug_dev_info *);
 336static int resp_write_buffer(struct scsi_cmnd *, struct sdebug_dev_info *);
 337
 338struct opcode_info_t {
 339        u8 num_attached;        /* 0 if this is it (i.e. a leaf); use 0xff
 340                                 * for terminating element */
 341        u8 opcode;              /* if num_attached > 0, preferred */
 342        u16 sa;                 /* service action */
 343        u32 flags;              /* OR-ed set of SDEB_F_* */
 344        int (*pfp)(struct scsi_cmnd *, struct sdebug_dev_info *);
 345        const struct opcode_info_t *arrp;  /* num_attached elements or NULL */
 346        u8 len_mask[16];        /* len=len_mask[0], then mask for cdb[1]... */
 347                                /* ignore cdb bytes after position 15 */
 348};
 349
 350static const struct opcode_info_t msense_iarr[1] = {
 351        {0, 0x1a, 0, F_D_IN, NULL, NULL,
 352            {6,  0xe8, 0xff, 0xff, 0xff, 0xc7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
 353};
 354
 355static const struct opcode_info_t mselect_iarr[1] = {
 356        {0, 0x15, 0, F_D_OUT, NULL, NULL,
 357            {6,  0xf1, 0, 0, 0xff, 0xc7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
 358};
 359
 360static const struct opcode_info_t read_iarr[3] = {
 361        {0, 0x28, 0, F_D_IN | FF_DIRECT_IO, resp_read_dt0, NULL,/* READ(10) */
 362            {10,  0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xff, 0xff, 0xc7, 0, 0,
 363             0, 0, 0, 0} },
 364        {0, 0x8, 0, F_D_IN | FF_DIRECT_IO, resp_read_dt0, NULL, /* READ(6) */
 365            {6,  0xff, 0xff, 0xff, 0xff, 0xc7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
 366        {0, 0xa8, 0, F_D_IN | FF_DIRECT_IO, resp_read_dt0, NULL,/* READ(12) */
 367            {12,  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f,
 368             0xc7, 0, 0, 0, 0} },
 369};
 370
 371static const struct opcode_info_t write_iarr[3] = {
 372        {0, 0x2a, 0, F_D_OUT | FF_DIRECT_IO, resp_write_dt0, NULL,   /* 10 */
 373            {10,  0xfb, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xff, 0xff, 0xc7, 0, 0,
 374             0, 0, 0, 0} },
 375        {0, 0xa, 0, F_D_OUT | FF_DIRECT_IO, resp_write_dt0, NULL,    /* 6 */
 376            {6,  0xff, 0xff, 0xff, 0xff, 0xc7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
 377        {0, 0xaa, 0, F_D_OUT | FF_DIRECT_IO, resp_write_dt0, NULL,   /* 12 */
 378            {12,  0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f,
 379             0xc7, 0, 0, 0, 0} },
 380};
 381
 382static const struct opcode_info_t sa_in_iarr[1] = {
 383        {0, 0x9e, 0x12, F_SA_LOW | F_D_IN, resp_get_lba_status, NULL,
 384            {16,  0x12, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 385             0xff, 0xff, 0xff, 0, 0xc7} },
 386};
 387
 388static const struct opcode_info_t vl_iarr[1] = {        /* VARIABLE LENGTH */
 389        {0, 0x7f, 0xb, F_SA_HIGH | F_D_OUT | FF_DIRECT_IO, resp_write_dt0,
 390            NULL, {32,  0xc7, 0, 0, 0, 0, 0x1f, 0x18, 0x0, 0xb, 0xfa,
 391                   0, 0xff, 0xff, 0xff, 0xff} },        /* WRITE(32) */
 392};
 393
 394static const struct opcode_info_t maint_in_iarr[2] = {
 395        {0, 0xa3, 0xc, F_SA_LOW | F_D_IN, resp_rsup_opcodes, NULL,
 396            {12,  0xc, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0,
 397             0xc7, 0, 0, 0, 0} },
 398        {0, 0xa3, 0xd, F_SA_LOW | F_D_IN, resp_rsup_tmfs, NULL,
 399            {12,  0xd, 0x80, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0xc7, 0, 0,
 400             0, 0} },
 401};
 402
 403static const struct opcode_info_t write_same_iarr[1] = {
 404        {0, 0x93, 0, F_D_OUT_MAYBE | FF_DIRECT_IO, resp_write_same_16, NULL,
 405            {16,  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 406             0xff, 0xff, 0xff, 0x1f, 0xc7} },
 407};
 408
 409static const struct opcode_info_t reserve_iarr[1] = {
 410        {0, 0x16, 0, F_D_OUT, NULL, NULL,       /* RESERVE(6) */
 411            {6,  0x1f, 0xff, 0xff, 0xff, 0xc7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
 412};
 413
 414static const struct opcode_info_t release_iarr[1] = {
 415        {0, 0x17, 0, F_D_OUT, NULL, NULL,       /* RELEASE(6) */
 416            {6,  0x1f, 0xff, 0, 0, 0xc7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
 417};
 418
 419
 420/* This array is accessed via SDEB_I_* values. Make sure all are mapped,
 421 * plus the terminating elements for logic that scans this table such as
 422 * REPORT SUPPORTED OPERATION CODES. */
 423static const struct opcode_info_t opcode_info_arr[SDEB_I_LAST_ELEMENT + 1] = {
 424/* 0 */
 425        {0, 0, 0, F_INV_OP | FF_RESPOND, NULL, NULL,
 426            {0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
 427        {0, 0x12, 0, FF_RESPOND | F_D_IN, resp_inquiry, NULL,
 428            {6,  0xe3, 0xff, 0xff, 0xff, 0xc7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
 429        {0, 0xa0, 0, FF_RESPOND | F_D_IN, resp_report_luns, NULL,
 430            {12,  0xe3, 0xff, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0xc7, 0, 0,
 431             0, 0} },
 432        {0, 0x3, 0, FF_RESPOND | F_D_IN, resp_requests, NULL,
 433            {6,  0xe1, 0, 0, 0xff, 0xc7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
 434        {0, 0x0, 0, F_M_ACCESS | F_RL_WLUN_OK, NULL, NULL,/* TEST UNIT READY */
 435            {6,  0, 0, 0, 0, 0xc7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
 436        {1, 0x5a, 0, F_D_IN, resp_mode_sense, msense_iarr,
 437            {10,  0xf8, 0xff, 0xff, 0, 0, 0, 0xff, 0xff, 0xc7, 0, 0, 0, 0, 0,
 438             0} },
 439        {1, 0x55, 0, F_D_OUT, resp_mode_select, mselect_iarr,
 440            {10,  0xf1, 0, 0, 0, 0, 0, 0xff, 0xff, 0xc7, 0, 0, 0, 0, 0, 0} },
 441        {0, 0x4d, 0, F_D_IN, resp_log_sense, NULL,
 442            {10,  0xe3, 0xff, 0xff, 0, 0xff, 0xff, 0xff, 0xff, 0xc7, 0, 0, 0,
 443             0, 0, 0} },
 444        {0, 0x25, 0, F_D_IN, resp_readcap, NULL,
 445            {10,  0xe1, 0xff, 0xff, 0xff, 0xff, 0, 0, 0x1, 0xc7, 0, 0, 0, 0,
 446             0, 0} },
 447        {3, 0x88, 0, F_D_IN | FF_DIRECT_IO, resp_read_dt0, read_iarr,
 448            {16,  0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 449             0xff, 0xff, 0xff, 0x9f, 0xc7} },           /* READ(16) */
 450/* 10 */
 451        {3, 0x8a, 0, F_D_OUT | FF_DIRECT_IO, resp_write_dt0, write_iarr,
 452            {16,  0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 453             0xff, 0xff, 0xff, 0x9f, 0xc7} },           /* WRITE(16) */
 454        {0, 0x1b, 0, 0, resp_start_stop, NULL,          /* START STOP UNIT */
 455            {6,  0x1, 0, 0xf, 0xf7, 0xc7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
 456        {1, 0x9e, 0x10, F_SA_LOW | F_D_IN, resp_readcap16, sa_in_iarr,
 457            {16,  0x10, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
 458             0xff, 0xff, 0xff, 0x1, 0xc7} },    /* READ CAPACITY(16) */
 459        {0, 0, 0, F_INV_OP | FF_RESPOND, NULL, NULL, /* SA OUT */
 460            {0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
 461        {2, 0xa3, 0xa, F_SA_LOW | F_D_IN, resp_report_tgtpgs, maint_in_iarr,
 462            {12,  0xea, 0, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0xc7, 0, 0, 0,
 463             0} },
 464        {0, 0, 0, F_INV_OP | FF_RESPOND, NULL, NULL, /* MAINT OUT */
 465            {0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
 466        {0, 0, 0, F_INV_OP | FF_RESPOND, NULL, NULL, /* VERIFY */
 467            {0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
 468        {1, 0x7f, 0x9, F_SA_HIGH | F_D_IN | FF_DIRECT_IO, resp_read_dt0,
 469            vl_iarr, {32,  0xc7, 0, 0, 0, 0, 0x1f, 0x18, 0x0, 0x9, 0xfe, 0,
 470                      0xff, 0xff, 0xff, 0xff} },/* VARIABLE LENGTH, READ(32) */
 471        {1, 0x56, 0, F_D_OUT, NULL, reserve_iarr, /* RESERVE(10) */
 472            {10,  0xff, 0xff, 0xff, 0, 0, 0, 0xff, 0xff, 0xc7, 0, 0, 0, 0, 0,
 473             0} },
 474        {1, 0x57, 0, F_D_OUT, NULL, release_iarr, /* RELEASE(10) */
 475            {10,  0x13, 0xff, 0xff, 0, 0, 0, 0xff, 0xff, 0xc7, 0, 0, 0, 0, 0,
 476             0} },
 477/* 20 */
 478        {0, 0, 0, F_INV_OP | FF_RESPOND, NULL, NULL, /* ALLOW REMOVAL */
 479            {0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
 480        {0, 0x1, 0, 0, resp_start_stop, NULL, /* REWIND ?? */
 481            {6,  0x1, 0, 0, 0, 0xc7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
 482        {0, 0, 0, F_INV_OP | FF_RESPOND, NULL, NULL, /* ATA_PT */
 483            {0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
 484        {0, 0x1d, F_D_OUT, 0, NULL, NULL,       /* SEND DIAGNOSTIC */
 485            {6,  0xf7, 0, 0xff, 0xff, 0xc7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
 486        {0, 0x42, 0, F_D_OUT | FF_DIRECT_IO, resp_unmap, NULL, /* UNMAP */
 487            {10,  0x1, 0, 0, 0, 0, 0x1f, 0xff, 0xff, 0xc7, 0, 0, 0, 0, 0, 0} },
 488        {0, 0x53, 0, F_D_IN | F_D_OUT | FF_DIRECT_IO, resp_xdwriteread_10,
 489            NULL, {10,  0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xff, 0xff, 0xc7,
 490                   0, 0, 0, 0, 0, 0} },
 491        {0, 0x3b, 0, F_D_OUT_MAYBE, resp_write_buffer, NULL,
 492            {10,  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc7, 0, 0,
 493             0, 0, 0, 0} },                     /* WRITE_BUFFER */
 494        {1, 0x41, 0, F_D_OUT_MAYBE | FF_DIRECT_IO, resp_write_same_10,
 495            write_same_iarr, {10,  0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xff,
 496                              0xff, 0xc7, 0, 0, 0, 0, 0, 0} },
 497        {0, 0x35, 0, F_DELAY_OVERR | FF_DIRECT_IO, NULL, NULL, /* SYNC_CACHE */
 498            {10,  0x7, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xff, 0xff, 0xc7, 0, 0,
 499             0, 0, 0, 0} },
 500        {0, 0x89, 0, F_D_OUT | FF_DIRECT_IO, resp_comp_write, NULL,
 501            {16,  0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0,
 502             0, 0xff, 0x1f, 0xc7} },            /* COMPARE AND WRITE */
 503
 504/* 30 */
 505        {0xff, 0, 0, 0, NULL, NULL,             /* terminating element */
 506            {0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
 507};
 508
 509struct sdebug_scmd_extra_t {
 510        bool inj_recovered;
 511        bool inj_transport;
 512        bool inj_dif;
 513        bool inj_dix;
 514        bool inj_short;
 515};
 516
 517static int scsi_debug_add_host = DEF_NUM_HOST;
 518static int scsi_debug_ato = DEF_ATO;
 519static int scsi_debug_delay = DEF_DELAY;
 520static int scsi_debug_dev_size_mb = DEF_DEV_SIZE_MB;
 521static int scsi_debug_dif = DEF_DIF;
 522static int scsi_debug_dix = DEF_DIX;
 523static int scsi_debug_dsense = DEF_D_SENSE;
 524static int scsi_debug_every_nth = DEF_EVERY_NTH;
 525static int scsi_debug_fake_rw = DEF_FAKE_RW;
 526static unsigned int scsi_debug_guard = DEF_GUARD;
 527static int scsi_debug_lowest_aligned = DEF_LOWEST_ALIGNED;
 528static int scsi_debug_max_luns = DEF_MAX_LUNS;
 529static int scsi_debug_max_queue = SCSI_DEBUG_CANQUEUE;
 530static atomic_t retired_max_queue;      /* if > 0 then was prior max_queue */
 531static int scsi_debug_ndelay = DEF_NDELAY;
 532static int scsi_debug_no_lun_0 = DEF_NO_LUN_0;
 533static int scsi_debug_no_uld = 0;
 534static int scsi_debug_num_parts = DEF_NUM_PARTS;
 535static int scsi_debug_num_tgts = DEF_NUM_TGTS; /* targets per host */
 536static int scsi_debug_opt_blks = DEF_OPT_BLKS;
 537static int scsi_debug_opts = DEF_OPTS;
 538static int scsi_debug_physblk_exp = DEF_PHYSBLK_EXP;
 539static int scsi_debug_ptype = DEF_PTYPE; /* SCSI peripheral type (0==disk) */
 540static int scsi_debug_scsi_level = DEF_SCSI_LEVEL;
 541static int scsi_debug_sector_size = DEF_SECTOR_SIZE;
 542static int scsi_debug_virtual_gb = DEF_VIRTUAL_GB;
 543static int scsi_debug_vpd_use_hostno = DEF_VPD_USE_HOSTNO;
 544static unsigned int scsi_debug_lbpu = DEF_LBPU;
 545static unsigned int scsi_debug_lbpws = DEF_LBPWS;
 546static unsigned int scsi_debug_lbpws10 = DEF_LBPWS10;
 547static unsigned int scsi_debug_lbprz = DEF_LBPRZ;
 548static unsigned int scsi_debug_unmap_alignment = DEF_UNMAP_ALIGNMENT;
 549static unsigned int scsi_debug_unmap_granularity = DEF_UNMAP_GRANULARITY;
 550static unsigned int scsi_debug_unmap_max_blocks = DEF_UNMAP_MAX_BLOCKS;
 551static unsigned int scsi_debug_unmap_max_desc = DEF_UNMAP_MAX_DESC;
 552static unsigned int scsi_debug_write_same_length = DEF_WRITESAME_LENGTH;
 553static bool scsi_debug_removable = DEF_REMOVABLE;
 554static bool scsi_debug_clustering;
 555static bool scsi_debug_host_lock = DEF_HOST_LOCK;
 556static bool scsi_debug_strict = DEF_STRICT;
 557static bool sdebug_any_injecting_opt;
 558
 559static atomic_t sdebug_cmnd_count;
 560static atomic_t sdebug_completions;
 561static atomic_t sdebug_a_tsf;           /* counter of 'almost' TSFs */
 562
 563#define DEV_READONLY(TGT)      (0)
 564
 565static unsigned int sdebug_store_sectors;
 566static sector_t sdebug_capacity;        /* in sectors */
 567
 568/* old BIOS stuff, kernel may get rid of them but some mode sense pages
 569   may still need them */
 570static int sdebug_heads;                /* heads per disk */
 571static int sdebug_cylinders_per;        /* cylinders per surface */
 572static int sdebug_sectors_per;          /* sectors per cylinder */
 573
 574#define SDEBUG_MAX_PARTS 4
 575
 576#define SCSI_DEBUG_MAX_CMD_LEN 32
 577
 578static unsigned int scsi_debug_lbp(void)
 579{
 580        return ((0 == scsi_debug_fake_rw) &&
 581                (scsi_debug_lbpu | scsi_debug_lbpws | scsi_debug_lbpws10));
 582}
 583
 584struct sdebug_dev_info {
 585        struct list_head dev_list;
 586        unsigned int channel;
 587        unsigned int target;
 588        u64 lun;
 589        struct sdebug_host_info *sdbg_host;
 590        unsigned long uas_bm[1];
 591        atomic_t num_in_q;
 592        char stopped;           /* TODO: should be atomic */
 593        bool used;
 594};
 595
 596struct sdebug_host_info {
 597        struct list_head host_list;
 598        struct Scsi_Host *shost;
 599        struct device dev;
 600        struct list_head dev_info_list;
 601};
 602
 603#define to_sdebug_host(d)       \
 604        container_of(d, struct sdebug_host_info, dev)
 605
 606static LIST_HEAD(sdebug_host_list);
 607static DEFINE_SPINLOCK(sdebug_host_list_lock);
 608
 609
 610struct sdebug_hrtimer {         /* ... is derived from hrtimer */
 611        struct hrtimer hrt;     /* must be first element */
 612        int qa_indx;
 613};
 614
 615struct sdebug_queued_cmd {
 616        /* in_use flagged by a bit in queued_in_use_bm[] */
 617        struct timer_list *cmnd_timerp;
 618        struct tasklet_struct *tletp;
 619        struct sdebug_hrtimer *sd_hrtp;
 620        struct scsi_cmnd * a_cmnd;
 621};
 622static struct sdebug_queued_cmd queued_arr[SCSI_DEBUG_CANQUEUE];
 623static unsigned long queued_in_use_bm[SCSI_DEBUG_CANQUEUE_WORDS];
 624
 625
 626static unsigned char * fake_storep;     /* ramdisk storage */
 627static struct sd_dif_tuple *dif_storep; /* protection info */
 628static void *map_storep;                /* provisioning map */
 629
 630static unsigned long map_size;
 631static int num_aborts;
 632static int num_dev_resets;
 633static int num_target_resets;
 634static int num_bus_resets;
 635static int num_host_resets;
 636static int dix_writes;
 637static int dix_reads;
 638static int dif_errors;
 639
 640static DEFINE_SPINLOCK(queued_arr_lock);
 641static DEFINE_RWLOCK(atomic_rw);
 642
 643static char sdebug_proc_name[] = MY_NAME;
 644static const char *my_name = MY_NAME;
 645
 646static struct bus_type pseudo_lld_bus;
 647
 648static struct device_driver sdebug_driverfs_driver = {
 649        .name           = sdebug_proc_name,
 650        .bus            = &pseudo_lld_bus,
 651};
 652
 653static const int check_condition_result =
 654                (DRIVER_SENSE << 24) | SAM_STAT_CHECK_CONDITION;
 655
 656static const int illegal_condition_result =
 657        (DRIVER_SENSE << 24) | (DID_ABORT << 16) | SAM_STAT_CHECK_CONDITION;
 658
 659static const int device_qfull_result =
 660        (DID_OK << 16) | (COMMAND_COMPLETE << 8) | SAM_STAT_TASK_SET_FULL;
 661
 662static unsigned char caching_pg[] = {0x8, 18, 0x14, 0, 0xff, 0xff, 0, 0,
 663                                     0xff, 0xff, 0xff, 0xff, 0x80, 0x14, 0, 0,
 664                                     0, 0, 0, 0};
 665static unsigned char ctrl_m_pg[] = {0xa, 10, 2, 0, 0, 0, 0, 0,
 666                                    0, 0, 0x2, 0x4b};
 667static unsigned char iec_m_pg[] = {0x1c, 0xa, 0x08, 0, 0, 0, 0, 0,
 668                                   0, 0, 0x0, 0x0};
 669
 670static void *fake_store(unsigned long long lba)
 671{
 672        lba = do_div(lba, sdebug_store_sectors);
 673
 674        return fake_storep + lba * scsi_debug_sector_size;
 675}
 676
 677static struct sd_dif_tuple *dif_store(sector_t sector)
 678{
 679        sector = do_div(sector, sdebug_store_sectors);
 680
 681        return dif_storep + sector;
 682}
 683
 684static int sdebug_add_adapter(void);
 685static void sdebug_remove_adapter(void);
 686
 687static void sdebug_max_tgts_luns(void)
 688{
 689        struct sdebug_host_info *sdbg_host;
 690        struct Scsi_Host *hpnt;
 691
 692        spin_lock(&sdebug_host_list_lock);
 693        list_for_each_entry(sdbg_host, &sdebug_host_list, host_list) {
 694                hpnt = sdbg_host->shost;
 695                if ((hpnt->this_id >= 0) &&
 696                    (scsi_debug_num_tgts > hpnt->this_id))
 697                        hpnt->max_id = scsi_debug_num_tgts + 1;
 698                else
 699                        hpnt->max_id = scsi_debug_num_tgts;
 700                /* scsi_debug_max_luns; */
 701                hpnt->max_lun = SAM2_WLUN_REPORT_LUNS;
 702        }
 703        spin_unlock(&sdebug_host_list_lock);
 704}
 705
 706enum sdeb_cmd_data {SDEB_IN_DATA = 0, SDEB_IN_CDB = 1};
 707
 708/* Set in_bit to -1 to indicate no bit position of invalid field */
 709static void
 710mk_sense_invalid_fld(struct scsi_cmnd *scp, enum sdeb_cmd_data c_d,
 711                     int in_byte, int in_bit)
 712{
 713        unsigned char *sbuff;
 714        u8 sks[4];
 715        int sl, asc;
 716
 717        sbuff = scp->sense_buffer;
 718        if (!sbuff) {
 719                sdev_printk(KERN_ERR, scp->device,
 720                            "%s: sense_buffer is NULL\n", __func__);
 721                return;
 722        }
 723        asc = c_d ? INVALID_FIELD_IN_CDB : INVALID_FIELD_IN_PARAM_LIST;
 724        memset(sbuff, 0, SCSI_SENSE_BUFFERSIZE);
 725        scsi_build_sense_buffer(scsi_debug_dsense, sbuff, ILLEGAL_REQUEST,
 726                                asc, 0);
 727        memset(sks, 0, sizeof(sks));
 728        sks[0] = 0x80;
 729        if (c_d)
 730                sks[0] |= 0x40;
 731        if (in_bit >= 0) {
 732                sks[0] |= 0x8;
 733                sks[0] |= 0x7 & in_bit;
 734        }
 735        put_unaligned_be16(in_byte, sks + 1);
 736        if (scsi_debug_dsense) {
 737                sl = sbuff[7] + 8;
 738                sbuff[7] = sl;
 739                sbuff[sl] = 0x2;
 740                sbuff[sl + 1] = 0x6;
 741                memcpy(sbuff + sl + 4, sks, 3);
 742        } else
 743                memcpy(sbuff + 15, sks, 3);
 744        if (SCSI_DEBUG_OPT_NOISE & scsi_debug_opts)
 745                sdev_printk(KERN_INFO, scp->device, "%s:  [sense_key,asc,ascq"
 746                            "]: [0x5,0x%x,0x0] %c byte=%d, bit=%d\n",
 747                            my_name, asc, c_d ? 'C' : 'D', in_byte, in_bit);
 748}
 749
 750static void mk_sense_buffer(struct scsi_cmnd *scp, int key, int asc, int asq)
 751{
 752        unsigned char *sbuff;
 753
 754        sbuff = scp->sense_buffer;
 755        if (!sbuff) {
 756                sdev_printk(KERN_ERR, scp->device,
 757                            "%s: sense_buffer is NULL\n", __func__);
 758                return;
 759        }
 760        memset(sbuff, 0, SCSI_SENSE_BUFFERSIZE);
 761
 762        scsi_build_sense_buffer(scsi_debug_dsense, sbuff, key, asc, asq);
 763
 764        if (SCSI_DEBUG_OPT_NOISE & scsi_debug_opts)
 765                sdev_printk(KERN_INFO, scp->device,
 766                            "%s:  [sense_key,asc,ascq]: [0x%x,0x%x,0x%x]\n",
 767                            my_name, key, asc, asq);
 768}
 769
 770static void
 771mk_sense_invalid_opcode(struct scsi_cmnd *scp)
 772{
 773        mk_sense_buffer(scp, ILLEGAL_REQUEST, INVALID_OPCODE, 0);
 774}
 775
 776static int scsi_debug_ioctl(struct scsi_device *dev, int cmd, void __user *arg)
 777{
 778        if (SCSI_DEBUG_OPT_NOISE & scsi_debug_opts) {
 779                if (0x1261 == cmd)
 780                        sdev_printk(KERN_INFO, dev,
 781                                    "%s: BLKFLSBUF [0x1261]\n", __func__);
 782                else if (0x5331 == cmd)
 783                        sdev_printk(KERN_INFO, dev,
 784                                    "%s: CDROM_GET_CAPABILITY [0x5331]\n",
 785                                    __func__);
 786                else
 787                        sdev_printk(KERN_INFO, dev, "%s: cmd=0x%x\n",
 788                                    __func__, cmd);
 789        }
 790        return -EINVAL;
 791        /* return -ENOTTY; // correct return but upsets fdisk */
 792}
 793
 794static void clear_luns_changed_on_target(struct sdebug_dev_info *devip)
 795{
 796        struct sdebug_host_info *sdhp;
 797        struct sdebug_dev_info *dp;
 798
 799        spin_lock(&sdebug_host_list_lock);
 800        list_for_each_entry(sdhp, &sdebug_host_list, host_list) {
 801                list_for_each_entry(dp, &sdhp->dev_info_list, dev_list) {
 802                        if ((devip->sdbg_host == dp->sdbg_host) &&
 803                            (devip->target == dp->target))
 804                                clear_bit(SDEBUG_UA_LUNS_CHANGED, dp->uas_bm);
 805                }
 806        }
 807        spin_unlock(&sdebug_host_list_lock);
 808}
 809
 810static int check_readiness(struct scsi_cmnd *SCpnt, int uas_only,
 811                           struct sdebug_dev_info * devip)
 812{
 813        int k;
 814        bool debug = !!(SCSI_DEBUG_OPT_NOISE & scsi_debug_opts);
 815
 816        k = find_first_bit(devip->uas_bm, SDEBUG_NUM_UAS);
 817        if (k != SDEBUG_NUM_UAS) {
 818                const char *cp = NULL;
 819
 820                switch (k) {
 821                case SDEBUG_UA_POR:
 822                        mk_sense_buffer(SCpnt, UNIT_ATTENTION,
 823                                        UA_RESET_ASC, POWER_ON_RESET_ASCQ);
 824                        if (debug)
 825                                cp = "power on reset";
 826                        break;
 827                case SDEBUG_UA_BUS_RESET:
 828                        mk_sense_buffer(SCpnt, UNIT_ATTENTION,
 829                                        UA_RESET_ASC, BUS_RESET_ASCQ);
 830                        if (debug)
 831                                cp = "bus reset";
 832                        break;
 833                case SDEBUG_UA_MODE_CHANGED:
 834                        mk_sense_buffer(SCpnt, UNIT_ATTENTION,
 835                                        UA_CHANGED_ASC, MODE_CHANGED_ASCQ);
 836                        if (debug)
 837                                cp = "mode parameters changed";
 838                        break;
 839                case SDEBUG_UA_CAPACITY_CHANGED:
 840                        mk_sense_buffer(SCpnt, UNIT_ATTENTION,
 841                                        UA_CHANGED_ASC, CAPACITY_CHANGED_ASCQ);
 842                        if (debug)
 843                                cp = "capacity data changed";
 844                        break;
 845                case SDEBUG_UA_MICROCODE_CHANGED:
 846                        mk_sense_buffer(SCpnt, UNIT_ATTENTION,
 847                                 TARGET_CHANGED_ASC, MICROCODE_CHANGED_ASCQ);
 848                        if (debug)
 849                                cp = "microcode has been changed";
 850                        break;
 851                case SDEBUG_UA_MICROCODE_CHANGED_WO_RESET:
 852                        mk_sense_buffer(SCpnt, UNIT_ATTENTION,
 853                                        TARGET_CHANGED_ASC,
 854                                        MICROCODE_CHANGED_WO_RESET_ASCQ);
 855                        if (debug)
 856                                cp = "microcode has been changed without reset";
 857                        break;
 858                case SDEBUG_UA_LUNS_CHANGED:
 859                        /*
 860                         * SPC-3 behavior is to report a UNIT ATTENTION with
 861                         * ASC/ASCQ REPORTED LUNS DATA HAS CHANGED on every LUN
 862                         * on the target, until a REPORT LUNS command is
 863                         * received.  SPC-4 behavior is to report it only once.
 864                         * NOTE:  scsi_debug_scsi_level does not use the same
 865                         * values as struct scsi_device->scsi_level.
 866                         */
 867                        if (scsi_debug_scsi_level >= 6) /* SPC-4 and above */
 868                                clear_luns_changed_on_target(devip);
 869                        mk_sense_buffer(SCpnt, UNIT_ATTENTION,
 870                                        TARGET_CHANGED_ASC,
 871                                        LUNS_CHANGED_ASCQ);
 872                        if (debug)
 873                                cp = "reported luns data has changed";
 874                        break;
 875                default:
 876                        pr_warn("%s: unexpected unit attention code=%d\n",
 877                                __func__, k);
 878                        if (debug)
 879                                cp = "unknown";
 880                        break;
 881                }
 882                clear_bit(k, devip->uas_bm);
 883                if (debug)
 884                        sdev_printk(KERN_INFO, SCpnt->device,
 885                                   "%s reports: Unit attention: %s\n",
 886                                   my_name, cp);
 887                return check_condition_result;
 888        }
 889        if ((UAS_TUR == uas_only) && devip->stopped) {
 890                mk_sense_buffer(SCpnt, NOT_READY, LOGICAL_UNIT_NOT_READY,
 891                                0x2);
 892                if (debug)
 893                        sdev_printk(KERN_INFO, SCpnt->device,
 894                                    "%s reports: Not ready: %s\n", my_name,
 895                                    "initializing command required");
 896                return check_condition_result;
 897        }
 898        return 0;
 899}
 900
 901/* Returns 0 if ok else (DID_ERROR << 16). Sets scp->resid . */
 902static int fill_from_dev_buffer(struct scsi_cmnd *scp, unsigned char *arr,
 903                                int arr_len)
 904{
 905        int act_len;
 906        struct scsi_data_buffer *sdb = scsi_in(scp);
 907
 908        if (!sdb->length)
 909                return 0;
 910        if (!(scsi_bidi_cmnd(scp) || scp->sc_data_direction == DMA_FROM_DEVICE))
 911                return (DID_ERROR << 16);
 912
 913        act_len = sg_copy_from_buffer(sdb->table.sgl, sdb->table.nents,
 914                                      arr, arr_len);
 915        sdb->resid = scsi_bufflen(scp) - act_len;
 916
 917        return 0;
 918}
 919
 920/* Returns number of bytes fetched into 'arr' or -1 if error. */
 921static int fetch_to_dev_buffer(struct scsi_cmnd *scp, unsigned char *arr,
 922                               int arr_len)
 923{
 924        if (!scsi_bufflen(scp))
 925                return 0;
 926        if (!(scsi_bidi_cmnd(scp) || scp->sc_data_direction == DMA_TO_DEVICE))
 927                return -1;
 928
 929        return scsi_sg_copy_to_buffer(scp, arr, arr_len);
 930}
 931
 932
 933static const char * inq_vendor_id = "Linux   ";
 934static const char * inq_product_id = "scsi_debug      ";
 935static const char *inq_product_rev = "0184";    /* version less '.' */
 936
 937/* Device identification VPD page. Returns number of bytes placed in arr */
 938static int inquiry_evpd_83(unsigned char * arr, int port_group_id,
 939                           int target_dev_id, int dev_id_num,
 940                           const char * dev_id_str,
 941                           int dev_id_str_len)
 942{
 943        int num, port_a;
 944        char b[32];
 945
 946        port_a = target_dev_id + 1;
 947        /* T10 vendor identifier field format (faked) */
 948        arr[0] = 0x2;   /* ASCII */
 949        arr[1] = 0x1;
 950        arr[2] = 0x0;
 951        memcpy(&arr[4], inq_vendor_id, 8);
 952        memcpy(&arr[12], inq_product_id, 16);
 953        memcpy(&arr[28], dev_id_str, dev_id_str_len);
 954        num = 8 + 16 + dev_id_str_len;
 955        arr[3] = num;
 956        num += 4;
 957        if (dev_id_num >= 0) {
 958                /* NAA-5, Logical unit identifier (binary) */
 959                arr[num++] = 0x1;       /* binary (not necessarily sas) */
 960                arr[num++] = 0x3;       /* PIV=0, lu, naa */
 961                arr[num++] = 0x0;
 962                arr[num++] = 0x8;
 963                arr[num++] = 0x53;  /* naa-5 ieee company id=0x333333 (fake) */
 964                arr[num++] = 0x33;
 965                arr[num++] = 0x33;
 966                arr[num++] = 0x30;
 967                arr[num++] = (dev_id_num >> 24);
 968                arr[num++] = (dev_id_num >> 16) & 0xff;
 969                arr[num++] = (dev_id_num >> 8) & 0xff;
 970                arr[num++] = dev_id_num & 0xff;
 971                /* Target relative port number */
 972                arr[num++] = 0x61;      /* proto=sas, binary */
 973                arr[num++] = 0x94;      /* PIV=1, target port, rel port */
 974                arr[num++] = 0x0;       /* reserved */
 975                arr[num++] = 0x4;       /* length */
 976                arr[num++] = 0x0;       /* reserved */
 977                arr[num++] = 0x0;       /* reserved */
 978                arr[num++] = 0x0;
 979                arr[num++] = 0x1;       /* relative port A */
 980        }
 981        /* NAA-5, Target port identifier */
 982        arr[num++] = 0x61;      /* proto=sas, binary */
 983        arr[num++] = 0x93;      /* piv=1, target port, naa */
 984        arr[num++] = 0x0;
 985        arr[num++] = 0x8;
 986        arr[num++] = 0x52;      /* naa-5, company id=0x222222 (fake) */
 987        arr[num++] = 0x22;
 988        arr[num++] = 0x22;
 989        arr[num++] = 0x20;
 990        arr[num++] = (port_a >> 24);
 991        arr[num++] = (port_a >> 16) & 0xff;
 992        arr[num++] = (port_a >> 8) & 0xff;
 993        arr[num++] = port_a & 0xff;
 994        /* NAA-5, Target port group identifier */
 995        arr[num++] = 0x61;      /* proto=sas, binary */
 996        arr[num++] = 0x95;      /* piv=1, target port group id */
 997        arr[num++] = 0x0;
 998        arr[num++] = 0x4;
 999        arr[num++] = 0;
1000        arr[num++] = 0;
1001        arr[num++] = (port_group_id >> 8) & 0xff;
1002        arr[num++] = port_group_id & 0xff;
1003        /* NAA-5, Target device identifier */
1004        arr[num++] = 0x61;      /* proto=sas, binary */
1005        arr[num++] = 0xa3;      /* piv=1, target device, naa */
1006        arr[num++] = 0x0;
1007        arr[num++] = 0x8;
1008        arr[num++] = 0x52;      /* naa-5, company id=0x222222 (fake) */
1009        arr[num++] = 0x22;
1010        arr[num++] = 0x22;
1011        arr[num++] = 0x20;
1012        arr[num++] = (target_dev_id >> 24);
1013        arr[num++] = (target_dev_id >> 16) & 0xff;
1014        arr[num++] = (target_dev_id >> 8) & 0xff;
1015        arr[num++] = target_dev_id & 0xff;
1016        /* SCSI name string: Target device identifier */
1017        arr[num++] = 0x63;      /* proto=sas, UTF-8 */
1018        arr[num++] = 0xa8;      /* piv=1, target device, SCSI name string */
1019        arr[num++] = 0x0;
1020        arr[num++] = 24;
1021        memcpy(arr + num, "naa.52222220", 12);
1022        num += 12;
1023        snprintf(b, sizeof(b), "%08X", target_dev_id);
1024        memcpy(arr + num, b, 8);
1025        num += 8;
1026        memset(arr + num, 0, 4);
1027        num += 4;
1028        return num;
1029}
1030
1031
1032static unsigned char vpd84_data[] = {
1033/* from 4th byte */ 0x22,0x22,0x22,0x0,0xbb,0x0,
1034    0x22,0x22,0x22,0x0,0xbb,0x1,
1035    0x22,0x22,0x22,0x0,0xbb,0x2,
1036};
1037
1038/*  Software interface identification VPD page */
1039static int inquiry_evpd_84(unsigned char * arr)
1040{
1041        memcpy(arr, vpd84_data, sizeof(vpd84_data));
1042        return sizeof(vpd84_data);
1043}
1044
1045/* Management network addresses VPD page */
1046static int inquiry_evpd_85(unsigned char * arr)
1047{
1048        int num = 0;
1049        const char * na1 = "https://www.kernel.org/config";
1050        const char * na2 = "http://www.kernel.org/log";
1051        int plen, olen;
1052
1053        arr[num++] = 0x1;       /* lu, storage config */
1054        arr[num++] = 0x0;       /* reserved */
1055        arr[num++] = 0x0;
1056        olen = strlen(na1);
1057        plen = olen + 1;
1058        if (plen % 4)
1059                plen = ((plen / 4) + 1) * 4;
1060        arr[num++] = plen;      /* length, null termianted, padded */
1061        memcpy(arr + num, na1, olen);
1062        memset(arr + num + olen, 0, plen - olen);
1063        num += plen;
1064
1065        arr[num++] = 0x4;       /* lu, logging */
1066        arr[num++] = 0x0;       /* reserved */
1067        arr[num++] = 0x0;
1068        olen = strlen(na2);
1069        plen = olen + 1;
1070        if (plen % 4)
1071                plen = ((plen / 4) + 1) * 4;
1072        arr[num++] = plen;      /* length, null terminated, padded */
1073        memcpy(arr + num, na2, olen);
1074        memset(arr + num + olen, 0, plen - olen);
1075        num += plen;
1076
1077        return num;
1078}
1079
1080/* SCSI ports VPD page */
1081static int inquiry_evpd_88(unsigned char * arr, int target_dev_id)
1082{
1083        int num = 0;
1084        int port_a, port_b;
1085
1086        port_a = target_dev_id + 1;
1087        port_b = port_a + 1;
1088        arr[num++] = 0x0;       /* reserved */
1089        arr[num++] = 0x0;       /* reserved */
1090        arr[num++] = 0x0;
1091        arr[num++] = 0x1;       /* relative port 1 (primary) */
1092        memset(arr + num, 0, 6);
1093        num += 6;
1094        arr[num++] = 0x0;
1095        arr[num++] = 12;        /* length tp descriptor */
1096        /* naa-5 target port identifier (A) */
1097        arr[num++] = 0x61;      /* proto=sas, binary */
1098        arr[num++] = 0x93;      /* PIV=1, target port, NAA */
1099        arr[num++] = 0x0;       /* reserved */
1100        arr[num++] = 0x8;       /* length */
1101        arr[num++] = 0x52;      /* NAA-5, company_id=0x222222 (fake) */
1102        arr[num++] = 0x22;
1103        arr[num++] = 0x22;
1104        arr[num++] = 0x20;
1105        arr[num++] = (port_a >> 24);
1106        arr[num++] = (port_a >> 16) & 0xff;
1107        arr[num++] = (port_a >> 8) & 0xff;
1108        arr[num++] = port_a & 0xff;
1109
1110        arr[num++] = 0x0;       /* reserved */
1111        arr[num++] = 0x0;       /* reserved */
1112        arr[num++] = 0x0;
1113        arr[num++] = 0x2;       /* relative port 2 (secondary) */
1114        memset(arr + num, 0, 6);
1115        num += 6;
1116        arr[num++] = 0x0;
1117        arr[num++] = 12;        /* length tp descriptor */
1118        /* naa-5 target port identifier (B) */
1119        arr[num++] = 0x61;      /* proto=sas, binary */
1120        arr[num++] = 0x93;      /* PIV=1, target port, NAA */
1121        arr[num++] = 0x0;       /* reserved */
1122        arr[num++] = 0x8;       /* length */
1123        arr[num++] = 0x52;      /* NAA-5, company_id=0x222222 (fake) */
1124        arr[num++] = 0x22;
1125        arr[num++] = 0x22;
1126        arr[num++] = 0x20;
1127        arr[num++] = (port_b >> 24);
1128        arr[num++] = (port_b >> 16) & 0xff;
1129        arr[num++] = (port_b >> 8) & 0xff;
1130        arr[num++] = port_b & 0xff;
1131
1132        return num;
1133}
1134
1135
1136static unsigned char vpd89_data[] = {
1137/* from 4th byte */ 0,0,0,0,
1138'l','i','n','u','x',' ',' ',' ',
1139'S','A','T',' ','s','c','s','i','_','d','e','b','u','g',' ',' ',
1140'1','2','3','4',
11410x34,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,
11420xec,0,0,0,
11430x5a,0xc,0xff,0x3f,0x37,0xc8,0x10,0,0,0,0,0,0x3f,0,0,0,
11440,0,0,0,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x20,0x20,0x20,0x20,
11450x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0,0,0,0x40,0x4,0,0x2e,0x33,
11460x38,0x31,0x20,0x20,0x20,0x20,0x54,0x53,0x38,0x33,0x30,0x30,0x33,0x31,
11470x53,0x41,
11480x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
11490x20,0x20,
11500x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
11510x10,0x80,
11520,0,0,0x2f,0,0,0,0x2,0,0x2,0x7,0,0xff,0xff,0x1,0,
11530x3f,0,0xc1,0xff,0x3e,0,0x10,0x1,0xb0,0xf8,0x50,0x9,0,0,0x7,0,
11540x3,0,0x78,0,0x78,0,0xf0,0,0x78,0,0,0,0,0,0,0,
11550,0,0,0,0,0,0,0,0x2,0,0,0,0,0,0,0,
11560x7e,0,0x1b,0,0x6b,0x34,0x1,0x7d,0x3,0x40,0x69,0x34,0x1,0x3c,0x3,0x40,
11570x7f,0x40,0,0,0,0,0xfe,0xfe,0,0,0,0,0,0xfe,0,0,
11580,0,0,0,0,0,0,0,0xb0,0xf8,0x50,0x9,0,0,0,0,
11590,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
11600,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
11610,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
11620x1,0,0xb0,0xf8,0x50,0x9,0xb0,0xf8,0x50,0x9,0x20,0x20,0x2,0,0xb6,0x42,
11630,0x80,0x8a,0,0x6,0x3c,0xa,0x3c,0xff,0xff,0xc6,0x7,0,0x1,0,0x8,
11640xf0,0xf,0,0x10,0x2,0,0x30,0,0,0,0,0,0,0,0x6,0xfe,
11650,0,0x2,0,0x50,0,0x8a,0,0x4f,0x95,0,0,0x21,0,0xb,0,
11660,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
11670,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
11680,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
11690,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
11700,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
11710,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
11720,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
11730,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
11740,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
11750,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
11760,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
11770,0,0,0,0,0,0,0,0,0,0,0,0,0,0xa5,0x51,
1178};
1179
1180/* ATA Information VPD page */
1181static int inquiry_evpd_89(unsigned char * arr)
1182{
1183        memcpy(arr, vpd89_data, sizeof(vpd89_data));
1184        return sizeof(vpd89_data);
1185}
1186
1187
1188static unsigned char vpdb0_data[] = {
1189        /* from 4th byte */ 0,0,0,4, 0,0,0x4,0, 0,0,0,64,
1190        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1191        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1192        0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1193};
1194
1195/* Block limits VPD page (SBC-3) */
1196static int inquiry_evpd_b0(unsigned char * arr)
1197{
1198        unsigned int gran;
1199
1200        memcpy(arr, vpdb0_data, sizeof(vpdb0_data));
1201
1202        /* Optimal transfer length granularity */
1203        gran = 1 << scsi_debug_physblk_exp;
1204        arr[2] = (gran >> 8) & 0xff;
1205        arr[3] = gran & 0xff;
1206
1207        /* Maximum Transfer Length */
1208        if (sdebug_store_sectors > 0x400) {
1209                arr[4] = (sdebug_store_sectors >> 24) & 0xff;
1210                arr[5] = (sdebug_store_sectors >> 16) & 0xff;
1211                arr[6] = (sdebug_store_sectors >> 8) & 0xff;
1212                arr[7] = sdebug_store_sectors & 0xff;
1213        }
1214
1215        /* Optimal Transfer Length */
1216        put_unaligned_be32(scsi_debug_opt_blks, &arr[8]);
1217
1218        if (scsi_debug_lbpu) {
1219                /* Maximum Unmap LBA Count */
1220                put_unaligned_be32(scsi_debug_unmap_max_blocks, &arr[16]);
1221
1222                /* Maximum Unmap Block Descriptor Count */
1223                put_unaligned_be32(scsi_debug_unmap_max_desc, &arr[20]);
1224        }
1225
1226        /* Unmap Granularity Alignment */
1227        if (scsi_debug_unmap_alignment) {
1228                put_unaligned_be32(scsi_debug_unmap_alignment, &arr[28]);
1229                arr[28] |= 0x80; /* UGAVALID */
1230        }
1231
1232        /* Optimal Unmap Granularity */
1233        put_unaligned_be32(scsi_debug_unmap_granularity, &arr[24]);
1234
1235        /* Maximum WRITE SAME Length */
1236        put_unaligned_be64(scsi_debug_write_same_length, &arr[32]);
1237
1238        return 0x3c; /* Mandatory page length for Logical Block Provisioning */
1239
1240        return sizeof(vpdb0_data);
1241}
1242
1243/* Block device characteristics VPD page (SBC-3) */
1244static int inquiry_evpd_b1(unsigned char *arr)
1245{
1246        memset(arr, 0, 0x3c);
1247        arr[0] = 0;
1248        arr[1] = 1;     /* non rotating medium (e.g. solid state) */
1249        arr[2] = 0;
1250        arr[3] = 5;     /* less than 1.8" */
1251
1252        return 0x3c;
1253}
1254
1255/* Logical block provisioning VPD page (SBC-3) */
1256static int inquiry_evpd_b2(unsigned char *arr)
1257{
1258        memset(arr, 0, 0x4);
1259        arr[0] = 0;                     /* threshold exponent */
1260
1261        if (scsi_debug_lbpu)
1262                arr[1] = 1 << 7;
1263
1264        if (scsi_debug_lbpws)
1265                arr[1] |= 1 << 6;
1266
1267        if (scsi_debug_lbpws10)
1268                arr[1] |= 1 << 5;
1269
1270        if (scsi_debug_lbprz)
1271                arr[1] |= 1 << 2;
1272
1273        return 0x4;
1274}
1275
1276#define SDEBUG_LONG_INQ_SZ 96
1277#define SDEBUG_MAX_INQ_ARR_SZ 584
1278
1279static int resp_inquiry(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
1280{
1281        unsigned char pq_pdt;
1282        unsigned char * arr;
1283        unsigned char *cmd = scp->cmnd;
1284        int alloc_len, n, ret;
1285        bool have_wlun;
1286
1287        alloc_len = (cmd[3] << 8) + cmd[4];
1288        arr = kzalloc(SDEBUG_MAX_INQ_ARR_SZ, GFP_ATOMIC);
1289        if (! arr)
1290                return DID_REQUEUE << 16;
1291        have_wlun = (scp->device->lun == SAM2_WLUN_REPORT_LUNS);
1292        if (have_wlun)
1293                pq_pdt = 0x1e;  /* present, wlun */
1294        else if (scsi_debug_no_lun_0 && (0 == devip->lun))
1295                pq_pdt = 0x7f;  /* not present, no device type */
1296        else
1297                pq_pdt = (scsi_debug_ptype & 0x1f);
1298        arr[0] = pq_pdt;
1299        if (0x2 & cmd[1]) {  /* CMDDT bit set */
1300                mk_sense_invalid_fld(scp, SDEB_IN_CDB, 1, 1);
1301                kfree(arr);
1302                return check_condition_result;
1303        } else if (0x1 & cmd[1]) {  /* EVPD bit set */
1304                int lu_id_num, port_group_id, target_dev_id, len;
1305                char lu_id_str[6];
1306                int host_no = devip->sdbg_host->shost->host_no;
1307                
1308                port_group_id = (((host_no + 1) & 0x7f) << 8) +
1309                    (devip->channel & 0x7f);
1310                if (0 == scsi_debug_vpd_use_hostno)
1311                        host_no = 0;
1312                lu_id_num = have_wlun ? -1 : (((host_no + 1) * 2000) +
1313                            (devip->target * 1000) + devip->lun);
1314                target_dev_id = ((host_no + 1) * 2000) +
1315                                 (devip->target * 1000) - 3;
1316                len = scnprintf(lu_id_str, 6, "%d", lu_id_num);
1317                if (0 == cmd[2]) { /* supported vital product data pages */
1318                        arr[1] = cmd[2];        /*sanity */
1319                        n = 4;
1320                        arr[n++] = 0x0;   /* this page */
1321                        arr[n++] = 0x80;  /* unit serial number */
1322                        arr[n++] = 0x83;  /* device identification */
1323                        arr[n++] = 0x84;  /* software interface ident. */
1324                        arr[n++] = 0x85;  /* management network addresses */
1325                        arr[n++] = 0x86;  /* extended inquiry */
1326                        arr[n++] = 0x87;  /* mode page policy */
1327                        arr[n++] = 0x88;  /* SCSI ports */
1328                        arr[n++] = 0x89;  /* ATA information */
1329                        arr[n++] = 0xb0;  /* Block limits (SBC) */
1330                        arr[n++] = 0xb1;  /* Block characteristics (SBC) */
1331                        if (scsi_debug_lbp()) /* Logical Block Prov. (SBC) */
1332                                arr[n++] = 0xb2;
1333                        arr[3] = n - 4;   /* number of supported VPD pages */
1334                } else if (0x80 == cmd[2]) { /* unit serial number */
1335                        arr[1] = cmd[2];        /*sanity */
1336                        arr[3] = len;
1337                        memcpy(&arr[4], lu_id_str, len);
1338                } else if (0x83 == cmd[2]) { /* device identification */
1339                        arr[1] = cmd[2];        /*sanity */
1340                        arr[3] = inquiry_evpd_83(&arr[4], port_group_id,
1341                                                 target_dev_id, lu_id_num,
1342                                                 lu_id_str, len);
1343                } else if (0x84 == cmd[2]) { /* Software interface ident. */
1344                        arr[1] = cmd[2];        /*sanity */
1345                        arr[3] = inquiry_evpd_84(&arr[4]);
1346                } else if (0x85 == cmd[2]) { /* Management network addresses */
1347                        arr[1] = cmd[2];        /*sanity */
1348                        arr[3] = inquiry_evpd_85(&arr[4]);
1349                } else if (0x86 == cmd[2]) { /* extended inquiry */
1350                        arr[1] = cmd[2];        /*sanity */
1351                        arr[3] = 0x3c;  /* number of following entries */
1352                        if (scsi_debug_dif == SD_DIF_TYPE3_PROTECTION)
1353                                arr[4] = 0x4;   /* SPT: GRD_CHK:1 */
1354                        else if (scsi_debug_dif)
1355                                arr[4] = 0x5;   /* SPT: GRD_CHK:1, REF_CHK:1 */
1356                        else
1357                                arr[4] = 0x0;   /* no protection stuff */
1358                        arr[5] = 0x7;   /* head of q, ordered + simple q's */
1359                } else if (0x87 == cmd[2]) { /* mode page policy */
1360                        arr[1] = cmd[2];        /*sanity */
1361                        arr[3] = 0x8;   /* number of following entries */
1362                        arr[4] = 0x2;   /* disconnect-reconnect mp */
1363                        arr[6] = 0x80;  /* mlus, shared */
1364                        arr[8] = 0x18;   /* protocol specific lu */
1365                        arr[10] = 0x82;  /* mlus, per initiator port */
1366                } else if (0x88 == cmd[2]) { /* SCSI Ports */
1367                        arr[1] = cmd[2];        /*sanity */
1368                        arr[3] = inquiry_evpd_88(&arr[4], target_dev_id);
1369                } else if (0x89 == cmd[2]) { /* ATA information */
1370                        arr[1] = cmd[2];        /*sanity */
1371                        n = inquiry_evpd_89(&arr[4]);
1372                        arr[2] = (n >> 8);
1373                        arr[3] = (n & 0xff);
1374                } else if (0xb0 == cmd[2]) { /* Block limits (SBC) */
1375                        arr[1] = cmd[2];        /*sanity */
1376                        arr[3] = inquiry_evpd_b0(&arr[4]);
1377                } else if (0xb1 == cmd[2]) { /* Block characteristics (SBC) */
1378                        arr[1] = cmd[2];        /*sanity */
1379                        arr[3] = inquiry_evpd_b1(&arr[4]);
1380                } else if (0xb2 == cmd[2]) { /* Logical Block Prov. (SBC) */
1381                        arr[1] = cmd[2];        /*sanity */
1382                        arr[3] = inquiry_evpd_b2(&arr[4]);
1383                } else {
1384                        mk_sense_invalid_fld(scp, SDEB_IN_CDB, 2, -1);
1385                        kfree(arr);
1386                        return check_condition_result;
1387                }
1388                len = min(((arr[2] << 8) + arr[3]) + 4, alloc_len);
1389                ret = fill_from_dev_buffer(scp, arr,
1390                            min(len, SDEBUG_MAX_INQ_ARR_SZ));
1391                kfree(arr);
1392                return ret;
1393        }
1394        /* drops through here for a standard inquiry */
1395        arr[1] = scsi_debug_removable ? 0x80 : 0;       /* Removable disk */
1396        arr[2] = scsi_debug_scsi_level;
1397        arr[3] = 2;    /* response_data_format==2 */
1398        arr[4] = SDEBUG_LONG_INQ_SZ - 5;
1399        arr[5] = scsi_debug_dif ? 1 : 0; /* PROTECT bit */
1400        if (0 == scsi_debug_vpd_use_hostno)
1401                arr[5] = 0x10; /* claim: implicit TGPS */
1402        arr[6] = 0x10; /* claim: MultiP */
1403        /* arr[6] |= 0x40; ... claim: EncServ (enclosure services) */
1404        arr[7] = 0xa; /* claim: LINKED + CMDQUE */
1405        memcpy(&arr[8], inq_vendor_id, 8);
1406        memcpy(&arr[16], inq_product_id, 16);
1407        memcpy(&arr[32], inq_product_rev, 4);
1408        /* version descriptors (2 bytes each) follow */
1409        arr[58] = 0x0; arr[59] = 0xa2;  /* SAM-5 rev 4 */
1410        arr[60] = 0x4; arr[61] = 0x68;  /* SPC-4 rev 37 */
1411        n = 62;
1412        if (scsi_debug_ptype == 0) {
1413                arr[n++] = 0x4; arr[n++] = 0xc5; /* SBC-4 rev 36 */
1414        } else if (scsi_debug_ptype == 1) {
1415                arr[n++] = 0x5; arr[n++] = 0x25; /* SSC-4 rev 3 */
1416        }
1417        arr[n++] = 0x20; arr[n++] = 0xe6;  /* SPL-3 rev 7 */
1418        ret = fill_from_dev_buffer(scp, arr,
1419                            min(alloc_len, SDEBUG_LONG_INQ_SZ));
1420        kfree(arr);
1421        return ret;
1422}
1423
1424static int resp_requests(struct scsi_cmnd * scp,
1425                         struct sdebug_dev_info * devip)
1426{
1427        unsigned char * sbuff;
1428        unsigned char *cmd = scp->cmnd;
1429        unsigned char arr[SCSI_SENSE_BUFFERSIZE];
1430        bool dsense, want_dsense;
1431        int len = 18;
1432
1433        memset(arr, 0, sizeof(arr));
1434        dsense = !!(cmd[1] & 1);
1435        want_dsense = dsense || scsi_debug_dsense;
1436        sbuff = scp->sense_buffer;
1437        if ((iec_m_pg[2] & 0x4) && (6 == (iec_m_pg[3] & 0xf))) {
1438                if (dsense) {
1439                        arr[0] = 0x72;
1440                        arr[1] = 0x0;           /* NO_SENSE in sense_key */
1441                        arr[2] = THRESHOLD_EXCEEDED;
1442                        arr[3] = 0xff;          /* TEST set and MRIE==6 */
1443                        len = 8;
1444                } else {
1445                        arr[0] = 0x70;
1446                        arr[2] = 0x0;           /* NO_SENSE in sense_key */
1447                        arr[7] = 0xa;           /* 18 byte sense buffer */
1448                        arr[12] = THRESHOLD_EXCEEDED;
1449                        arr[13] = 0xff;         /* TEST set and MRIE==6 */
1450                }
1451        } else {
1452                memcpy(arr, sbuff, SCSI_SENSE_BUFFERSIZE);
1453                if (arr[0] >= 0x70 && dsense == scsi_debug_dsense)
1454                        ;       /* have sense and formats match */
1455                else if (arr[0] <= 0x70) {
1456                        if (dsense) {
1457                                memset(arr, 0, 8);
1458                                arr[0] = 0x72;
1459                                len = 8;
1460                        } else {
1461                                memset(arr, 0, 18);
1462                                arr[0] = 0x70;
1463                                arr[7] = 0xa;
1464                        }
1465                } else if (dsense) {
1466                        memset(arr, 0, 8);
1467                        arr[0] = 0x72;
1468                        arr[1] = sbuff[2];     /* sense key */
1469                        arr[2] = sbuff[12];    /* asc */
1470                        arr[3] = sbuff[13];    /* ascq */
1471                        len = 8;
1472                } else {
1473                        memset(arr, 0, 18);
1474                        arr[0] = 0x70;
1475                        arr[2] = sbuff[1];
1476                        arr[7] = 0xa;
1477                        arr[12] = sbuff[1];
1478                        arr[13] = sbuff[3];
1479                }
1480
1481        }
1482        mk_sense_buffer(scp, 0, NO_ADDITIONAL_SENSE, 0);
1483        return fill_from_dev_buffer(scp, arr, len);
1484}
1485
1486static int resp_start_stop(struct scsi_cmnd * scp,
1487                           struct sdebug_dev_info * devip)
1488{
1489        unsigned char *cmd = scp->cmnd;
1490        int power_cond, start;
1491
1492        power_cond = (cmd[4] & 0xf0) >> 4;
1493        if (power_cond) {
1494                mk_sense_invalid_fld(scp, SDEB_IN_CDB, 4, 7);
1495                return check_condition_result;
1496        }
1497        start = cmd[4] & 1;
1498        if (start == devip->stopped)
1499                devip->stopped = !start;
1500        return 0;
1501}
1502
1503static sector_t get_sdebug_capacity(void)
1504{
1505        if (scsi_debug_virtual_gb > 0)
1506                return (sector_t)scsi_debug_virtual_gb *
1507                        (1073741824 / scsi_debug_sector_size);
1508        else
1509                return sdebug_store_sectors;
1510}
1511
1512#define SDEBUG_READCAP_ARR_SZ 8
1513static int resp_readcap(struct scsi_cmnd * scp,
1514                        struct sdebug_dev_info * devip)
1515{
1516        unsigned char arr[SDEBUG_READCAP_ARR_SZ];
1517        unsigned int capac;
1518
1519        /* following just in case virtual_gb changed */
1520        sdebug_capacity = get_sdebug_capacity();
1521        memset(arr, 0, SDEBUG_READCAP_ARR_SZ);
1522        if (sdebug_capacity < 0xffffffff) {
1523                capac = (unsigned int)sdebug_capacity - 1;
1524                arr[0] = (capac >> 24);
1525                arr[1] = (capac >> 16) & 0xff;
1526                arr[2] = (capac >> 8) & 0xff;
1527                arr[3] = capac & 0xff;
1528        } else {
1529                arr[0] = 0xff;
1530                arr[1] = 0xff;
1531                arr[2] = 0xff;
1532                arr[3] = 0xff;
1533        }
1534        arr[6] = (scsi_debug_sector_size >> 8) & 0xff;
1535        arr[7] = scsi_debug_sector_size & 0xff;
1536        return fill_from_dev_buffer(scp, arr, SDEBUG_READCAP_ARR_SZ);
1537}
1538
1539#define SDEBUG_READCAP16_ARR_SZ 32
1540static int resp_readcap16(struct scsi_cmnd * scp,
1541                          struct sdebug_dev_info * devip)
1542{
1543        unsigned char *cmd = scp->cmnd;
1544        unsigned char arr[SDEBUG_READCAP16_ARR_SZ];
1545        unsigned long long capac;
1546        int k, alloc_len;
1547
1548        alloc_len = ((cmd[10] << 24) + (cmd[11] << 16) + (cmd[12] << 8)
1549                     + cmd[13]);
1550        /* following just in case virtual_gb changed */
1551        sdebug_capacity = get_sdebug_capacity();
1552        memset(arr, 0, SDEBUG_READCAP16_ARR_SZ);
1553        capac = sdebug_capacity - 1;
1554        for (k = 0; k < 8; ++k, capac >>= 8)
1555                arr[7 - k] = capac & 0xff;
1556        arr[8] = (scsi_debug_sector_size >> 24) & 0xff;
1557        arr[9] = (scsi_debug_sector_size >> 16) & 0xff;
1558        arr[10] = (scsi_debug_sector_size >> 8) & 0xff;
1559        arr[11] = scsi_debug_sector_size & 0xff;
1560        arr[13] = scsi_debug_physblk_exp & 0xf;
1561        arr[14] = (scsi_debug_lowest_aligned >> 8) & 0x3f;
1562
1563        if (scsi_debug_lbp()) {
1564                arr[14] |= 0x80; /* LBPME */
1565                if (scsi_debug_lbprz)
1566                        arr[14] |= 0x40; /* LBPRZ */
1567        }
1568
1569        arr[15] = scsi_debug_lowest_aligned & 0xff;
1570
1571        if (scsi_debug_dif) {
1572                arr[12] = (scsi_debug_dif - 1) << 1; /* P_TYPE */
1573                arr[12] |= 1; /* PROT_EN */
1574        }
1575
1576        return fill_from_dev_buffer(scp, arr,
1577                                    min(alloc_len, SDEBUG_READCAP16_ARR_SZ));
1578}
1579
1580#define SDEBUG_MAX_TGTPGS_ARR_SZ 1412
1581
1582static int resp_report_tgtpgs(struct scsi_cmnd * scp,
1583                              struct sdebug_dev_info * devip)
1584{
1585        unsigned char *cmd = scp->cmnd;
1586        unsigned char * arr;
1587        int host_no = devip->sdbg_host->shost->host_no;
1588        int n, ret, alen, rlen;
1589        int port_group_a, port_group_b, port_a, port_b;
1590
1591        alen = ((cmd[6] << 24) + (cmd[7] << 16) + (cmd[8] << 8)
1592                + cmd[9]);
1593
1594        arr = kzalloc(SDEBUG_MAX_TGTPGS_ARR_SZ, GFP_ATOMIC);
1595        if (! arr)
1596                return DID_REQUEUE << 16;
1597        /*
1598         * EVPD page 0x88 states we have two ports, one
1599         * real and a fake port with no device connected.
1600         * So we create two port groups with one port each
1601         * and set the group with port B to unavailable.
1602         */
1603        port_a = 0x1; /* relative port A */
1604        port_b = 0x2; /* relative port B */
1605        port_group_a = (((host_no + 1) & 0x7f) << 8) +
1606            (devip->channel & 0x7f);
1607        port_group_b = (((host_no + 1) & 0x7f) << 8) +
1608            (devip->channel & 0x7f) + 0x80;
1609
1610        /*
1611         * The asymmetric access state is cycled according to the host_id.
1612         */
1613        n = 4;
1614        if (0 == scsi_debug_vpd_use_hostno) {
1615            arr[n++] = host_no % 3; /* Asymm access state */
1616            arr[n++] = 0x0F; /* claim: all states are supported */
1617        } else {
1618            arr[n++] = 0x0; /* Active/Optimized path */
1619            arr[n++] = 0x01; /* claim: only support active/optimized paths */
1620        }
1621        arr[n++] = (port_group_a >> 8) & 0xff;
1622        arr[n++] = port_group_a & 0xff;
1623        arr[n++] = 0;    /* Reserved */
1624        arr[n++] = 0;    /* Status code */
1625        arr[n++] = 0;    /* Vendor unique */
1626        arr[n++] = 0x1;  /* One port per group */
1627        arr[n++] = 0;    /* Reserved */
1628        arr[n++] = 0;    /* Reserved */
1629        arr[n++] = (port_a >> 8) & 0xff;
1630        arr[n++] = port_a & 0xff;
1631        arr[n++] = 3;    /* Port unavailable */
1632        arr[n++] = 0x08; /* claim: only unavailalbe paths are supported */
1633        arr[n++] = (port_group_b >> 8) & 0xff;
1634        arr[n++] = port_group_b & 0xff;
1635        arr[n++] = 0;    /* Reserved */
1636        arr[n++] = 0;    /* Status code */
1637        arr[n++] = 0;    /* Vendor unique */
1638        arr[n++] = 0x1;  /* One port per group */
1639        arr[n++] = 0;    /* Reserved */
1640        arr[n++] = 0;    /* Reserved */
1641        arr[n++] = (port_b >> 8) & 0xff;
1642        arr[n++] = port_b & 0xff;
1643
1644        rlen = n - 4;
1645        arr[0] = (rlen >> 24) & 0xff;
1646        arr[1] = (rlen >> 16) & 0xff;
1647        arr[2] = (rlen >> 8) & 0xff;
1648        arr[3] = rlen & 0xff;
1649
1650        /*
1651         * Return the smallest value of either
1652         * - The allocated length
1653         * - The constructed command length
1654         * - The maximum array size
1655         */
1656        rlen = min(alen,n);
1657        ret = fill_from_dev_buffer(scp, arr,
1658                                   min(rlen, SDEBUG_MAX_TGTPGS_ARR_SZ));
1659        kfree(arr);
1660        return ret;
1661}
1662
1663static int
1664resp_rsup_opcodes(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
1665{
1666        bool rctd;
1667        u8 reporting_opts, req_opcode, sdeb_i, supp;
1668        u16 req_sa, u;
1669        u32 alloc_len, a_len;
1670        int k, offset, len, errsts, count, bump, na;
1671        const struct opcode_info_t *oip;
1672        const struct opcode_info_t *r_oip;
1673        u8 *arr;
1674        u8 *cmd = scp->cmnd;
1675
1676        rctd = !!(cmd[2] & 0x80);
1677        reporting_opts = cmd[2] & 0x7;
1678        req_opcode = cmd[3];
1679        req_sa = get_unaligned_be16(cmd + 4);
1680        alloc_len = get_unaligned_be32(cmd + 6);
1681        if (alloc_len < 4 || alloc_len > 0xffff) {
1682                mk_sense_invalid_fld(scp, SDEB_IN_CDB, 6, -1);
1683                return check_condition_result;
1684        }
1685        if (alloc_len > 8192)
1686                a_len = 8192;
1687        else
1688                a_len = alloc_len;
1689        arr = kzalloc((a_len < 256) ? 320 : a_len + 64, GFP_ATOMIC);
1690        if (NULL == arr) {
1691                mk_sense_buffer(scp, ILLEGAL_REQUEST, INSUFF_RES_ASC,
1692                                INSUFF_RES_ASCQ);
1693                return check_condition_result;
1694        }
1695        switch (reporting_opts) {
1696        case 0: /* all commands */
1697                /* count number of commands */
1698                for (count = 0, oip = opcode_info_arr;
1699                     oip->num_attached != 0xff; ++oip) {
1700                        if (F_INV_OP & oip->flags)
1701                                continue;
1702                        count += (oip->num_attached + 1);
1703                }
1704                bump = rctd ? 20 : 8;
1705                put_unaligned_be32(count * bump, arr);
1706                for (offset = 4, oip = opcode_info_arr;
1707                     oip->num_attached != 0xff && offset < a_len; ++oip) {
1708                        if (F_INV_OP & oip->flags)
1709                                continue;
1710                        na = oip->num_attached;
1711                        arr[offset] = oip->opcode;
1712                        put_unaligned_be16(oip->sa, arr + offset + 2);
1713                        if (rctd)
1714                                arr[offset + 5] |= 0x2;
1715                        if (FF_SA & oip->flags)
1716                                arr[offset + 5] |= 0x1;
1717                        put_unaligned_be16(oip->len_mask[0], arr + offset + 6);
1718                        if (rctd)
1719                                put_unaligned_be16(0xa, arr + offset + 8);
1720                        r_oip = oip;
1721                        for (k = 0, oip = oip->arrp; k < na; ++k, ++oip) {
1722                                if (F_INV_OP & oip->flags)
1723                                        continue;
1724                                offset += bump;
1725                                arr[offset] = oip->opcode;
1726                                put_unaligned_be16(oip->sa, arr + offset + 2);
1727                                if (rctd)
1728                                        arr[offset + 5] |= 0x2;
1729                                if (FF_SA & oip->flags)
1730                                        arr[offset + 5] |= 0x1;
1731                                put_unaligned_be16(oip->len_mask[0],
1732                                                   arr + offset + 6);
1733                                if (rctd)
1734                                        put_unaligned_be16(0xa,
1735                                                           arr + offset + 8);
1736                        }
1737                        oip = r_oip;
1738                        offset += bump;
1739                }
1740                break;
1741        case 1: /* one command: opcode only */
1742        case 2: /* one command: opcode plus service action */
1743        case 3: /* one command: if sa==0 then opcode only else opcode+sa */
1744                sdeb_i = opcode_ind_arr[req_opcode];
1745                oip = &opcode_info_arr[sdeb_i];
1746                if (F_INV_OP & oip->flags) {
1747                        supp = 1;
1748                        offset = 4;
1749                } else {
1750                        if (1 == reporting_opts) {
1751                                if (FF_SA & oip->flags) {
1752                                        mk_sense_invalid_fld(scp, SDEB_IN_CDB,
1753                                                             2, 2);
1754                                        kfree(arr);
1755                                        return check_condition_result;
1756                                }
1757                                req_sa = 0;
1758                        } else if (2 == reporting_opts &&
1759                                   0 == (FF_SA & oip->flags)) {
1760                                mk_sense_invalid_fld(scp, SDEB_IN_CDB, 4, -1);
1761                                kfree(arr);     /* point at requested sa */
1762                                return check_condition_result;
1763                        }
1764                        if (0 == (FF_SA & oip->flags) &&
1765                            req_opcode == oip->opcode)
1766                                supp = 3;
1767                        else if (0 == (FF_SA & oip->flags)) {
1768                                na = oip->num_attached;
1769                                for (k = 0, oip = oip->arrp; k < na;
1770                                     ++k, ++oip) {
1771                                        if (req_opcode == oip->opcode)
1772                                                break;
1773                                }
1774                                supp = (k >= na) ? 1 : 3;
1775                        } else if (req_sa != oip->sa) {
1776                                na = oip->num_attached;
1777                                for (k = 0, oip = oip->arrp; k < na;
1778                                     ++k, ++oip) {
1779                                        if (req_sa == oip->sa)
1780                                                break;
1781                                }
1782                                supp = (k >= na) ? 1 : 3;
1783                        } else
1784                                supp = 3;
1785                        if (3 == supp) {
1786                                u = oip->len_mask[0];
1787                                put_unaligned_be16(u, arr + 2);
1788                                arr[4] = oip->opcode;
1789                                for (k = 1; k < u; ++k)
1790                                        arr[4 + k] = (k < 16) ?
1791                                                 oip->len_mask[k] : 0xff;
1792                                offset = 4 + u;
1793                        } else
1794                                offset = 4;
1795                }
1796                arr[1] = (rctd ? 0x80 : 0) | supp;
1797                if (rctd) {
1798                        put_unaligned_be16(0xa, arr + offset);
1799                        offset += 12;
1800                }
1801                break;
1802        default:
1803                mk_sense_invalid_fld(scp, SDEB_IN_CDB, 2, 2);
1804                kfree(arr);
1805                return check_condition_result;
1806        }
1807        offset = (offset < a_len) ? offset : a_len;
1808        len = (offset < alloc_len) ? offset : alloc_len;
1809        errsts = fill_from_dev_buffer(scp, arr, len);
1810        kfree(arr);
1811        return errsts;
1812}
1813
1814static int
1815resp_rsup_tmfs(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
1816{
1817        bool repd;
1818        u32 alloc_len, len;
1819        u8 arr[16];
1820        u8 *cmd = scp->cmnd;
1821
1822        memset(arr, 0, sizeof(arr));
1823        repd = !!(cmd[2] & 0x80);
1824        alloc_len = get_unaligned_be32(cmd + 6);
1825        if (alloc_len < 4) {
1826                mk_sense_invalid_fld(scp, SDEB_IN_CDB, 6, -1);
1827                return check_condition_result;
1828        }
1829        arr[0] = 0xc8;          /* ATS | ATSS | LURS */
1830        arr[1] = 0x1;           /* ITNRS */
1831        if (repd) {
1832                arr[3] = 0xc;
1833                len = 16;
1834        } else
1835                len = 4;
1836
1837        len = (len < alloc_len) ? len : alloc_len;
1838        return fill_from_dev_buffer(scp, arr, len);
1839}
1840
1841/* <<Following mode page info copied from ST318451LW>> */
1842
1843static int resp_err_recov_pg(unsigned char * p, int pcontrol, int target)
1844{       /* Read-Write Error Recovery page for mode_sense */
1845        unsigned char err_recov_pg[] = {0x1, 0xa, 0xc0, 11, 240, 0, 0, 0,
1846                                        5, 0, 0xff, 0xff};
1847
1848        memcpy(p, err_recov_pg, sizeof(err_recov_pg));
1849        if (1 == pcontrol)
1850                memset(p + 2, 0, sizeof(err_recov_pg) - 2);
1851        return sizeof(err_recov_pg);
1852}
1853
1854static int resp_disconnect_pg(unsigned char * p, int pcontrol, int target)
1855{       /* Disconnect-Reconnect page for mode_sense */
1856        unsigned char disconnect_pg[] = {0x2, 0xe, 128, 128, 0, 10, 0, 0,
1857                                         0, 0, 0, 0, 0, 0, 0, 0};
1858
1859        memcpy(p, disconnect_pg, sizeof(disconnect_pg));
1860        if (1 == pcontrol)
1861                memset(p + 2, 0, sizeof(disconnect_pg) - 2);
1862        return sizeof(disconnect_pg);
1863}
1864
1865static int resp_format_pg(unsigned char * p, int pcontrol, int target)
1866{       /* Format device page for mode_sense */
1867        unsigned char format_pg[] = {0x3, 0x16, 0, 0, 0, 0, 0, 0,
1868                                     0, 0, 0, 0, 0, 0, 0, 0,
1869                                     0, 0, 0, 0, 0x40, 0, 0, 0};
1870
1871        memcpy(p, format_pg, sizeof(format_pg));
1872        p[10] = (sdebug_sectors_per >> 8) & 0xff;
1873        p[11] = sdebug_sectors_per & 0xff;
1874        p[12] = (scsi_debug_sector_size >> 8) & 0xff;
1875        p[13] = scsi_debug_sector_size & 0xff;
1876        if (scsi_debug_removable)
1877                p[20] |= 0x20; /* should agree with INQUIRY */
1878        if (1 == pcontrol)
1879                memset(p + 2, 0, sizeof(format_pg) - 2);
1880        return sizeof(format_pg);
1881}
1882
1883static int resp_caching_pg(unsigned char * p, int pcontrol, int target)
1884{       /* Caching page for mode_sense */
1885        unsigned char ch_caching_pg[] = {/* 0x8, 18, */ 0x4, 0, 0, 0, 0, 0,
1886                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
1887        unsigned char d_caching_pg[] = {0x8, 18, 0x14, 0, 0xff, 0xff, 0, 0,
1888                0xff, 0xff, 0xff, 0xff, 0x80, 0x14, 0, 0,     0, 0, 0, 0};
1889
1890        if (SCSI_DEBUG_OPT_N_WCE & scsi_debug_opts)
1891                caching_pg[2] &= ~0x4;  /* set WCE=0 (default WCE=1) */
1892        memcpy(p, caching_pg, sizeof(caching_pg));
1893        if (1 == pcontrol)
1894                memcpy(p + 2, ch_caching_pg, sizeof(ch_caching_pg));
1895        else if (2 == pcontrol)
1896                memcpy(p, d_caching_pg, sizeof(d_caching_pg));
1897        return sizeof(caching_pg);
1898}
1899
1900static int resp_ctrl_m_pg(unsigned char * p, int pcontrol, int target)
1901{       /* Control mode page for mode_sense */
1902        unsigned char ch_ctrl_m_pg[] = {/* 0xa, 10, */ 0x6, 0, 0, 0, 0, 0,
1903                                        0, 0, 0, 0};
1904        unsigned char d_ctrl_m_pg[] = {0xa, 10, 2, 0, 0, 0, 0, 0,
1905                                     0, 0, 0x2, 0x4b};
1906
1907        if (scsi_debug_dsense)
1908                ctrl_m_pg[2] |= 0x4;
1909        else
1910                ctrl_m_pg[2] &= ~0x4;
1911
1912        if (scsi_debug_ato)
1913                ctrl_m_pg[5] |= 0x80; /* ATO=1 */
1914
1915        memcpy(p, ctrl_m_pg, sizeof(ctrl_m_pg));
1916        if (1 == pcontrol)
1917                memcpy(p + 2, ch_ctrl_m_pg, sizeof(ch_ctrl_m_pg));
1918        else if (2 == pcontrol)
1919                memcpy(p, d_ctrl_m_pg, sizeof(d_ctrl_m_pg));
1920        return sizeof(ctrl_m_pg);
1921}
1922
1923
1924static int resp_iec_m_pg(unsigned char * p, int pcontrol, int target)
1925{       /* Informational Exceptions control mode page for mode_sense */
1926        unsigned char ch_iec_m_pg[] = {/* 0x1c, 0xa, */ 0x4, 0xf, 0, 0, 0, 0,
1927                                       0, 0, 0x0, 0x0};
1928        unsigned char d_iec_m_pg[] = {0x1c, 0xa, 0x08, 0, 0, 0, 0, 0,
1929                                      0, 0, 0x0, 0x0};
1930
1931        memcpy(p, iec_m_pg, sizeof(iec_m_pg));
1932        if (1 == pcontrol)
1933                memcpy(p + 2, ch_iec_m_pg, sizeof(ch_iec_m_pg));
1934        else if (2 == pcontrol)
1935                memcpy(p, d_iec_m_pg, sizeof(d_iec_m_pg));
1936        return sizeof(iec_m_pg);
1937}
1938
1939static int resp_sas_sf_m_pg(unsigned char * p, int pcontrol, int target)
1940{       /* SAS SSP mode page - short format for mode_sense */
1941        unsigned char sas_sf_m_pg[] = {0x19, 0x6,
1942                0x6, 0x0, 0x7, 0xd0, 0x0, 0x0};
1943
1944        memcpy(p, sas_sf_m_pg, sizeof(sas_sf_m_pg));
1945        if (1 == pcontrol)
1946                memset(p + 2, 0, sizeof(sas_sf_m_pg) - 2);
1947        return sizeof(sas_sf_m_pg);
1948}
1949
1950
1951static int resp_sas_pcd_m_spg(unsigned char * p, int pcontrol, int target,
1952                              int target_dev_id)
1953{       /* SAS phy control and discover mode page for mode_sense */
1954        unsigned char sas_pcd_m_pg[] = {0x59, 0x1, 0, 0x64, 0, 0x6, 0, 2,
1955                    0, 0, 0, 0, 0x10, 0x9, 0x8, 0x0,
1956                    0x52, 0x22, 0x22, 0x20, 0x0, 0x0, 0x0, 0x0,
1957                    0x51, 0x11, 0x11, 0x10, 0x0, 0x0, 0x0, 0x1,
1958                    0x2, 0, 0, 0, 0, 0, 0, 0,
1959                    0x88, 0x99, 0, 0, 0, 0, 0, 0,
1960                    0, 0, 0, 0, 0, 0, 0, 0,
1961                    0, 1, 0, 0, 0x10, 0x9, 0x8, 0x0,
1962                    0x52, 0x22, 0x22, 0x20, 0x0, 0x0, 0x0, 0x0,
1963                    0x51, 0x11, 0x11, 0x10, 0x0, 0x0, 0x0, 0x1,
1964                    0x3, 0, 0, 0, 0, 0, 0, 0,
1965                    0x88, 0x99, 0, 0, 0, 0, 0, 0,
1966                    0, 0, 0, 0, 0, 0, 0, 0,
1967                };
1968        int port_a, port_b;
1969
1970        port_a = target_dev_id + 1;
1971        port_b = port_a + 1;
1972        memcpy(p, sas_pcd_m_pg, sizeof(sas_pcd_m_pg));
1973        p[20] = (port_a >> 24);
1974        p[21] = (port_a >> 16) & 0xff;
1975        p[22] = (port_a >> 8) & 0xff;
1976        p[23] = port_a & 0xff;
1977        p[48 + 20] = (port_b >> 24);
1978        p[48 + 21] = (port_b >> 16) & 0xff;
1979        p[48 + 22] = (port_b >> 8) & 0xff;
1980        p[48 + 23] = port_b & 0xff;
1981        if (1 == pcontrol)
1982                memset(p + 4, 0, sizeof(sas_pcd_m_pg) - 4);
1983        return sizeof(sas_pcd_m_pg);
1984}
1985
1986static int resp_sas_sha_m_spg(unsigned char * p, int pcontrol)
1987{       /* SAS SSP shared protocol specific port mode subpage */
1988        unsigned char sas_sha_m_pg[] = {0x59, 0x2, 0, 0xc, 0, 0x6, 0x10, 0,
1989                    0, 0, 0, 0, 0, 0, 0, 0,
1990                };
1991
1992        memcpy(p, sas_sha_m_pg, sizeof(sas_sha_m_pg));
1993        if (1 == pcontrol)
1994                memset(p + 4, 0, sizeof(sas_sha_m_pg) - 4);
1995        return sizeof(sas_sha_m_pg);
1996}
1997
1998#define SDEBUG_MAX_MSENSE_SZ 256
1999
2000static int
2001resp_mode_sense(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
2002{
2003        unsigned char dbd, llbaa;
2004        int pcontrol, pcode, subpcode, bd_len;
2005        unsigned char dev_spec;
2006        int k, alloc_len, msense_6, offset, len, target_dev_id;
2007        int target = scp->device->id;
2008        unsigned char * ap;
2009        unsigned char arr[SDEBUG_MAX_MSENSE_SZ];
2010        unsigned char *cmd = scp->cmnd;
2011
2012        dbd = !!(cmd[1] & 0x8);
2013        pcontrol = (cmd[2] & 0xc0) >> 6;
2014        pcode = cmd[2] & 0x3f;
2015        subpcode = cmd[3];
2016        msense_6 = (MODE_SENSE == cmd[0]);
2017        llbaa = msense_6 ? 0 : !!(cmd[1] & 0x10);
2018        if ((0 == scsi_debug_ptype) && (0 == dbd))
2019                bd_len = llbaa ? 16 : 8;
2020        else
2021                bd_len = 0;
2022        alloc_len = msense_6 ? cmd[4] : ((cmd[7] << 8) | cmd[8]);
2023        memset(arr, 0, SDEBUG_MAX_MSENSE_SZ);
2024        if (0x3 == pcontrol) {  /* Saving values not supported */
2025                mk_sense_buffer(scp, ILLEGAL_REQUEST, SAVING_PARAMS_UNSUP, 0);
2026                return check_condition_result;
2027        }
2028        target_dev_id = ((devip->sdbg_host->shost->host_no + 1) * 2000) +
2029                        (devip->target * 1000) - 3;
2030        /* set DPOFUA bit for disks */
2031        if (0 == scsi_debug_ptype)
2032                dev_spec = (DEV_READONLY(target) ? 0x80 : 0x0) | 0x10;
2033        else
2034                dev_spec = 0x0;
2035        if (msense_6) {
2036                arr[2] = dev_spec;
2037                arr[3] = bd_len;
2038                offset = 4;
2039        } else {
2040                arr[3] = dev_spec;
2041                if (16 == bd_len)
2042                        arr[4] = 0x1;   /* set LONGLBA bit */
2043                arr[7] = bd_len;        /* assume 255 or less */
2044                offset = 8;
2045        }
2046        ap = arr + offset;
2047        if ((bd_len > 0) && (!sdebug_capacity))
2048                sdebug_capacity = get_sdebug_capacity();
2049
2050        if (8 == bd_len) {
2051                if (sdebug_capacity > 0xfffffffe) {
2052                        ap[0] = 0xff;
2053                        ap[1] = 0xff;
2054                        ap[2] = 0xff;
2055                        ap[3] = 0xff;
2056                } else {
2057                        ap[0] = (sdebug_capacity >> 24) & 0xff;
2058                        ap[1] = (sdebug_capacity >> 16) & 0xff;
2059                        ap[2] = (sdebug_capacity >> 8) & 0xff;
2060                        ap[3] = sdebug_capacity & 0xff;
2061                }
2062                ap[6] = (scsi_debug_sector_size >> 8) & 0xff;
2063                ap[7] = scsi_debug_sector_size & 0xff;
2064                offset += bd_len;
2065                ap = arr + offset;
2066        } else if (16 == bd_len) {
2067                unsigned long long capac = sdebug_capacity;
2068
2069                for (k = 0; k < 8; ++k, capac >>= 8)
2070                        ap[7 - k] = capac & 0xff;
2071                ap[12] = (scsi_debug_sector_size >> 24) & 0xff;
2072                ap[13] = (scsi_debug_sector_size >> 16) & 0xff;
2073                ap[14] = (scsi_debug_sector_size >> 8) & 0xff;
2074                ap[15] = scsi_debug_sector_size & 0xff;
2075                offset += bd_len;
2076                ap = arr + offset;
2077        }
2078
2079        if ((subpcode > 0x0) && (subpcode < 0xff) && (0x19 != pcode)) {
2080                /* TODO: Control Extension page */
2081                mk_sense_invalid_fld(scp, SDEB_IN_CDB, 3, -1);
2082                return check_condition_result;
2083        }
2084        switch (pcode) {
2085        case 0x1:       /* Read-Write error recovery page, direct access */
2086                len = resp_err_recov_pg(ap, pcontrol, target);
2087                offset += len;
2088                break;
2089        case 0x2:       /* Disconnect-Reconnect page, all devices */
2090                len = resp_disconnect_pg(ap, pcontrol, target);
2091                offset += len;
2092                break;
2093        case 0x3:       /* Format device page, direct access */
2094                len = resp_format_pg(ap, pcontrol, target);
2095                offset += len;
2096                break;
2097        case 0x8:       /* Caching page, direct access */
2098                len = resp_caching_pg(ap, pcontrol, target);
2099                offset += len;
2100                break;
2101        case 0xa:       /* Control Mode page, all devices */
2102                len = resp_ctrl_m_pg(ap, pcontrol, target);
2103                offset += len;
2104                break;
2105        case 0x19:      /* if spc==1 then sas phy, control+discover */
2106                if ((subpcode > 0x2) && (subpcode < 0xff)) {
2107                        mk_sense_invalid_fld(scp, SDEB_IN_CDB, 3, -1);
2108                        return check_condition_result;
2109                }
2110                len = 0;
2111                if ((0x0 == subpcode) || (0xff == subpcode))
2112                        len += resp_sas_sf_m_pg(ap + len, pcontrol, target);
2113                if ((0x1 == subpcode) || (0xff == subpcode))
2114                        len += resp_sas_pcd_m_spg(ap + len, pcontrol, target,
2115                                                  target_dev_id);
2116                if ((0x2 == subpcode) || (0xff == subpcode))
2117                        len += resp_sas_sha_m_spg(ap + len, pcontrol);
2118                offset += len;
2119                break;
2120        case 0x1c:      /* Informational Exceptions Mode page, all devices */
2121                len = resp_iec_m_pg(ap, pcontrol, target);
2122                offset += len;
2123                break;
2124        case 0x3f:      /* Read all Mode pages */
2125                if ((0 == subpcode) || (0xff == subpcode)) {
2126                        len = resp_err_recov_pg(ap, pcontrol, target);
2127                        len += resp_disconnect_pg(ap + len, pcontrol, target);
2128                        len += resp_format_pg(ap + len, pcontrol, target);
2129                        len += resp_caching_pg(ap + len, pcontrol, target);
2130                        len += resp_ctrl_m_pg(ap + len, pcontrol, target);
2131                        len += resp_sas_sf_m_pg(ap + len, pcontrol, target);
2132                        if (0xff == subpcode) {
2133                                len += resp_sas_pcd_m_spg(ap + len, pcontrol,
2134                                                  target, target_dev_id);
2135                                len += resp_sas_sha_m_spg(ap + len, pcontrol);
2136                        }
2137                        len += resp_iec_m_pg(ap + len, pcontrol, target);
2138                } else {
2139                        mk_sense_invalid_fld(scp, SDEB_IN_CDB, 3, -1);
2140                        return check_condition_result;
2141                }
2142                offset += len;
2143                break;
2144        default:
2145                mk_sense_invalid_fld(scp, SDEB_IN_CDB, 2, 5);
2146                return check_condition_result;
2147        }
2148        if (msense_6)
2149                arr[0] = offset - 1;
2150        else {
2151                arr[0] = ((offset - 2) >> 8) & 0xff;
2152                arr[1] = (offset - 2) & 0xff;
2153        }
2154        return fill_from_dev_buffer(scp, arr, min(alloc_len, offset));
2155}
2156
2157#define SDEBUG_MAX_MSELECT_SZ 512
2158
2159static int
2160resp_mode_select(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
2161{
2162        int pf, sp, ps, md_len, bd_len, off, spf, pg_len;
2163        int param_len, res, mpage;
2164        unsigned char arr[SDEBUG_MAX_MSELECT_SZ];
2165        unsigned char *cmd = scp->cmnd;
2166        int mselect6 = (MODE_SELECT == cmd[0]);
2167
2168        memset(arr, 0, sizeof(arr));
2169        pf = cmd[1] & 0x10;
2170        sp = cmd[1] & 0x1;
2171        param_len = mselect6 ? cmd[4] : ((cmd[7] << 8) + cmd[8]);
2172        if ((0 == pf) || sp || (param_len > SDEBUG_MAX_MSELECT_SZ)) {
2173                mk_sense_invalid_fld(scp, SDEB_IN_CDB, mselect6 ? 4 : 7, -1);
2174                return check_condition_result;
2175        }
2176        res = fetch_to_dev_buffer(scp, arr, param_len);
2177        if (-1 == res)
2178                return (DID_ERROR << 16);
2179        else if ((res < param_len) &&
2180                 (SCSI_DEBUG_OPT_NOISE & scsi_debug_opts))
2181                sdev_printk(KERN_INFO, scp->device,
2182                            "%s: cdb indicated=%d, IO sent=%d bytes\n",
2183                            __func__, param_len, res);
2184        md_len = mselect6 ? (arr[0] + 1) : ((arr[0] << 8) + arr[1] + 2);
2185        bd_len = mselect6 ? arr[3] : ((arr[6] << 8) + arr[7]);
2186        if (md_len > 2) {
2187                mk_sense_invalid_fld(scp, SDEB_IN_DATA, 0, -1);
2188                return check_condition_result;
2189        }
2190        off = bd_len + (mselect6 ? 4 : 8);
2191        mpage = arr[off] & 0x3f;
2192        ps = !!(arr[off] & 0x80);
2193        if (ps) {
2194                mk_sense_invalid_fld(scp, SDEB_IN_DATA, off, 7);
2195                return check_condition_result;
2196        }
2197        spf = !!(arr[off] & 0x40);
2198        pg_len = spf ? ((arr[off + 2] << 8) + arr[off + 3] + 4) :
2199                       (arr[off + 1] + 2);
2200        if ((pg_len + off) > param_len) {
2201                mk_sense_buffer(scp, ILLEGAL_REQUEST,
2202                                PARAMETER_LIST_LENGTH_ERR, 0);
2203                return check_condition_result;
2204        }
2205        switch (mpage) {
2206        case 0x8:      /* Caching Mode page */
2207                if (caching_pg[1] == arr[off + 1]) {
2208                        memcpy(caching_pg + 2, arr + off + 2,
2209                               sizeof(caching_pg) - 2);
2210                        goto set_mode_changed_ua;
2211                }
2212                break;
2213        case 0xa:      /* Control Mode page */
2214                if (ctrl_m_pg[1] == arr[off + 1]) {
2215                        memcpy(ctrl_m_pg + 2, arr + off + 2,
2216                               sizeof(ctrl_m_pg) - 2);
2217                        scsi_debug_dsense = !!(ctrl_m_pg[2] & 0x4);
2218                        goto set_mode_changed_ua;
2219                }
2220                break;
2221        case 0x1c:      /* Informational Exceptions Mode page */
2222                if (iec_m_pg[1] == arr[off + 1]) {
2223                        memcpy(iec_m_pg + 2, arr + off + 2,
2224                               sizeof(iec_m_pg) - 2);
2225                        goto set_mode_changed_ua;
2226                }
2227                break;
2228        default:
2229                break;
2230        }
2231        mk_sense_invalid_fld(scp, SDEB_IN_DATA, off, 5);
2232        return check_condition_result;
2233set_mode_changed_ua:
2234        set_bit(SDEBUG_UA_MODE_CHANGED, devip->uas_bm);
2235        return 0;
2236}
2237
2238static int resp_temp_l_pg(unsigned char * arr)
2239{
2240        unsigned char temp_l_pg[] = {0x0, 0x0, 0x3, 0x2, 0x0, 38,
2241                                     0x0, 0x1, 0x3, 0x2, 0x0, 65,
2242                };
2243
2244        memcpy(arr, temp_l_pg, sizeof(temp_l_pg));
2245        return sizeof(temp_l_pg);
2246}
2247
2248static int resp_ie_l_pg(unsigned char * arr)
2249{
2250        unsigned char ie_l_pg[] = {0x0, 0x0, 0x3, 0x3, 0x0, 0x0, 38,
2251                };
2252
2253        memcpy(arr, ie_l_pg, sizeof(ie_l_pg));
2254        if (iec_m_pg[2] & 0x4) {        /* TEST bit set */
2255                arr[4] = THRESHOLD_EXCEEDED;
2256                arr[5] = 0xff;
2257        }
2258        return sizeof(ie_l_pg);
2259}
2260
2261#define SDEBUG_MAX_LSENSE_SZ 512
2262
2263static int resp_log_sense(struct scsi_cmnd * scp,
2264                          struct sdebug_dev_info * devip)
2265{
2266        int ppc, sp, pcontrol, pcode, subpcode, alloc_len, len, n;
2267        unsigned char arr[SDEBUG_MAX_LSENSE_SZ];
2268        unsigned char *cmd = scp->cmnd;
2269
2270        memset(arr, 0, sizeof(arr));
2271        ppc = cmd[1] & 0x2;
2272        sp = cmd[1] & 0x1;
2273        if (ppc || sp) {
2274                mk_sense_invalid_fld(scp, SDEB_IN_CDB, 1, ppc ? 1 : 0);
2275                return check_condition_result;
2276        }
2277        pcontrol = (cmd[2] & 0xc0) >> 6;
2278        pcode = cmd[2] & 0x3f;
2279        subpcode = cmd[3] & 0xff;
2280        alloc_len = (cmd[7] << 8) + cmd[8];
2281        arr[0] = pcode;
2282        if (0 == subpcode) {
2283                switch (pcode) {
2284                case 0x0:       /* Supported log pages log page */
2285                        n = 4;
2286                        arr[n++] = 0x0;         /* this page */
2287                        arr[n++] = 0xd;         /* Temperature */
2288                        arr[n++] = 0x2f;        /* Informational exceptions */
2289                        arr[3] = n - 4;
2290                        break;
2291                case 0xd:       /* Temperature log page */
2292                        arr[3] = resp_temp_l_pg(arr + 4);
2293                        break;
2294                case 0x2f:      /* Informational exceptions log page */
2295                        arr[3] = resp_ie_l_pg(arr + 4);
2296                        break;
2297                default:
2298                        mk_sense_invalid_fld(scp, SDEB_IN_CDB, 2, 5);
2299                        return check_condition_result;
2300                }
2301        } else if (0xff == subpcode) {
2302                arr[0] |= 0x40;
2303                arr[1] = subpcode;
2304                switch (pcode) {
2305                case 0x0:       /* Supported log pages and subpages log page */
2306                        n = 4;
2307                        arr[n++] = 0x0;
2308                        arr[n++] = 0x0;         /* 0,0 page */
2309                        arr[n++] = 0x0;
2310                        arr[n++] = 0xff;        /* this page */
2311                        arr[n++] = 0xd;
2312                        arr[n++] = 0x0;         /* Temperature */
2313                        arr[n++] = 0x2f;
2314                        arr[n++] = 0x0; /* Informational exceptions */
2315                        arr[3] = n - 4;
2316                        break;
2317                case 0xd:       /* Temperature subpages */
2318                        n = 4;
2319                        arr[n++] = 0xd;
2320                        arr[n++] = 0x0;         /* Temperature */
2321                        arr[3] = n - 4;
2322                        break;
2323                case 0x2f:      /* Informational exceptions subpages */
2324                        n = 4;
2325                        arr[n++] = 0x2f;
2326                        arr[n++] = 0x0;         /* Informational exceptions */
2327                        arr[3] = n - 4;
2328                        break;
2329                default:
2330                        mk_sense_invalid_fld(scp, SDEB_IN_CDB, 2, 5);
2331                        return check_condition_result;
2332                }
2333        } else {
2334                mk_sense_invalid_fld(scp, SDEB_IN_CDB, 3, -1);
2335                return check_condition_result;
2336        }
2337        len = min(((arr[2] << 8) + arr[3]) + 4, alloc_len);
2338        return fill_from_dev_buffer(scp, arr,
2339                    min(len, SDEBUG_MAX_INQ_ARR_SZ));
2340}
2341
2342static int check_device_access_params(struct scsi_cmnd *scp,
2343                                      unsigned long long lba, unsigned int num)
2344{
2345        if (lba + num > sdebug_capacity) {
2346                mk_sense_buffer(scp, ILLEGAL_REQUEST, LBA_OUT_OF_RANGE, 0);
2347                return check_condition_result;
2348        }
2349        /* transfer length excessive (tie in to block limits VPD page) */
2350        if (num > sdebug_store_sectors) {
2351                /* needs work to find which cdb byte 'num' comes from */
2352                mk_sense_buffer(scp, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB, 0);
2353                return check_condition_result;
2354        }
2355        return 0;
2356}
2357
2358/* Returns number of bytes copied or -1 if error. */
2359static int
2360do_device_access(struct scsi_cmnd *scmd, u64 lba, u32 num, bool do_write)
2361{
2362        int ret;
2363        u64 block, rest = 0;
2364        struct scsi_data_buffer *sdb;
2365        enum dma_data_direction dir;
2366        size_t (*func)(struct scatterlist *, unsigned int, void *, size_t,
2367                       off_t);
2368
2369        if (do_write) {
2370                sdb = scsi_out(scmd);
2371                dir = DMA_TO_DEVICE;
2372                func = sg_pcopy_to_buffer;
2373        } else {
2374                sdb = scsi_in(scmd);
2375                dir = DMA_FROM_DEVICE;
2376                func = sg_pcopy_from_buffer;
2377        }
2378
2379        if (!sdb->length)
2380                return 0;
2381        if (!(scsi_bidi_cmnd(scmd) || scmd->sc_data_direction == dir))
2382                return -1;
2383
2384        block = do_div(lba, sdebug_store_sectors);
2385        if (block + num > sdebug_store_sectors)
2386                rest = block + num - sdebug_store_sectors;
2387
2388        ret = func(sdb->table.sgl, sdb->table.nents,
2389                   fake_storep + (block * scsi_debug_sector_size),
2390                   (num - rest) * scsi_debug_sector_size, 0);
2391        if (ret != (num - rest) * scsi_debug_sector_size)
2392                return ret;
2393
2394        if (rest) {
2395                ret += func(sdb->table.sgl, sdb->table.nents,
2396                            fake_storep, rest * scsi_debug_sector_size,
2397                            (num - rest) * scsi_debug_sector_size);
2398        }
2399
2400        return ret;
2401}
2402
2403/* If fake_store(lba,num) compares equal to arr(num), then copy top half of
2404 * arr into fake_store(lba,num) and return true. If comparison fails then
2405 * return false. */
2406static bool
2407comp_write_worker(u64 lba, u32 num, const u8 *arr)
2408{
2409        bool res;
2410        u64 block, rest = 0;
2411        u32 store_blks = sdebug_store_sectors;
2412        u32 lb_size = scsi_debug_sector_size;
2413
2414        block = do_div(lba, store_blks);
2415        if (block + num > store_blks)
2416                rest = block + num - store_blks;
2417
2418        res = !memcmp(fake_storep + (block * lb_size), arr,
2419                      (num - rest) * lb_size);
2420        if (!res)
2421                return res;
2422        if (rest)
2423                res = memcmp(fake_storep, arr + ((num - rest) * lb_size),
2424                             rest * lb_size);
2425        if (!res)
2426                return res;
2427        arr += num * lb_size;
2428        memcpy(fake_storep + (block * lb_size), arr, (num - rest) * lb_size);
2429        if (rest)
2430                memcpy(fake_storep, arr + ((num - rest) * lb_size),
2431                       rest * lb_size);
2432        return res;
2433}
2434
2435static __be16 dif_compute_csum(const void *buf, int len)
2436{
2437        __be16 csum;
2438
2439        if (scsi_debug_guard)
2440                csum = (__force __be16)ip_compute_csum(buf, len);
2441        else
2442                csum = cpu_to_be16(crc_t10dif(buf, len));
2443
2444        return csum;
2445}
2446
2447static int dif_verify(struct sd_dif_tuple *sdt, const void *data,
2448                      sector_t sector, u32 ei_lba)
2449{
2450        __be16 csum = dif_compute_csum(data, scsi_debug_sector_size);
2451
2452        if (sdt->guard_tag != csum) {
2453                pr_err("%s: GUARD check failed on sector %lu rcvd 0x%04x, data 0x%04x\n",
2454                        __func__,
2455                        (unsigned long)sector,
2456                        be16_to_cpu(sdt->guard_tag),
2457                        be16_to_cpu(csum));
2458                return 0x01;
2459        }
2460        if (scsi_debug_dif == SD_DIF_TYPE1_PROTECTION &&
2461            be32_to_cpu(sdt->ref_tag) != (sector & 0xffffffff)) {
2462                pr_err("%s: REF check failed on sector %lu\n",
2463                        __func__, (unsigned long)sector);
2464                return 0x03;
2465        }
2466        if (scsi_debug_dif == SD_DIF_TYPE2_PROTECTION &&
2467            be32_to_cpu(sdt->ref_tag) != ei_lba) {
2468                pr_err("%s: REF check failed on sector %lu\n",
2469                        __func__, (unsigned long)sector);
2470                return 0x03;
2471        }
2472        return 0;
2473}
2474
2475static void dif_copy_prot(struct scsi_cmnd *SCpnt, sector_t sector,
2476                          unsigned int sectors, bool read)
2477{
2478        size_t resid;
2479        void *paddr;
2480        const void *dif_store_end = dif_storep + sdebug_store_sectors;
2481        struct sg_mapping_iter miter;
2482
2483        /* Bytes of protection data to copy into sgl */
2484        resid = sectors * sizeof(*dif_storep);
2485
2486        sg_miter_start(&miter, scsi_prot_sglist(SCpnt),
2487                        scsi_prot_sg_count(SCpnt), SG_MITER_ATOMIC |
2488                        (read ? SG_MITER_TO_SG : SG_MITER_FROM_SG));
2489
2490        while (sg_miter_next(&miter) && resid > 0) {
2491                size_t len = min(miter.length, resid);
2492                void *start = dif_store(sector);
2493                size_t rest = 0;
2494
2495                if (dif_store_end < start + len)
2496                        rest = start + len - dif_store_end;
2497
2498                paddr = miter.addr;
2499
2500                if (read)
2501                        memcpy(paddr, start, len - rest);
2502                else
2503                        memcpy(start, paddr, len - rest);
2504
2505                if (rest) {
2506                        if (read)
2507                                memcpy(paddr + len - rest, dif_storep, rest);
2508                        else
2509                                memcpy(dif_storep, paddr + len - rest, rest);
2510                }
2511
2512                sector += len / sizeof(*dif_storep);
2513                resid -= len;
2514        }
2515        sg_miter_stop(&miter);
2516}
2517
2518static int prot_verify_read(struct scsi_cmnd *SCpnt, sector_t start_sec,
2519                            unsigned int sectors, u32 ei_lba)
2520{
2521        unsigned int i;
2522        struct sd_dif_tuple *sdt;
2523        sector_t sector;
2524
2525        for (i = 0; i < sectors; i++, ei_lba++) {
2526                int ret;
2527
2528                sector = start_sec + i;
2529                sdt = dif_store(sector);
2530
2531                if (sdt->app_tag == cpu_to_be16(0xffff))
2532                        continue;
2533
2534                ret = dif_verify(sdt, fake_store(sector), sector, ei_lba);
2535                if (ret) {
2536                        dif_errors++;
2537                        return ret;
2538                }
2539        }
2540
2541        dif_copy_prot(SCpnt, start_sec, sectors, true);
2542        dix_reads++;
2543
2544        return 0;
2545}
2546
2547static int
2548resp_read_dt0(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
2549{
2550        u8 *cmd = scp->cmnd;
2551        u64 lba;
2552        u32 num;
2553        u32 ei_lba;
2554        unsigned long iflags;
2555        int ret;
2556        bool check_prot;
2557
2558        switch (cmd[0]) {
2559        case READ_16:
2560                ei_lba = 0;
2561                lba = get_unaligned_be64(cmd + 2);
2562                num = get_unaligned_be32(cmd + 10);
2563                check_prot = true;
2564                break;
2565        case READ_10:
2566                ei_lba = 0;
2567                lba = get_unaligned_be32(cmd + 2);
2568                num = get_unaligned_be16(cmd + 7);
2569                check_prot = true;
2570                break;
2571        case READ_6:
2572                ei_lba = 0;
2573                lba = (u32)cmd[3] | (u32)cmd[2] << 8 |
2574                      (u32)(cmd[1] & 0x1f) << 16;
2575                num = (0 == cmd[4]) ? 256 : cmd[4];
2576                check_prot = true;
2577                break;
2578        case READ_12:
2579                ei_lba = 0;
2580                lba = get_unaligned_be32(cmd + 2);
2581                num = get_unaligned_be32(cmd + 6);
2582                check_prot = true;
2583                break;
2584        case XDWRITEREAD_10:
2585                ei_lba = 0;
2586                lba = get_unaligned_be32(cmd + 2);
2587                num = get_unaligned_be16(cmd + 7);
2588                check_prot = false;
2589                break;
2590        default:        /* assume READ(32) */
2591                lba = get_unaligned_be64(cmd + 12);
2592                ei_lba = get_unaligned_be32(cmd + 20);
2593                num = get_unaligned_be32(cmd + 28);
2594                check_prot = false;
2595                break;
2596        }
2597        if (check_prot) {
2598                if (scsi_debug_dif == SD_DIF_TYPE2_PROTECTION &&
2599                    (cmd[1] & 0xe0)) {
2600                        mk_sense_invalid_opcode(scp);
2601                        return check_condition_result;
2602                }
2603                if ((scsi_debug_dif == SD_DIF_TYPE1_PROTECTION ||
2604                     scsi_debug_dif == SD_DIF_TYPE3_PROTECTION) &&
2605                    (cmd[1] & 0xe0) == 0)
2606                        sdev_printk(KERN_ERR, scp->device, "Unprotected RD "
2607                                    "to DIF device\n");
2608        }
2609        if (sdebug_any_injecting_opt) {
2610                struct sdebug_scmd_extra_t *ep = scsi_cmd_priv(scp);
2611
2612                if (ep->inj_short)
2613                        num /= 2;
2614        }
2615
2616        /* inline check_device_access_params() */
2617        if (lba + num > sdebug_capacity) {
2618                mk_sense_buffer(scp, ILLEGAL_REQUEST, LBA_OUT_OF_RANGE, 0);
2619                return check_condition_result;
2620        }
2621        /* transfer length excessive (tie in to block limits VPD page) */
2622        if (num > sdebug_store_sectors) {
2623                /* needs work to find which cdb byte 'num' comes from */
2624                mk_sense_buffer(scp, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB, 0);
2625                return check_condition_result;
2626        }
2627
2628        if ((SCSI_DEBUG_OPT_MEDIUM_ERR & scsi_debug_opts) &&
2629            (lba <= (OPT_MEDIUM_ERR_ADDR + OPT_MEDIUM_ERR_NUM - 1)) &&
2630            ((lba + num) > OPT_MEDIUM_ERR_ADDR)) {
2631                /* claim unrecoverable read error */
2632                mk_sense_buffer(scp, MEDIUM_ERROR, UNRECOVERED_READ_ERR, 0);
2633                /* set info field and valid bit for fixed descriptor */
2634                if (0x70 == (scp->sense_buffer[0] & 0x7f)) {
2635                        scp->sense_buffer[0] |= 0x80;   /* Valid bit */
2636                        ret = (lba < OPT_MEDIUM_ERR_ADDR)
2637                              ? OPT_MEDIUM_ERR_ADDR : (int)lba;
2638                        put_unaligned_be32(ret, scp->sense_buffer + 3);
2639                }
2640                scsi_set_resid(scp, scsi_bufflen(scp));
2641                return check_condition_result;
2642        }
2643
2644        read_lock_irqsave(&atomic_rw, iflags);
2645
2646        /* DIX + T10 DIF */
2647        if (scsi_debug_dix && scsi_prot_sg_count(scp)) {
2648                int prot_ret = prot_verify_read(scp, lba, num, ei_lba);
2649
2650                if (prot_ret) {
2651                        read_unlock_irqrestore(&atomic_rw, iflags);
2652                        mk_sense_buffer(scp, ABORTED_COMMAND, 0x10, prot_ret);
2653                        return illegal_condition_result;
2654                }
2655        }
2656
2657        ret = do_device_access(scp, lba, num, false);
2658        read_unlock_irqrestore(&atomic_rw, iflags);
2659        if (ret == -1)
2660                return DID_ERROR << 16;
2661
2662        scsi_in(scp)->resid = scsi_bufflen(scp) - ret;
2663
2664        if (sdebug_any_injecting_opt) {
2665                struct sdebug_scmd_extra_t *ep = scsi_cmd_priv(scp);
2666
2667                if (ep->inj_recovered) {
2668                        mk_sense_buffer(scp, RECOVERED_ERROR,
2669                                        THRESHOLD_EXCEEDED, 0);
2670                        return check_condition_result;
2671                } else if (ep->inj_transport) {
2672                        mk_sense_buffer(scp, ABORTED_COMMAND,
2673                                        TRANSPORT_PROBLEM, ACK_NAK_TO);
2674                        return check_condition_result;
2675                } else if (ep->inj_dif) {
2676                        /* Logical block guard check failed */
2677                        mk_sense_buffer(scp, ABORTED_COMMAND, 0x10, 1);
2678                        return illegal_condition_result;
2679                } else if (ep->inj_dix) {
2680                        mk_sense_buffer(scp, ILLEGAL_REQUEST, 0x10, 1);
2681                        return illegal_condition_result;
2682                }
2683        }
2684        return 0;
2685}
2686
2687void dump_sector(unsigned char *buf, int len)
2688{
2689        int i, j, n;
2690
2691        pr_err(">>> Sector Dump <<<\n");
2692        for (i = 0 ; i < len ; i += 16) {
2693                char b[128];
2694
2695                for (j = 0, n = 0; j < 16; j++) {
2696                        unsigned char c = buf[i+j];
2697
2698                        if (c >= 0x20 && c < 0x7e)
2699                                n += scnprintf(b + n, sizeof(b) - n,
2700                                               " %c ", buf[i+j]);
2701                        else
2702                                n += scnprintf(b + n, sizeof(b) - n,
2703                                               "%02x ", buf[i+j]);
2704                }
2705                pr_err("%04d: %s\n", i, b);
2706        }
2707}
2708
2709static int prot_verify_write(struct scsi_cmnd *SCpnt, sector_t start_sec,
2710                             unsigned int sectors, u32 ei_lba)
2711{
2712        int ret;
2713        struct sd_dif_tuple *sdt;
2714        void *daddr;
2715        sector_t sector = start_sec;
2716        int ppage_offset;
2717        int dpage_offset;
2718        struct sg_mapping_iter diter;
2719        struct sg_mapping_iter piter;
2720
2721        BUG_ON(scsi_sg_count(SCpnt) == 0);
2722        BUG_ON(scsi_prot_sg_count(SCpnt) == 0);
2723
2724        sg_miter_start(&piter, scsi_prot_sglist(SCpnt),
2725                        scsi_prot_sg_count(SCpnt),
2726                        SG_MITER_ATOMIC | SG_MITER_FROM_SG);
2727        sg_miter_start(&diter, scsi_sglist(SCpnt), scsi_sg_count(SCpnt),
2728                        SG_MITER_ATOMIC | SG_MITER_FROM_SG);
2729
2730        /* For each protection page */
2731        while (sg_miter_next(&piter)) {
2732                dpage_offset = 0;
2733                if (WARN_ON(!sg_miter_next(&diter))) {
2734                        ret = 0x01;
2735                        goto out;
2736                }
2737
2738                for (ppage_offset = 0; ppage_offset < piter.length;
2739                     ppage_offset += sizeof(struct sd_dif_tuple)) {
2740                        /* If we're at the end of the current
2741                         * data page advance to the next one
2742                         */
2743                        if (dpage_offset >= diter.length) {
2744                                if (WARN_ON(!sg_miter_next(&diter))) {
2745                                        ret = 0x01;
2746                                        goto out;
2747                                }
2748                                dpage_offset = 0;
2749                        }
2750
2751                        sdt = piter.addr + ppage_offset;
2752                        daddr = diter.addr + dpage_offset;
2753
2754                        ret = dif_verify(sdt, daddr, sector, ei_lba);
2755                        if (ret) {
2756                                dump_sector(daddr, scsi_debug_sector_size);
2757                                goto out;
2758                        }
2759
2760                        sector++;
2761                        ei_lba++;
2762                        dpage_offset += scsi_debug_sector_size;
2763                }
2764                diter.consumed = dpage_offset;
2765                sg_miter_stop(&diter);
2766        }
2767        sg_miter_stop(&piter);
2768
2769        dif_copy_prot(SCpnt, start_sec, sectors, false);
2770        dix_writes++;
2771
2772        return 0;
2773
2774out:
2775        dif_errors++;
2776        sg_miter_stop(&diter);
2777        sg_miter_stop(&piter);
2778        return ret;
2779}
2780
2781static unsigned long lba_to_map_index(sector_t lba)
2782{
2783        if (scsi_debug_unmap_alignment) {
2784                lba += scsi_debug_unmap_granularity -
2785                        scsi_debug_unmap_alignment;
2786        }
2787        do_div(lba, scsi_debug_unmap_granularity);
2788
2789        return lba;
2790}
2791
2792static sector_t map_index_to_lba(unsigned long index)
2793{
2794        sector_t lba = index * scsi_debug_unmap_granularity;
2795
2796        if (scsi_debug_unmap_alignment) {
2797                lba -= scsi_debug_unmap_granularity -
2798                        scsi_debug_unmap_alignment;
2799        }
2800
2801        return lba;
2802}
2803
2804static unsigned int map_state(sector_t lba, unsigned int *num)
2805{
2806        sector_t end;
2807        unsigned int mapped;
2808        unsigned long index;
2809        unsigned long next;
2810
2811        index = lba_to_map_index(lba);
2812        mapped = test_bit(index, map_storep);
2813
2814        if (mapped)
2815                next = find_next_zero_bit(map_storep, map_size, index);
2816        else
2817                next = find_next_bit(map_storep, map_size, index);
2818
2819        end = min_t(sector_t, sdebug_store_sectors,  map_index_to_lba(next));
2820        *num = end - lba;
2821
2822        return mapped;
2823}
2824
2825static void map_region(sector_t lba, unsigned int len)
2826{
2827        sector_t end = lba + len;
2828
2829        while (lba < end) {
2830                unsigned long index = lba_to_map_index(lba);
2831
2832                if (index < map_size)
2833                        set_bit(index, map_storep);
2834
2835                lba = map_index_to_lba(index + 1);
2836        }
2837}
2838
2839static void unmap_region(sector_t lba, unsigned int len)
2840{
2841        sector_t end = lba + len;
2842
2843        while (lba < end) {
2844                unsigned long index = lba_to_map_index(lba);
2845
2846                if (lba == map_index_to_lba(index) &&
2847                    lba + scsi_debug_unmap_granularity <= end &&
2848                    index < map_size) {
2849                        clear_bit(index, map_storep);
2850                        if (scsi_debug_lbprz) {
2851                                memset(fake_storep +
2852                                       lba * scsi_debug_sector_size, 0,
2853                                       scsi_debug_sector_size *
2854                                       scsi_debug_unmap_granularity);
2855                        }
2856                        if (dif_storep) {
2857                                memset(dif_storep + lba, 0xff,
2858                                       sizeof(*dif_storep) *
2859                                       scsi_debug_unmap_granularity);
2860                        }
2861                }
2862                lba = map_index_to_lba(index + 1);
2863        }
2864}
2865
2866static int
2867resp_write_dt0(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
2868{
2869        u8 *cmd = scp->cmnd;
2870        u64 lba;
2871        u32 num;
2872        u32 ei_lba;
2873        unsigned long iflags;
2874        int ret;
2875        bool check_prot;
2876
2877        switch (cmd[0]) {
2878        case WRITE_16:
2879                ei_lba = 0;
2880                lba = get_unaligned_be64(cmd + 2);
2881                num = get_unaligned_be32(cmd + 10);
2882                check_prot = true;
2883                break;
2884        case WRITE_10:
2885                ei_lba = 0;
2886                lba = get_unaligned_be32(cmd + 2);
2887                num = get_unaligned_be16(cmd + 7);
2888                check_prot = true;
2889                break;
2890        case WRITE_6:
2891                ei_lba = 0;
2892                lba = (u32)cmd[3] | (u32)cmd[2] << 8 |
2893                      (u32)(cmd[1] & 0x1f) << 16;
2894                num = (0 == cmd[4]) ? 256 : cmd[4];
2895                check_prot = true;
2896                break;
2897        case WRITE_12:
2898                ei_lba = 0;
2899                lba = get_unaligned_be32(cmd + 2);
2900                num = get_unaligned_be32(cmd + 6);
2901                check_prot = true;
2902                break;
2903        case 0x53:      /* XDWRITEREAD(10) */
2904                ei_lba = 0;
2905                lba = get_unaligned_be32(cmd + 2);
2906                num = get_unaligned_be16(cmd + 7);
2907                check_prot = false;
2908                break;
2909        default:        /* assume WRITE(32) */
2910                lba = get_unaligned_be64(cmd + 12);
2911                ei_lba = get_unaligned_be32(cmd + 20);
2912                num = get_unaligned_be32(cmd + 28);
2913                check_prot = false;
2914                break;
2915        }
2916        if (check_prot) {
2917                if (scsi_debug_dif == SD_DIF_TYPE2_PROTECTION &&
2918                    (cmd[1] & 0xe0)) {
2919                        mk_sense_invalid_opcode(scp);
2920                        return check_condition_result;
2921                }
2922                if ((scsi_debug_dif == SD_DIF_TYPE1_PROTECTION ||
2923                     scsi_debug_dif == SD_DIF_TYPE3_PROTECTION) &&
2924                    (cmd[1] & 0xe0) == 0)
2925                        sdev_printk(KERN_ERR, scp->device, "Unprotected WR "
2926                                    "to DIF device\n");
2927        }
2928
2929        /* inline check_device_access_params() */
2930        if (lba + num > sdebug_capacity) {
2931                mk_sense_buffer(scp, ILLEGAL_REQUEST, LBA_OUT_OF_RANGE, 0);
2932                return check_condition_result;
2933        }
2934        /* transfer length excessive (tie in to block limits VPD page) */
2935        if (num > sdebug_store_sectors) {
2936                /* needs work to find which cdb byte 'num' comes from */
2937                mk_sense_buffer(scp, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB, 0);
2938                return check_condition_result;
2939        }
2940
2941        write_lock_irqsave(&atomic_rw, iflags);
2942
2943        /* DIX + T10 DIF */
2944        if (scsi_debug_dix && scsi_prot_sg_count(scp)) {
2945                int prot_ret = prot_verify_write(scp, lba, num, ei_lba);
2946
2947                if (prot_ret) {
2948                        write_unlock_irqrestore(&atomic_rw, iflags);
2949                        mk_sense_buffer(scp, ILLEGAL_REQUEST, 0x10, prot_ret);
2950                        return illegal_condition_result;
2951                }
2952        }
2953
2954        ret = do_device_access(scp, lba, num, true);
2955        if (scsi_debug_lbp())
2956                map_region(lba, num);
2957        write_unlock_irqrestore(&atomic_rw, iflags);
2958        if (-1 == ret)
2959                return (DID_ERROR << 16);
2960        else if ((ret < (num * scsi_debug_sector_size)) &&
2961                 (SCSI_DEBUG_OPT_NOISE & scsi_debug_opts))
2962                sdev_printk(KERN_INFO, scp->device,
2963                            "%s: write: cdb indicated=%u, IO sent=%d bytes\n",
2964                            my_name, num * scsi_debug_sector_size, ret);
2965
2966        if (sdebug_any_injecting_opt) {
2967                struct sdebug_scmd_extra_t *ep = scsi_cmd_priv(scp);
2968
2969                if (ep->inj_recovered) {
2970                        mk_sense_buffer(scp, RECOVERED_ERROR,
2971                                        THRESHOLD_EXCEEDED, 0);
2972                        return check_condition_result;
2973                } else if (ep->inj_dif) {
2974                        /* Logical block guard check failed */
2975                        mk_sense_buffer(scp, ABORTED_COMMAND, 0x10, 1);
2976                        return illegal_condition_result;
2977                } else if (ep->inj_dix) {
2978                        mk_sense_buffer(scp, ILLEGAL_REQUEST, 0x10, 1);
2979                        return illegal_condition_result;
2980                }
2981        }
2982        return 0;
2983}
2984
2985static int
2986resp_write_same(struct scsi_cmnd *scp, u64 lba, u32 num, u32 ei_lba,
2987                bool unmap, bool ndob)
2988{
2989        unsigned long iflags;
2990        unsigned long long i;
2991        int ret;
2992
2993        ret = check_device_access_params(scp, lba, num);
2994        if (ret)
2995                return ret;
2996
2997        write_lock_irqsave(&atomic_rw, iflags);
2998
2999        if (unmap && scsi_debug_lbp()) {
3000                unmap_region(lba, num);
3001                goto out;
3002        }
3003
3004        /* if ndob then zero 1 logical block, else fetch 1 logical block */
3005        if (ndob) {
3006                memset(fake_storep + (lba * scsi_debug_sector_size), 0,
3007                       scsi_debug_sector_size);
3008                ret = 0;
3009        } else
3010                ret = fetch_to_dev_buffer(scp, fake_storep +
3011                                               (lba * scsi_debug_sector_size),
3012                                          scsi_debug_sector_size);
3013
3014        if (-1 == ret) {
3015                write_unlock_irqrestore(&atomic_rw, iflags);
3016                return (DID_ERROR << 16);
3017        } else if ((ret < (num * scsi_debug_sector_size)) &&
3018                 (SCSI_DEBUG_OPT_NOISE & scsi_debug_opts))
3019                sdev_printk(KERN_INFO, scp->device,
3020                            "%s: %s: cdb indicated=%u, IO sent=%d bytes\n",
3021                            my_name, "write same",
3022                            num * scsi_debug_sector_size, ret);
3023
3024        /* Copy first sector to remaining blocks */
3025        for (i = 1 ; i < num ; i++)
3026                memcpy(fake_storep + ((lba + i) * scsi_debug_sector_size),
3027                       fake_storep + (lba * scsi_debug_sector_size),
3028                       scsi_debug_sector_size);
3029
3030        if (scsi_debug_lbp())
3031                map_region(lba, num);
3032out:
3033        write_unlock_irqrestore(&atomic_rw, iflags);
3034
3035        return 0;
3036}
3037
3038static int
3039resp_write_same_10(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
3040{
3041        u8 *cmd = scp->cmnd;
3042        u32 lba;
3043        u16 num;
3044        u32 ei_lba = 0;
3045        bool unmap = false;
3046
3047        if (cmd[1] & 0x8) {
3048                if (scsi_debug_lbpws10 == 0) {
3049                        mk_sense_invalid_fld(scp, SDEB_IN_CDB, 1, 3);
3050                        return check_condition_result;
3051                } else
3052                        unmap = true;
3053        }
3054        lba = get_unaligned_be32(cmd + 2);
3055        num = get_unaligned_be16(cmd + 7);
3056        if (num > scsi_debug_write_same_length) {
3057                mk_sense_invalid_fld(scp, SDEB_IN_CDB, 7, -1);
3058                return check_condition_result;
3059        }
3060        return resp_write_same(scp, lba, num, ei_lba, unmap, false);
3061}
3062
3063static int
3064resp_write_same_16(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
3065{
3066        u8 *cmd = scp->cmnd;
3067        u64 lba;
3068        u32 num;
3069        u32 ei_lba = 0;
3070        bool unmap = false;
3071        bool ndob = false;
3072
3073        if (cmd[1] & 0x8) {     /* UNMAP */
3074                if (scsi_debug_lbpws == 0) {
3075                        mk_sense_invalid_fld(scp, SDEB_IN_CDB, 1, 3);
3076                        return check_condition_result;
3077                } else
3078                        unmap = true;
3079        }
3080        if (cmd[1] & 0x1)  /* NDOB (no data-out buffer, assumes zeroes) */
3081                ndob = true;
3082        lba = get_unaligned_be64(cmd + 2);
3083        num = get_unaligned_be32(cmd + 10);
3084        if (num > scsi_debug_write_same_length) {
3085                mk_sense_invalid_fld(scp, SDEB_IN_CDB, 10, -1);
3086                return check_condition_result;
3087        }
3088        return resp_write_same(scp, lba, num, ei_lba, unmap, ndob);
3089}
3090
3091/* Note the mode field is in the same position as the (lower) service action
3092 * field. For the Report supported operation codes command, SPC-4 suggests
3093 * each mode of this command should be reported separately; for future. */
3094static int
3095resp_write_buffer(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
3096{
3097        u8 *cmd = scp->cmnd;
3098        struct scsi_device *sdp = scp->device;
3099        struct sdebug_dev_info *dp;
3100        u8 mode;
3101
3102        mode = cmd[1] & 0x1f;
3103        switch (mode) {
3104        case 0x4:       /* download microcode (MC) and activate (ACT) */
3105                /* set UAs on this device only */
3106                set_bit(SDEBUG_UA_BUS_RESET, devip->uas_bm);
3107                set_bit(SDEBUG_UA_MICROCODE_CHANGED, devip->uas_bm);
3108                break;
3109        case 0x5:       /* download MC, save and ACT */
3110                set_bit(SDEBUG_UA_MICROCODE_CHANGED_WO_RESET, devip->uas_bm);
3111                break;
3112        case 0x6:       /* download MC with offsets and ACT */
3113                /* set UAs on most devices (LUs) in this target */
3114                list_for_each_entry(dp,
3115                                    &devip->sdbg_host->dev_info_list,
3116                                    dev_list)
3117                        if (dp->target == sdp->id) {
3118                                set_bit(SDEBUG_UA_BUS_RESET, dp->uas_bm);
3119                                if (devip != dp)
3120                                        set_bit(SDEBUG_UA_MICROCODE_CHANGED,
3121                                                dp->uas_bm);
3122                        }
3123                break;
3124        case 0x7:       /* download MC with offsets, save, and ACT */
3125                /* set UA on all devices (LUs) in this target */
3126                list_for_each_entry(dp,
3127                                    &devip->sdbg_host->dev_info_list,
3128                                    dev_list)
3129                        if (dp->target == sdp->id)
3130                                set_bit(SDEBUG_UA_MICROCODE_CHANGED_WO_RESET,
3131                                        dp->uas_bm);
3132                break;
3133        default:
3134                /* do nothing for this command for other mode values */
3135                break;
3136        }
3137        return 0;
3138}
3139
3140static int
3141resp_comp_write(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
3142{
3143        u8 *cmd = scp->cmnd;
3144        u8 *arr;
3145        u8 *fake_storep_hold;
3146        u64 lba;
3147        u32 dnum;
3148        u32 lb_size = scsi_debug_sector_size;
3149        u8 num;
3150        unsigned long iflags;
3151        int ret;
3152        int retval = 0;
3153
3154        lba = get_unaligned_be64(cmd + 2);
3155        num = cmd[13];          /* 1 to a maximum of 255 logical blocks */
3156        if (0 == num)
3157                return 0;       /* degenerate case, not an error */
3158        if (scsi_debug_dif == SD_DIF_TYPE2_PROTECTION &&
3159            (cmd[1] & 0xe0)) {
3160                mk_sense_invalid_opcode(scp);
3161                return check_condition_result;
3162        }
3163        if ((scsi_debug_dif == SD_DIF_TYPE1_PROTECTION ||
3164             scsi_debug_dif == SD_DIF_TYPE3_PROTECTION) &&
3165            (cmd[1] & 0xe0) == 0)
3166                sdev_printk(KERN_ERR, scp->device, "Unprotected WR "
3167                            "to DIF device\n");
3168
3169        /* inline check_device_access_params() */
3170        if (lba + num > sdebug_capacity) {
3171                mk_sense_buffer(scp, ILLEGAL_REQUEST, LBA_OUT_OF_RANGE, 0);
3172                return check_condition_result;
3173        }
3174        /* transfer length excessive (tie in to block limits VPD page) */
3175        if (num > sdebug_store_sectors) {
3176                /* needs work to find which cdb byte 'num' comes from */
3177                mk_sense_buffer(scp, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB, 0);
3178                return check_condition_result;
3179        }
3180        dnum = 2 * num;
3181        arr = kzalloc(dnum * lb_size, GFP_ATOMIC);
3182        if (NULL == arr) {
3183                mk_sense_buffer(scp, ILLEGAL_REQUEST, INSUFF_RES_ASC,
3184                                INSUFF_RES_ASCQ);
3185                return check_condition_result;
3186        }
3187
3188        write_lock_irqsave(&atomic_rw, iflags);
3189
3190        /* trick do_device_access() to fetch both compare and write buffers
3191         * from data-in into arr. Safe (atomic) since write_lock held. */
3192        fake_storep_hold = fake_storep;
3193        fake_storep = arr;
3194        ret = do_device_access(scp, 0, dnum, true);
3195        fake_storep = fake_storep_hold;
3196        if (ret == -1) {
3197                retval = DID_ERROR << 16;
3198                goto cleanup;
3199        } else if ((ret < (dnum * lb_size)) &&
3200                 (SCSI_DEBUG_OPT_NOISE & scsi_debug_opts))
3201                sdev_printk(KERN_INFO, scp->device, "%s: compare_write: cdb "
3202                            "indicated=%u, IO sent=%d bytes\n", my_name,
3203                            dnum * lb_size, ret);
3204        if (!comp_write_worker(lba, num, arr)) {
3205                mk_sense_buffer(scp, MISCOMPARE, MISCOMPARE_VERIFY_ASC, 0);
3206                retval = check_condition_result;
3207                goto cleanup;
3208        }
3209        if (scsi_debug_lbp())
3210                map_region(lba, num);
3211cleanup:
3212        write_unlock_irqrestore(&atomic_rw, iflags);
3213        kfree(arr);
3214        return retval;
3215}
3216
3217struct unmap_block_desc {
3218        __be64  lba;
3219        __be32  blocks;
3220        __be32  __reserved;
3221};
3222
3223static int
3224resp_unmap(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
3225{
3226        unsigned char *buf;
3227        struct unmap_block_desc *desc;
3228        unsigned int i, payload_len, descriptors;
3229        int ret;
3230        unsigned long iflags;
3231
3232
3233        if (!scsi_debug_lbp())
3234                return 0;       /* fib and say its done */
3235        payload_len = get_unaligned_be16(scp->cmnd + 7);
3236        BUG_ON(scsi_bufflen(scp) != payload_len);
3237
3238        descriptors = (payload_len - 8) / 16;
3239        if (descriptors > scsi_debug_unmap_max_desc) {
3240                mk_sense_invalid_fld(scp, SDEB_IN_CDB, 7, -1);
3241                return check_condition_result;
3242        }
3243
3244        buf = kmalloc(scsi_bufflen(scp), GFP_ATOMIC);
3245        if (!buf) {
3246                mk_sense_buffer(scp, ILLEGAL_REQUEST, INSUFF_RES_ASC,
3247                                INSUFF_RES_ASCQ);
3248                return check_condition_result;
3249        }
3250
3251        scsi_sg_copy_to_buffer(scp, buf, scsi_bufflen(scp));
3252
3253        BUG_ON(get_unaligned_be16(&buf[0]) != payload_len - 2);
3254        BUG_ON(get_unaligned_be16(&buf[2]) != descriptors * 16);
3255
3256        desc = (void *)&buf[8];
3257
3258        write_lock_irqsave(&atomic_rw, iflags);
3259
3260        for (i = 0 ; i < descriptors ; i++) {
3261                unsigned long long lba = get_unaligned_be64(&desc[i].lba);
3262                unsigned int num = get_unaligned_be32(&desc[i].blocks);
3263
3264                ret = check_device_access_params(scp, lba, num);
3265                if (ret)
3266                        goto out;
3267
3268                unmap_region(lba, num);
3269        }
3270
3271        ret = 0;
3272
3273out:
3274        write_unlock_irqrestore(&atomic_rw, iflags);
3275        kfree(buf);
3276
3277        return ret;
3278}
3279
3280#define SDEBUG_GET_LBA_STATUS_LEN 32
3281
3282static int
3283resp_get_lba_status(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
3284{
3285        u8 *cmd = scp->cmnd;
3286        u64 lba;
3287        u32 alloc_len, mapped, num;
3288        u8 arr[SDEBUG_GET_LBA_STATUS_LEN];
3289        int ret;
3290
3291        lba = get_unaligned_be64(cmd + 2);
3292        alloc_len = get_unaligned_be32(cmd + 10);
3293
3294        if (alloc_len < 24)
3295                return 0;
3296
3297        ret = check_device_access_params(scp, lba, 1);
3298        if (ret)
3299                return ret;
3300
3301        if (scsi_debug_lbp())
3302                mapped = map_state(lba, &num);
3303        else {
3304                mapped = 1;
3305                /* following just in case virtual_gb changed */
3306                sdebug_capacity = get_sdebug_capacity();
3307                if (sdebug_capacity - lba <= 0xffffffff)
3308                        num = sdebug_capacity - lba;
3309                else
3310                        num = 0xffffffff;
3311        }
3312
3313        memset(arr, 0, SDEBUG_GET_LBA_STATUS_LEN);
3314        put_unaligned_be32(20, arr);            /* Parameter Data Length */
3315        put_unaligned_be64(lba, arr + 8);       /* LBA */
3316        put_unaligned_be32(num, arr + 16);      /* Number of blocks */
3317        arr[20] = !mapped;              /* prov_stat=0: mapped; 1: dealloc */
3318
3319        return fill_from_dev_buffer(scp, arr, SDEBUG_GET_LBA_STATUS_LEN);
3320}
3321
3322#define SDEBUG_RLUN_ARR_SZ 256
3323
3324static int resp_report_luns(struct scsi_cmnd * scp,
3325                            struct sdebug_dev_info * devip)
3326{
3327        unsigned int alloc_len;
3328        int lun_cnt, i, upper, num, n, want_wlun, shortish;
3329        u64 lun;
3330        unsigned char *cmd = scp->cmnd;
3331        int select_report = (int)cmd[2];
3332        struct scsi_lun *one_lun;
3333        unsigned char arr[SDEBUG_RLUN_ARR_SZ];
3334        unsigned char * max_addr;
3335
3336        clear_luns_changed_on_target(devip);
3337        alloc_len = cmd[9] + (cmd[8] << 8) + (cmd[7] << 16) + (cmd[6] << 24);
3338        shortish = (alloc_len < 4);
3339        if (shortish || (select_report > 2)) {
3340                mk_sense_invalid_fld(scp, SDEB_IN_CDB, shortish ? 6 : 2, -1);
3341                return check_condition_result;
3342        }
3343        /* can produce response with up to 16k luns (lun 0 to lun 16383) */
3344        memset(arr, 0, SDEBUG_RLUN_ARR_SZ);
3345        lun_cnt = scsi_debug_max_luns;
3346        if (1 == select_report)
3347                lun_cnt = 0;
3348        else if (scsi_debug_no_lun_0 && (lun_cnt > 0))
3349                --lun_cnt;
3350        want_wlun = (select_report > 0) ? 1 : 0;
3351        num = lun_cnt + want_wlun;
3352        arr[2] = ((sizeof(struct scsi_lun) * num) >> 8) & 0xff;
3353        arr[3] = (sizeof(struct scsi_lun) * num) & 0xff;
3354        n = min((int)((SDEBUG_RLUN_ARR_SZ - 8) /
3355                            sizeof(struct scsi_lun)), num);
3356        if (n < num) {
3357                want_wlun = 0;
3358                lun_cnt = n;
3359        }
3360        one_lun = (struct scsi_lun *) &arr[8];
3361        max_addr = arr + SDEBUG_RLUN_ARR_SZ;
3362        for (i = 0, lun = (scsi_debug_no_lun_0 ? 1 : 0);
3363             ((i < lun_cnt) && ((unsigned char *)(one_lun + i) < max_addr));
3364             i++, lun++) {
3365                upper = (lun >> 8) & 0x3f;
3366                if (upper)
3367                        one_lun[i].scsi_lun[0] =
3368                            (upper | (SAM2_LUN_ADDRESS_METHOD << 6));
3369                one_lun[i].scsi_lun[1] = lun & 0xff;
3370        }
3371        if (want_wlun) {
3372                one_lun[i].scsi_lun[0] = (SAM2_WLUN_REPORT_LUNS >> 8) & 0xff;
3373                one_lun[i].scsi_lun[1] = SAM2_WLUN_REPORT_LUNS & 0xff;
3374                i++;
3375        }
3376        alloc_len = (unsigned char *)(one_lun + i) - arr;
3377        return fill_from_dev_buffer(scp, arr,
3378                                    min((int)alloc_len, SDEBUG_RLUN_ARR_SZ));
3379}
3380
3381static int resp_xdwriteread(struct scsi_cmnd *scp, unsigned long long lba,
3382                            unsigned int num, struct sdebug_dev_info *devip)
3383{
3384        int j;
3385        unsigned char *kaddr, *buf;
3386        unsigned int offset;
3387        struct scsi_data_buffer *sdb = scsi_in(scp);
3388        struct sg_mapping_iter miter;
3389
3390        /* better not to use temporary buffer. */
3391        buf = kmalloc(scsi_bufflen(scp), GFP_ATOMIC);
3392        if (!buf) {
3393                mk_sense_buffer(scp, ILLEGAL_REQUEST, INSUFF_RES_ASC,
3394                                INSUFF_RES_ASCQ);
3395                return check_condition_result;
3396        }
3397
3398        scsi_sg_copy_to_buffer(scp, buf, scsi_bufflen(scp));
3399
3400        offset = 0;
3401        sg_miter_start(&miter, sdb->table.sgl, sdb->table.nents,
3402                        SG_MITER_ATOMIC | SG_MITER_TO_SG);
3403
3404        while (sg_miter_next(&miter)) {
3405                kaddr = miter.addr;
3406                for (j = 0; j < miter.length; j++)
3407                        *(kaddr + j) ^= *(buf + offset + j);
3408
3409                offset += miter.length;
3410        }
3411        sg_miter_stop(&miter);
3412        kfree(buf);
3413
3414        return 0;
3415}
3416
3417static int
3418resp_xdwriteread_10(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
3419{
3420        u8 *cmd = scp->cmnd;
3421        u64 lba;
3422        u32 num;
3423        int errsts;
3424
3425        if (!scsi_bidi_cmnd(scp)) {
3426                mk_sense_buffer(scp, ILLEGAL_REQUEST, INSUFF_RES_ASC,
3427                                INSUFF_RES_ASCQ);
3428                return check_condition_result;
3429        }
3430        errsts = resp_read_dt0(scp, devip);
3431        if (errsts)
3432                return errsts;
3433        if (!(cmd[1] & 0x4)) {          /* DISABLE_WRITE is not set */
3434                errsts = resp_write_dt0(scp, devip);
3435                if (errsts)
3436                        return errsts;
3437        }
3438        lba = get_unaligned_be32(cmd + 2);
3439        num = get_unaligned_be16(cmd + 7);
3440        return resp_xdwriteread(scp, lba, num, devip);
3441}
3442
3443/* When timer or tasklet goes off this function is called. */
3444static void sdebug_q_cmd_complete(unsigned long indx)
3445{
3446        int qa_indx;
3447        int retiring = 0;
3448        unsigned long iflags;
3449        struct sdebug_queued_cmd *sqcp;
3450        struct scsi_cmnd *scp;
3451        struct sdebug_dev_info *devip;
3452
3453        atomic_inc(&sdebug_completions);
3454        qa_indx = indx;
3455        if ((qa_indx < 0) || (qa_indx >= SCSI_DEBUG_CANQUEUE)) {
3456                pr_err("%s: wild qa_indx=%d\n", __func__, qa_indx);
3457                return;
3458        }
3459        spin_lock_irqsave(&queued_arr_lock, iflags);
3460        sqcp = &queued_arr[qa_indx];
3461        scp = sqcp->a_cmnd;
3462        if (NULL == scp) {
3463                spin_unlock_irqrestore(&queued_arr_lock, iflags);
3464                pr_err("%s: scp is NULL\n", __func__);
3465                return;
3466        }
3467        devip = (struct sdebug_dev_info *)scp->device->hostdata;
3468        if (devip)
3469                atomic_dec(&devip->num_in_q);
3470        else
3471                pr_err("%s: devip=NULL\n", __func__);
3472        if (atomic_read(&retired_max_queue) > 0)
3473                retiring = 1;
3474
3475        sqcp->a_cmnd = NULL;
3476        if (!test_and_clear_bit(qa_indx, queued_in_use_bm)) {
3477                spin_unlock_irqrestore(&queued_arr_lock, iflags);
3478                pr_err("%s: Unexpected completion\n", __func__);
3479                return;
3480        }
3481
3482        if (unlikely(retiring)) {       /* user has reduced max_queue */
3483                int k, retval;
3484
3485                retval = atomic_read(&retired_max_queue);
3486                if (qa_indx >= retval) {
3487                        spin_unlock_irqrestore(&queued_arr_lock, iflags);
3488                        pr_err("%s: index %d too large\n", __func__, retval);
3489                        return;
3490                }
3491                k = find_last_bit(queued_in_use_bm, retval);
3492                if ((k < scsi_debug_max_queue) || (k == retval))
3493                        atomic_set(&retired_max_queue, 0);
3494                else
3495                        atomic_set(&retired_max_queue, k + 1);
3496        }
3497        spin_unlock_irqrestore(&queued_arr_lock, iflags);
3498        scp->scsi_done(scp); /* callback to mid level */
3499}
3500
3501/* When high resolution timer goes off this function is called. */
3502static enum hrtimer_restart
3503sdebug_q_cmd_hrt_complete(struct hrtimer *timer)
3504{
3505        int qa_indx;
3506        int retiring = 0;
3507        unsigned long iflags;
3508        struct sdebug_hrtimer *sd_hrtp = (struct sdebug_hrtimer *)timer;
3509        struct sdebug_queued_cmd *sqcp;
3510        struct scsi_cmnd *scp;
3511        struct sdebug_dev_info *devip;
3512
3513        atomic_inc(&sdebug_completions);
3514        qa_indx = sd_hrtp->qa_indx;
3515        if ((qa_indx < 0) || (qa_indx >= SCSI_DEBUG_CANQUEUE)) {
3516                pr_err("%s: wild qa_indx=%d\n", __func__, qa_indx);
3517                goto the_end;
3518        }
3519        spin_lock_irqsave(&queued_arr_lock, iflags);
3520        sqcp = &queued_arr[qa_indx];
3521        scp = sqcp->a_cmnd;
3522        if (NULL == scp) {
3523                spin_unlock_irqrestore(&queued_arr_lock, iflags);
3524                pr_err("%s: scp is NULL\n", __func__);
3525                goto the_end;
3526        }
3527        devip = (struct sdebug_dev_info *)scp->device->hostdata;
3528        if (devip)
3529                atomic_dec(&devip->num_in_q);
3530        else
3531                pr_err("%s: devip=NULL\n", __func__);
3532        if (atomic_read(&retired_max_queue) > 0)
3533                retiring = 1;
3534
3535        sqcp->a_cmnd = NULL;
3536        if (!test_and_clear_bit(qa_indx, queued_in_use_bm)) {
3537                spin_unlock_irqrestore(&queued_arr_lock, iflags);
3538                pr_err("%s: Unexpected completion\n", __func__);
3539                goto the_end;
3540        }
3541
3542        if (unlikely(retiring)) {       /* user has reduced max_queue */
3543                int k, retval;
3544
3545                retval = atomic_read(&retired_max_queue);
3546                if (qa_indx >= retval) {
3547                        spin_unlock_irqrestore(&queued_arr_lock, iflags);
3548                        pr_err("%s: index %d too large\n", __func__, retval);
3549                        goto the_end;
3550                }
3551                k = find_last_bit(queued_in_use_bm, retval);
3552                if ((k < scsi_debug_max_queue) || (k == retval))
3553                        atomic_set(&retired_max_queue, 0);
3554                else
3555                        atomic_set(&retired_max_queue, k + 1);
3556        }
3557        spin_unlock_irqrestore(&queued_arr_lock, iflags);
3558        scp->scsi_done(scp); /* callback to mid level */
3559the_end:
3560        return HRTIMER_NORESTART;
3561}
3562
3563static struct sdebug_dev_info *
3564sdebug_device_create(struct sdebug_host_info *sdbg_host, gfp_t flags)
3565{
3566        struct sdebug_dev_info *devip;
3567
3568        devip = kzalloc(sizeof(*devip), flags);
3569        if (devip) {
3570                devip->sdbg_host = sdbg_host;
3571                list_add_tail(&devip->dev_list, &sdbg_host->dev_info_list);
3572        }
3573        return devip;
3574}
3575
3576static struct sdebug_dev_info * devInfoReg(struct scsi_device * sdev)
3577{
3578        struct sdebug_host_info * sdbg_host;
3579        struct sdebug_dev_info * open_devip = NULL;
3580        struct sdebug_dev_info * devip =
3581                        (struct sdebug_dev_info *)sdev->hostdata;
3582
3583        if (devip)
3584                return devip;
3585        sdbg_host = *(struct sdebug_host_info **)shost_priv(sdev->host);
3586        if (!sdbg_host) {
3587                pr_err("%s: Host info NULL\n", __func__);
3588                return NULL;
3589        }
3590        list_for_each_entry(devip, &sdbg_host->dev_info_list, dev_list) {
3591                if ((devip->used) && (devip->channel == sdev->channel) &&
3592                    (devip->target == sdev->id) &&
3593                    (devip->lun == sdev->lun))
3594                        return devip;
3595                else {
3596                        if ((!devip->used) && (!open_devip))
3597                                open_devip = devip;
3598                }
3599        }
3600        if (!open_devip) { /* try and make a new one */
3601                open_devip = sdebug_device_create(sdbg_host, GFP_ATOMIC);
3602                if (!open_devip) {
3603                        printk(KERN_ERR "%s: out of memory at line %d\n",
3604                                __func__, __LINE__);
3605                        return NULL;
3606                }
3607        }
3608
3609        open_devip->channel = sdev->channel;
3610        open_devip->target = sdev->id;
3611        open_devip->lun = sdev->lun;
3612        open_devip->sdbg_host = sdbg_host;
3613        atomic_set(&open_devip->num_in_q, 0);
3614        set_bit(SDEBUG_UA_POR, open_devip->uas_bm);
3615        open_devip->used = true;
3616        return open_devip;
3617}
3618
3619static int scsi_debug_slave_alloc(struct scsi_device *sdp)
3620{
3621        if (SCSI_DEBUG_OPT_NOISE & scsi_debug_opts)
3622                printk(KERN_INFO "scsi_debug: slave_alloc <%u %u %u %llu>\n",
3623                       sdp->host->host_no, sdp->channel, sdp->id, sdp->lun);
3624        queue_flag_set_unlocked(QUEUE_FLAG_BIDI, sdp->request_queue);
3625        return 0;
3626}
3627
3628static int scsi_debug_slave_configure(struct scsi_device *sdp)
3629{
3630        struct sdebug_dev_info *devip;
3631
3632        if (SCSI_DEBUG_OPT_NOISE & scsi_debug_opts)
3633                printk(KERN_INFO "scsi_debug: slave_configure <%u %u %u %llu>\n",
3634                       sdp->host->host_no, sdp->channel, sdp->id, sdp->lun);
3635        if (sdp->host->max_cmd_len != SCSI_DEBUG_MAX_CMD_LEN)
3636                sdp->host->max_cmd_len = SCSI_DEBUG_MAX_CMD_LEN;
3637        devip = devInfoReg(sdp);
3638        if (NULL == devip)
3639                return 1;       /* no resources, will be marked offline */
3640        sdp->hostdata = devip;
3641        blk_queue_max_segment_size(sdp->request_queue, -1U);
3642        if (scsi_debug_no_uld)
3643                sdp->no_uld_attach = 1;
3644        return 0;
3645}
3646
3647static void scsi_debug_slave_destroy(struct scsi_device *sdp)
3648{
3649        struct sdebug_dev_info *devip =
3650                (struct sdebug_dev_info *)sdp->hostdata;
3651
3652        if (SCSI_DEBUG_OPT_NOISE & scsi_debug_opts)
3653                printk(KERN_INFO "scsi_debug: slave_destroy <%u %u %u %llu>\n",
3654                       sdp->host->host_no, sdp->channel, sdp->id, sdp->lun);
3655        if (devip) {
3656                /* make this slot available for re-use */
3657                devip->used = false;
3658                sdp->hostdata = NULL;
3659        }
3660}
3661
3662/* Returns 1 if cmnd found (deletes its timer or tasklet), else returns 0 */
3663static int stop_queued_cmnd(struct scsi_cmnd *cmnd)
3664{
3665        unsigned long iflags;
3666        int k, qmax, r_qmax;
3667        struct sdebug_queued_cmd *sqcp;
3668        struct sdebug_dev_info *devip;
3669
3670        spin_lock_irqsave(&queued_arr_lock, iflags);
3671        qmax = scsi_debug_max_queue;
3672        r_qmax = atomic_read(&retired_max_queue);
3673        if (r_qmax > qmax)
3674                qmax = r_qmax;
3675        for (k = 0; k < qmax; ++k) {
3676                if (test_bit(k, queued_in_use_bm)) {
3677                        sqcp = &queued_arr[k];
3678                        if (cmnd == sqcp->a_cmnd) {
3679                                devip = (struct sdebug_dev_info *)
3680                                        cmnd->device->hostdata;
3681                                if (devip)
3682                                        atomic_dec(&devip->num_in_q);
3683                                sqcp->a_cmnd = NULL;
3684                                spin_unlock_irqrestore(&queued_arr_lock,
3685                                                       iflags);
3686                                if (scsi_debug_ndelay > 0) {
3687                                        if (sqcp->sd_hrtp)
3688                                                hrtimer_cancel(
3689                                                        &sqcp->sd_hrtp->hrt);
3690                                } else if (scsi_debug_delay > 0) {
3691                                        if (sqcp->cmnd_timerp)
3692                                                del_timer_sync(
3693                                                        sqcp->cmnd_timerp);
3694                                } else if (scsi_debug_delay < 0) {
3695                                        if (sqcp->tletp)
3696                                                tasklet_kill(sqcp->tletp);
3697                                }
3698                                clear_bit(k, queued_in_use_bm);
3699                                return 1;
3700                        }
3701                }
3702        }
3703        spin_unlock_irqrestore(&queued_arr_lock, iflags);
3704        return 0;
3705}
3706
3707/* Deletes (stops) timers or tasklets of all queued commands */
3708static void stop_all_queued(void)
3709{
3710        unsigned long iflags;
3711        int k;
3712        struct sdebug_queued_cmd *sqcp;
3713        struct sdebug_dev_info *devip;
3714
3715        spin_lock_irqsave(&queued_arr_lock, iflags);
3716        for (k = 0; k < SCSI_DEBUG_CANQUEUE; ++k) {
3717                if (test_bit(k, queued_in_use_bm)) {
3718                        sqcp = &queued_arr[k];
3719                        if (sqcp->a_cmnd) {
3720                                devip = (struct sdebug_dev_info *)
3721                                        sqcp->a_cmnd->device->hostdata;
3722                                if (devip)
3723                                        atomic_dec(&devip->num_in_q);
3724                                sqcp->a_cmnd = NULL;
3725                                spin_unlock_irqrestore(&queued_arr_lock,
3726                                                       iflags);
3727                                if (scsi_debug_ndelay > 0) {
3728                                        if (sqcp->sd_hrtp)
3729                                                hrtimer_cancel(
3730                                                        &sqcp->sd_hrtp->hrt);
3731                                } else if (scsi_debug_delay > 0) {
3732                                        if (sqcp->cmnd_timerp)
3733                                                del_timer_sync(
3734                                                        sqcp->cmnd_timerp);
3735                                } else if (scsi_debug_delay < 0) {
3736                                        if (sqcp->tletp)
3737                                                tasklet_kill(sqcp->tletp);
3738                                }
3739                                clear_bit(k, queued_in_use_bm);
3740                                spin_lock_irqsave(&queued_arr_lock, iflags);
3741                        }
3742                }
3743        }
3744        spin_unlock_irqrestore(&queued_arr_lock, iflags);
3745}
3746
3747/* Free queued command memory on heap */
3748static void free_all_queued(void)
3749{
3750        unsigned long iflags;
3751        int k;
3752        struct sdebug_queued_cmd *sqcp;
3753
3754        spin_lock_irqsave(&queued_arr_lock, iflags);
3755        for (k = 0; k < SCSI_DEBUG_CANQUEUE; ++k) {
3756                sqcp = &queued_arr[k];
3757                kfree(sqcp->cmnd_timerp);
3758                sqcp->cmnd_timerp = NULL;
3759                kfree(sqcp->tletp);
3760                sqcp->tletp = NULL;
3761                kfree(sqcp->sd_hrtp);
3762                sqcp->sd_hrtp = NULL;
3763        }
3764        spin_unlock_irqrestore(&queued_arr_lock, iflags);
3765}
3766
3767static int scsi_debug_abort(struct scsi_cmnd *SCpnt)
3768{
3769        ++num_aborts;
3770        if (SCpnt) {
3771                if (SCpnt->device &&
3772                    (SCSI_DEBUG_OPT_ALL_NOISE & scsi_debug_opts))
3773                        sdev_printk(KERN_INFO, SCpnt->device, "%s\n",
3774                                    __func__);
3775                stop_queued_cmnd(SCpnt);
3776        }
3777        return SUCCESS;
3778}
3779
3780static int scsi_debug_device_reset(struct scsi_cmnd * SCpnt)
3781{
3782        struct sdebug_dev_info * devip;
3783
3784        ++num_dev_resets;
3785        if (SCpnt && SCpnt->device) {
3786                struct scsi_device *sdp = SCpnt->device;
3787
3788                if (SCSI_DEBUG_OPT_ALL_NOISE & scsi_debug_opts)
3789                        sdev_printk(KERN_INFO, sdp, "%s\n", __func__);
3790                devip = devInfoReg(sdp);
3791                if (devip)
3792                        set_bit(SDEBUG_UA_POR, devip->uas_bm);
3793        }
3794        return SUCCESS;
3795}
3796
3797static int scsi_debug_target_reset(struct scsi_cmnd *SCpnt)
3798{
3799        struct sdebug_host_info *sdbg_host;
3800        struct sdebug_dev_info *devip;
3801        struct scsi_device *sdp;
3802        struct Scsi_Host *hp;
3803        int k = 0;
3804
3805        ++num_target_resets;
3806        if (!SCpnt)
3807                goto lie;
3808        sdp = SCpnt->device;
3809        if (!sdp)
3810                goto lie;
3811        if (SCSI_DEBUG_OPT_ALL_NOISE & scsi_debug_opts)
3812                sdev_printk(KERN_INFO, sdp, "%s\n", __func__);
3813        hp = sdp->host;
3814        if (!hp)
3815                goto lie;
3816        sdbg_host = *(struct sdebug_host_info **)shost_priv(hp);
3817        if (sdbg_host) {
3818                list_for_each_entry(devip,
3819                                    &sdbg_host->dev_info_list,
3820                                    dev_list)
3821                        if (devip->target == sdp->id) {
3822                                set_bit(SDEBUG_UA_BUS_RESET, devip->uas_bm);
3823                                ++k;
3824                        }
3825        }
3826        if (SCSI_DEBUG_OPT_RESET_NOISE & scsi_debug_opts)
3827                sdev_printk(KERN_INFO, sdp,
3828                            "%s: %d device(s) found in target\n", __func__, k);
3829lie:
3830        return SUCCESS;
3831}
3832
3833static int scsi_debug_bus_reset(struct scsi_cmnd * SCpnt)
3834{
3835        struct sdebug_host_info *sdbg_host;
3836        struct sdebug_dev_info *devip;
3837        struct scsi_device * sdp;
3838        struct Scsi_Host * hp;
3839        int k = 0;
3840
3841        ++num_bus_resets;
3842        if (!(SCpnt && SCpnt->device))
3843                goto lie;
3844        sdp = SCpnt->device;
3845        if (SCSI_DEBUG_OPT_ALL_NOISE & scsi_debug_opts)
3846                sdev_printk(KERN_INFO, sdp, "%s\n", __func__);
3847        hp = sdp->host;
3848        if (hp) {
3849                sdbg_host = *(struct sdebug_host_info **)shost_priv(hp);
3850                if (sdbg_host) {
3851                        list_for_each_entry(devip,
3852                                            &sdbg_host->dev_info_list,
3853                                            dev_list) {
3854                                set_bit(SDEBUG_UA_BUS_RESET, devip->uas_bm);
3855                                ++k;
3856                        }
3857                }
3858        }
3859        if (SCSI_DEBUG_OPT_RESET_NOISE & scsi_debug_opts)
3860                sdev_printk(KERN_INFO, sdp,
3861                            "%s: %d device(s) found in host\n", __func__, k);
3862lie:
3863        return SUCCESS;
3864}
3865
3866static int scsi_debug_host_reset(struct scsi_cmnd * SCpnt)
3867{
3868        struct sdebug_host_info * sdbg_host;
3869        struct sdebug_dev_info *devip;
3870        int k = 0;
3871
3872        ++num_host_resets;
3873        if ((SCpnt->device) && (SCSI_DEBUG_OPT_ALL_NOISE & scsi_debug_opts))
3874                sdev_printk(KERN_INFO, SCpnt->device, "%s\n", __func__);
3875        spin_lock(&sdebug_host_list_lock);
3876        list_for_each_entry(sdbg_host, &sdebug_host_list, host_list) {
3877                list_for_each_entry(devip, &sdbg_host->dev_info_list,
3878                                    dev_list) {
3879                        set_bit(SDEBUG_UA_BUS_RESET, devip->uas_bm);
3880                        ++k;
3881                }
3882        }
3883        spin_unlock(&sdebug_host_list_lock);
3884        stop_all_queued();
3885        if (SCSI_DEBUG_OPT_RESET_NOISE & scsi_debug_opts)
3886                sdev_printk(KERN_INFO, SCpnt->device,
3887                            "%s: %d device(s) found\n", __func__, k);
3888        return SUCCESS;
3889}
3890
3891static void __init sdebug_build_parts(unsigned char *ramp,
3892                                      unsigned long store_size)
3893{
3894        struct partition * pp;
3895        int starts[SDEBUG_MAX_PARTS + 2];
3896        int sectors_per_part, num_sectors, k;
3897        int heads_by_sects, start_sec, end_sec;
3898
3899        /* assume partition table already zeroed */
3900        if ((scsi_debug_num_parts < 1) || (store_size < 1048576))
3901                return;
3902        if (scsi_debug_num_parts > SDEBUG_MAX_PARTS) {
3903                scsi_debug_num_parts = SDEBUG_MAX_PARTS;
3904                pr_warn("%s: reducing partitions to %d\n", __func__,
3905                        SDEBUG_MAX_PARTS);
3906        }
3907        num_sectors = (int)sdebug_store_sectors;
3908        sectors_per_part = (num_sectors - sdebug_sectors_per)
3909                           / scsi_debug_num_parts;
3910        heads_by_sects = sdebug_heads * sdebug_sectors_per;
3911        starts[0] = sdebug_sectors_per;
3912        for (k = 1; k < scsi_debug_num_parts; ++k)
3913                starts[k] = ((k * sectors_per_part) / heads_by_sects)
3914                            * heads_by_sects;
3915        starts[scsi_debug_num_parts] = num_sectors;
3916        starts[scsi_debug_num_parts + 1] = 0;
3917
3918        ramp[510] = 0x55;       /* magic partition markings */
3919        ramp[511] = 0xAA;
3920        pp = (struct partition *)(ramp + 0x1be);
3921        for (k = 0; starts[k + 1]; ++k, ++pp) {
3922                start_sec = starts[k];
3923                end_sec = starts[k + 1] - 1;
3924                pp->boot_ind = 0;
3925
3926                pp->cyl = start_sec / heads_by_sects;
3927                pp->head = (start_sec - (pp->cyl * heads_by_sects))
3928                           / sdebug_sectors_per;
3929                pp->sector = (start_sec % sdebug_sectors_per) + 1;
3930
3931                pp->end_cyl = end_sec / heads_by_sects;
3932                pp->end_head = (end_sec - (pp->end_cyl * heads_by_sects))
3933                               / sdebug_sectors_per;
3934                pp->end_sector = (end_sec % sdebug_sectors_per) + 1;
3935
3936                pp->start_sect = cpu_to_le32(start_sec);
3937                pp->nr_sects = cpu_to_le32(end_sec - start_sec + 1);
3938                pp->sys_ind = 0x83;     /* plain Linux partition */
3939        }
3940}
3941
3942static int
3943schedule_resp(struct scsi_cmnd *cmnd, struct sdebug_dev_info *devip,
3944              int scsi_result, int delta_jiff)
3945{
3946        unsigned long iflags;
3947        int k, num_in_q, qdepth, inject;
3948        struct sdebug_queued_cmd *sqcp = NULL;
3949        struct scsi_device *sdp = cmnd->device;
3950
3951        if (NULL == cmnd || NULL == devip) {
3952                pr_warn("%s: called with NULL cmnd or devip pointer\n",
3953                        __func__);
3954                /* no particularly good error to report back */
3955                return SCSI_MLQUEUE_HOST_BUSY;
3956        }
3957        if ((scsi_result) && (SCSI_DEBUG_OPT_NOISE & scsi_debug_opts))
3958                sdev_printk(KERN_INFO, sdp, "%s: non-zero result=0x%x\n",
3959                            __func__, scsi_result);
3960        if (delta_jiff == 0)
3961                goto respond_in_thread;
3962
3963        /* schedule the response at a later time if resources permit */
3964        spin_lock_irqsave(&queued_arr_lock, iflags);
3965        num_in_q = atomic_read(&devip->num_in_q);
3966        qdepth = cmnd->device->queue_depth;
3967        inject = 0;
3968        if ((qdepth > 0) && (num_in_q >= qdepth)) {
3969                if (scsi_result) {
3970                        spin_unlock_irqrestore(&queued_arr_lock, iflags);
3971                        goto respond_in_thread;
3972                } else
3973                        scsi_result = device_qfull_result;
3974        } else if ((scsi_debug_every_nth != 0) &&
3975                   (SCSI_DEBUG_OPT_RARE_TSF & scsi_debug_opts) &&
3976                   (scsi_result == 0)) {
3977                if ((num_in_q == (qdepth - 1)) &&
3978                    (atomic_inc_return(&sdebug_a_tsf) >=
3979                     abs(scsi_debug_every_nth))) {
3980                        atomic_set(&sdebug_a_tsf, 0);
3981                        inject = 1;
3982                        scsi_result = device_qfull_result;
3983                }
3984        }
3985
3986        k = find_first_zero_bit(queued_in_use_bm, scsi_debug_max_queue);
3987        if (k >= scsi_debug_max_queue) {
3988                spin_unlock_irqrestore(&queued_arr_lock, iflags);
3989                if (scsi_result)
3990                        goto respond_in_thread;
3991                else if (SCSI_DEBUG_OPT_ALL_TSF & scsi_debug_opts)
3992                        scsi_result = device_qfull_result;
3993                if (SCSI_DEBUG_OPT_Q_NOISE & scsi_debug_opts)
3994                        sdev_printk(KERN_INFO, sdp,
3995                                    "%s: max_queue=%d exceeded, %s\n",
3996                                    __func__, scsi_debug_max_queue,
3997                                    (scsi_result ?  "status: TASK SET FULL" :
3998                                                    "report: host busy"));
3999                if (scsi_result)
4000                        goto respond_in_thread;
4001                else
4002                        return SCSI_MLQUEUE_HOST_BUSY;
4003        }
4004        __set_bit(k, queued_in_use_bm);
4005        atomic_inc(&devip->num_in_q);
4006        sqcp = &queued_arr[k];
4007        sqcp->a_cmnd = cmnd;
4008        cmnd->result = scsi_result;
4009        spin_unlock_irqrestore(&queued_arr_lock, iflags);
4010        if (delta_jiff > 0) {
4011                if (NULL == sqcp->cmnd_timerp) {
4012                        sqcp->cmnd_timerp = kmalloc(sizeof(struct timer_list),
4013                                                    GFP_ATOMIC);
4014                        if (NULL == sqcp->cmnd_timerp)
4015                                return SCSI_MLQUEUE_HOST_BUSY;
4016                        init_timer(sqcp->cmnd_timerp);
4017                }
4018                sqcp->cmnd_timerp->function = sdebug_q_cmd_complete;
4019                sqcp->cmnd_timerp->data = k;
4020                sqcp->cmnd_timerp->expires = get_jiffies_64() + delta_jiff;
4021                add_timer(sqcp->cmnd_timerp);
4022        } else if (scsi_debug_ndelay > 0) {
4023                ktime_t kt = ktime_set(0, scsi_debug_ndelay);
4024                struct sdebug_hrtimer *sd_hp = sqcp->sd_hrtp;
4025
4026                if (NULL == sd_hp) {
4027                        sd_hp = kmalloc(sizeof(*sd_hp), GFP_ATOMIC);
4028                        if (NULL == sd_hp)
4029                                return SCSI_MLQUEUE_HOST_BUSY;
4030                        sqcp->sd_hrtp = sd_hp;
4031                        hrtimer_init(&sd_hp->hrt, CLOCK_MONOTONIC,
4032                                     HRTIMER_MODE_REL);
4033                        sd_hp->hrt.function = sdebug_q_cmd_hrt_complete;
4034                        sd_hp->qa_indx = k;
4035                }
4036                hrtimer_start(&sd_hp->hrt, kt, HRTIMER_MODE_REL);
4037        } else {        /* delay < 0 */
4038                if (NULL == sqcp->tletp) {
4039                        sqcp->tletp = kmalloc(sizeof(*sqcp->tletp),
4040                                              GFP_ATOMIC);
4041                        if (NULL == sqcp->tletp)
4042                                return SCSI_MLQUEUE_HOST_BUSY;
4043                        tasklet_init(sqcp->tletp,
4044                                     sdebug_q_cmd_complete, k);
4045                }
4046                if (-1 == delta_jiff)
4047                        tasklet_hi_schedule(sqcp->tletp);
4048                else
4049                        tasklet_schedule(sqcp->tletp);
4050        }
4051        if ((SCSI_DEBUG_OPT_Q_NOISE & scsi_debug_opts) &&
4052            (scsi_result == device_qfull_result))
4053                sdev_printk(KERN_INFO, sdp,
4054                            "%s: num_in_q=%d +1, %s%s\n", __func__,
4055                            num_in_q, (inject ? "<inject> " : ""),
4056                            "status: TASK SET FULL");
4057        return 0;
4058
4059respond_in_thread:      /* call back to mid-layer using invocation thread */
4060        cmnd->result = scsi_result;
4061        cmnd->scsi_done(cmnd);
4062        return 0;
4063}
4064
4065/* Note: The following macros create attribute files in the
4066   /sys/module/scsi_debug/parameters directory. Unfortunately this
4067   driver is unaware of a change and cannot trigger auxiliary actions
4068   as it can when the corresponding attribute in the
4069   /sys/bus/pseudo/drivers/scsi_debug directory is changed.
4070 */
4071module_param_named(add_host, scsi_debug_add_host, int, S_IRUGO | S_IWUSR);
4072module_param_named(ato, scsi_debug_ato, int, S_IRUGO);
4073module_param_named(clustering, scsi_debug_clustering, bool, S_IRUGO | S_IWUSR);
4074module_param_named(delay, scsi_debug_delay, int, S_IRUGO | S_IWUSR);
4075module_param_named(dev_size_mb, scsi_debug_dev_size_mb, int, S_IRUGO);
4076module_param_named(dif, scsi_debug_dif, int, S_IRUGO);
4077module_param_named(dix, scsi_debug_dix, int, S_IRUGO);
4078module_param_named(dsense, scsi_debug_dsense, int, S_IRUGO | S_IWUSR);
4079module_param_named(every_nth, scsi_debug_every_nth, int, S_IRUGO | S_IWUSR);
4080module_param_named(fake_rw, scsi_debug_fake_rw, int, S_IRUGO | S_IWUSR);
4081module_param_named(guard, scsi_debug_guard, uint, S_IRUGO);
4082module_param_named(host_lock, scsi_debug_host_lock, bool, S_IRUGO | S_IWUSR);
4083module_param_named(lbpu, scsi_debug_lbpu, int, S_IRUGO);
4084module_param_named(lbpws, scsi_debug_lbpws, int, S_IRUGO);
4085module_param_named(lbpws10, scsi_debug_lbpws10, int, S_IRUGO);
4086module_param_named(lbprz, scsi_debug_lbprz, int, S_IRUGO);
4087module_param_named(lowest_aligned, scsi_debug_lowest_aligned, int, S_IRUGO);
4088module_param_named(max_luns, scsi_debug_max_luns, int, S_IRUGO | S_IWUSR);
4089module_param_named(max_queue, scsi_debug_max_queue, int, S_IRUGO | S_IWUSR);
4090module_param_named(ndelay, scsi_debug_ndelay, int, S_IRUGO | S_IWUSR);
4091module_param_named(no_lun_0, scsi_debug_no_lun_0, int, S_IRUGO | S_IWUSR);
4092module_param_named(no_uld, scsi_debug_no_uld, int, S_IRUGO);
4093module_param_named(num_parts, scsi_debug_num_parts, int, S_IRUGO);
4094module_param_named(num_tgts, scsi_debug_num_tgts, int, S_IRUGO | S_IWUSR);
4095module_param_named(opt_blks, scsi_debug_opt_blks, int, S_IRUGO);
4096module_param_named(opts, scsi_debug_opts, int, S_IRUGO | S_IWUSR);
4097module_param_named(physblk_exp, scsi_debug_physblk_exp, int, S_IRUGO);
4098module_param_named(ptype, scsi_debug_ptype, int, S_IRUGO | S_IWUSR);
4099module_param_named(removable, scsi_debug_removable, bool, S_IRUGO | S_IWUSR);
4100module_param_named(scsi_level, scsi_debug_scsi_level, int, S_IRUGO);
4101module_param_named(sector_size, scsi_debug_sector_size, int, S_IRUGO);
4102module_param_named(strict, scsi_debug_strict, bool, S_IRUGO | S_IWUSR);
4103module_param_named(unmap_alignment, scsi_debug_unmap_alignment, int, S_IRUGO);
4104module_param_named(unmap_granularity, scsi_debug_unmap_granularity, int, S_IRUGO);
4105module_param_named(unmap_max_blocks, scsi_debug_unmap_max_blocks, int, S_IRUGO);
4106module_param_named(unmap_max_desc, scsi_debug_unmap_max_desc, int, S_IRUGO);
4107module_param_named(virtual_gb, scsi_debug_virtual_gb, int, S_IRUGO | S_IWUSR);
4108module_param_named(vpd_use_hostno, scsi_debug_vpd_use_hostno, int,
4109                   S_IRUGO | S_IWUSR);
4110module_param_named(write_same_length, scsi_debug_write_same_length, int,
4111                   S_IRUGO | S_IWUSR);
4112
4113MODULE_AUTHOR("Eric Youngdale + Douglas Gilbert");
4114MODULE_DESCRIPTION("SCSI debug adapter driver");
4115MODULE_LICENSE("GPL");
4116MODULE_VERSION(SCSI_DEBUG_VERSION);
4117
4118MODULE_PARM_DESC(add_host, "0..127 hosts allowed(def=1)");
4119MODULE_PARM_DESC(ato, "application tag ownership: 0=disk 1=host (def=1)");
4120MODULE_PARM_DESC(clustering, "when set enables larger transfers (def=0)");
4121MODULE_PARM_DESC(delay, "response delay (def=1 jiffy); 0:imm, -1,-2:tiny");
4122MODULE_PARM_DESC(dev_size_mb, "size in MiB of ram shared by devs(def=8)");
4123MODULE_PARM_DESC(dif, "data integrity field type: 0-3 (def=0)");
4124MODULE_PARM_DESC(dix, "data integrity extensions mask (def=0)");
4125MODULE_PARM_DESC(dsense, "use descriptor sense format(def=0 -> fixed)");
4126MODULE_PARM_DESC(every_nth, "timeout every nth command(def=0)");
4127MODULE_PARM_DESC(fake_rw, "fake reads/writes instead of copying (def=0)");
4128MODULE_PARM_DESC(guard, "protection checksum: 0=crc, 1=ip (def=0)");
4129MODULE_PARM_DESC(host_lock, "use host_lock around all commands (def=0)");
4130MODULE_PARM_DESC(lbpu, "enable LBP, support UNMAP command (def=0)");
4131MODULE_PARM_DESC(lbpws, "enable LBP, support WRITE SAME(16) with UNMAP bit (def=0)");
4132MODULE_PARM_DESC(lbpws10, "enable LBP, support WRITE SAME(10) with UNMAP bit (def=0)");
4133MODULE_PARM_DESC(lbprz, "unmapped blocks return 0 on read (def=1)");
4134MODULE_PARM_DESC(lowest_aligned, "lowest aligned lba (def=0)");
4135MODULE_PARM_DESC(max_luns, "number of LUNs per target to simulate(def=1)");
4136MODULE_PARM_DESC(max_queue, "max number of queued commands (1 to max(def))");
4137MODULE_PARM_DESC(ndelay, "response delay in nanoseconds (def=0 -> ignore)");
4138MODULE_PARM_DESC(no_lun_0, "no LU number 0 (def=0 -> have lun 0)");
4139MODULE_PARM_DESC(no_uld, "stop ULD (e.g. sd driver) attaching (def=0))");
4140MODULE_PARM_DESC(num_parts, "number of partitions(def=0)");
4141MODULE_PARM_DESC(num_tgts, "number of targets per host to simulate(def=1)");
4142MODULE_PARM_DESC(opt_blks, "optimal transfer length in block (def=64)");
4143MODULE_PARM_DESC(opts, "1->noise, 2->medium_err, 4->timeout, 8->recovered_err... (def=0)");
4144MODULE_PARM_DESC(physblk_exp, "physical block exponent (def=0)");
4145MODULE_PARM_DESC(ptype, "SCSI peripheral type(def=0[disk])");
4146MODULE_PARM_DESC(removable, "claim to have removable media (def=0)");
4147MODULE_PARM_DESC(scsi_level, "SCSI level to simulate(def=6[SPC-4])");
4148MODULE_PARM_DESC(sector_size, "logical block size in bytes (def=512)");
4149MODULE_PARM_DESC(strict, "stricter checks: reserved field in cdb (def=0)");
4150MODULE_PARM_DESC(unmap_alignment, "lowest aligned thin provisioning lba (def=0)");
4151MODULE_PARM_DESC(unmap_granularity, "thin provisioning granularity in blocks (def=1)");
4152MODULE_PARM_DESC(unmap_max_blocks, "max # of blocks can be unmapped in one cmd (def=0xffffffff)");
4153MODULE_PARM_DESC(unmap_max_desc, "max # of ranges that can be unmapped in one cmd (def=256)");
4154MODULE_PARM_DESC(virtual_gb, "virtual gigabyte (GiB) size (def=0 -> use dev_size_mb)");
4155MODULE_PARM_DESC(vpd_use_hostno, "0 -> dev ids ignore hostno (def=1 -> unique dev ids)");
4156MODULE_PARM_DESC(write_same_length, "Maximum blocks per WRITE SAME cmd (def=0xffff)");
4157
4158static char sdebug_info[256];
4159
4160static const char * scsi_debug_info(struct Scsi_Host * shp)
4161{
4162        sprintf(sdebug_info, "scsi_debug, version %s [%s], "
4163                "dev_size_mb=%d, opts=0x%x", SCSI_DEBUG_VERSION,
4164                scsi_debug_version_date, scsi_debug_dev_size_mb,
4165                scsi_debug_opts);
4166        return sdebug_info;
4167}
4168
4169/* 'echo <val> > /proc/scsi/scsi_debug/<host_id>' writes to opts */
4170static int scsi_debug_write_info(struct Scsi_Host *host, char *buffer, int length)
4171{
4172        char arr[16];
4173        int opts;
4174        int minLen = length > 15 ? 15 : length;
4175
4176        if (!capable(CAP_SYS_ADMIN) || !capable(CAP_SYS_RAWIO))
4177                return -EACCES;
4178        memcpy(arr, buffer, minLen);
4179        arr[minLen] = '\0';
4180        if (1 != sscanf(arr, "%d", &opts))
4181                return -EINVAL;
4182        scsi_debug_opts = opts;
4183        if (scsi_debug_every_nth != 0)
4184                atomic_set(&sdebug_cmnd_count, 0);
4185        return length;
4186}
4187
4188/* Output seen with 'cat /proc/scsi/scsi_debug/<host_id>'. It will be the
4189 * same for each scsi_debug host (if more than one). Some of the counters
4190 * output are not atomics so might be inaccurate in a busy system. */
4191static int scsi_debug_show_info(struct seq_file *m, struct Scsi_Host *host)
4192{
4193        int f, l;
4194        char b[32];
4195
4196        if (scsi_debug_every_nth > 0)
4197                snprintf(b, sizeof(b), " (curr:%d)",
4198                         ((SCSI_DEBUG_OPT_RARE_TSF & scsi_debug_opts) ?
4199                                atomic_read(&sdebug_a_tsf) :
4200                                atomic_read(&sdebug_cmnd_count)));
4201        else
4202                b[0] = '\0';
4203
4204        seq_printf(m, "scsi_debug adapter driver, version %s [%s]\n"
4205                "num_tgts=%d, shared (ram) size=%d MB, opts=0x%x, "
4206                "every_nth=%d%s\n"
4207                "delay=%d, ndelay=%d, max_luns=%d, q_completions=%d\n"
4208                "sector_size=%d bytes, cylinders=%d, heads=%d, sectors=%d\n"
4209                "command aborts=%d; RESETs: device=%d, target=%d, bus=%d, "
4210                "host=%d\ndix_reads=%d dix_writes=%d dif_errors=%d "
4211                "usec_in_jiffy=%lu\n",
4212                SCSI_DEBUG_VERSION, scsi_debug_version_date,
4213                scsi_debug_num_tgts, scsi_debug_dev_size_mb, scsi_debug_opts,
4214                scsi_debug_every_nth, b, scsi_debug_delay, scsi_debug_ndelay,
4215                scsi_debug_max_luns, atomic_read(&sdebug_completions),
4216                scsi_debug_sector_size, sdebug_cylinders_per, sdebug_heads,
4217                sdebug_sectors_per, num_aborts, num_dev_resets,
4218                num_target_resets, num_bus_resets, num_host_resets,
4219                dix_reads, dix_writes, dif_errors, TICK_NSEC / 1000);
4220
4221        f = find_first_bit(queued_in_use_bm, scsi_debug_max_queue);
4222        if (f != scsi_debug_max_queue) {
4223                l = find_last_bit(queued_in_use_bm, scsi_debug_max_queue);
4224                seq_printf(m, "   %s BUSY: first,last bits set: %d,%d\n",
4225                           "queued_in_use_bm", f, l);
4226        }
4227        return 0;
4228}
4229
4230static ssize_t delay_show(struct device_driver *ddp, char *buf)
4231{
4232        return scnprintf(buf, PAGE_SIZE, "%d\n", scsi_debug_delay);
4233}
4234/* Returns -EBUSY if delay is being changed and commands are queued */
4235static ssize_t delay_store(struct device_driver *ddp, const char *buf,
4236                           size_t count)
4237{
4238        int delay, res;
4239
4240        if ((count > 0) && (1 == sscanf(buf, "%d", &delay))) {
4241                res = count;
4242                if (scsi_debug_delay != delay) {
4243                        unsigned long iflags;
4244                        int k;
4245
4246                        spin_lock_irqsave(&queued_arr_lock, iflags);
4247                        k = find_first_bit(queued_in_use_bm,
4248                                           scsi_debug_max_queue);
4249                        if (k != scsi_debug_max_queue)
4250                                res = -EBUSY;   /* have queued commands */
4251                        else {
4252                                scsi_debug_delay = delay;
4253                                scsi_debug_ndelay = 0;
4254                        }
4255                        spin_unlock_irqrestore(&queued_arr_lock, iflags);
4256                }
4257                return res;
4258        }
4259        return -EINVAL;
4260}
4261static DRIVER_ATTR_RW(delay);
4262
4263static ssize_t ndelay_show(struct device_driver *ddp, char *buf)
4264{
4265        return scnprintf(buf, PAGE_SIZE, "%d\n", scsi_debug_ndelay);
4266}
4267/* Returns -EBUSY if ndelay is being changed and commands are queued */
4268/* If > 0 and accepted then scsi_debug_delay is set to DELAY_OVERRIDDEN */
4269static ssize_t ndelay_store(struct device_driver *ddp, const char *buf,
4270                           size_t count)
4271{
4272        unsigned long iflags;
4273        int ndelay, res, k;
4274
4275        if ((count > 0) && (1 == sscanf(buf, "%d", &ndelay)) &&
4276            (ndelay >= 0) && (ndelay < 1000000000)) {
4277                res = count;
4278                if (scsi_debug_ndelay != ndelay) {
4279                        spin_lock_irqsave(&queued_arr_lock, iflags);
4280                        k = find_first_bit(queued_in_use_bm,
4281                                           scsi_debug_max_queue);
4282                        if (k != scsi_debug_max_queue)
4283                                res = -EBUSY;   /* have queued commands */
4284                        else {
4285                                scsi_debug_ndelay = ndelay;
4286                                scsi_debug_delay = ndelay ? DELAY_OVERRIDDEN
4287                                                          : DEF_DELAY;
4288                        }
4289                        spin_unlock_irqrestore(&queued_arr_lock, iflags);
4290                }
4291                return res;
4292        }
4293        return -EINVAL;
4294}
4295static DRIVER_ATTR_RW(ndelay);
4296
4297static ssize_t opts_show(struct device_driver *ddp, char *buf)
4298{
4299        return scnprintf(buf, PAGE_SIZE, "0x%x\n", scsi_debug_opts);
4300}
4301
4302static ssize_t opts_store(struct device_driver *ddp, const char *buf,
4303                          size_t count)
4304{
4305        int opts;
4306        char work[20];
4307
4308        if (1 == sscanf(buf, "%10s", work)) {
4309                if (0 == strncasecmp(work,"0x", 2)) {
4310                        if (1 == sscanf(&work[2], "%x", &opts))
4311                                goto opts_done;
4312                } else {
4313                        if (1 == sscanf(work, "%d", &opts))
4314                                goto opts_done;
4315                }
4316        }
4317        return -EINVAL;
4318opts_done:
4319        scsi_debug_opts = opts;
4320        if (SCSI_DEBUG_OPT_RECOVERED_ERR & opts)
4321                sdebug_any_injecting_opt = true;
4322        else if (SCSI_DEBUG_OPT_TRANSPORT_ERR & opts)
4323                sdebug_any_injecting_opt = true;
4324        else if (SCSI_DEBUG_OPT_DIF_ERR & opts)
4325                sdebug_any_injecting_opt = true;
4326        else if (SCSI_DEBUG_OPT_DIX_ERR & opts)
4327                sdebug_any_injecting_opt = true;
4328        else if (SCSI_DEBUG_OPT_SHORT_TRANSFER & opts)
4329                sdebug_any_injecting_opt = true;
4330        atomic_set(&sdebug_cmnd_count, 0);
4331        atomic_set(&sdebug_a_tsf, 0);
4332        return count;
4333}
4334static DRIVER_ATTR_RW(opts);
4335
4336static ssize_t ptype_show(struct device_driver *ddp, char *buf)
4337{
4338        return scnprintf(buf, PAGE_SIZE, "%d\n", scsi_debug_ptype);
4339}
4340static ssize_t ptype_store(struct device_driver *ddp, const char *buf,
4341                           size_t count)
4342{
4343        int n;
4344
4345        if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
4346                scsi_debug_ptype = n;
4347                return count;
4348        }
4349        return -EINVAL;
4350}
4351static DRIVER_ATTR_RW(ptype);
4352
4353static ssize_t dsense_show(struct device_driver *ddp, char *buf)
4354{
4355        return scnprintf(buf, PAGE_SIZE, "%d\n", scsi_debug_dsense);
4356}
4357static ssize_t dsense_store(struct device_driver *ddp, const char *buf,
4358                            size_t count)
4359{
4360        int n;
4361
4362        if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
4363                scsi_debug_dsense = n;
4364                return count;
4365        }
4366        return -EINVAL;
4367}
4368static DRIVER_ATTR_RW(dsense);
4369
4370static ssize_t fake_rw_show(struct device_driver *ddp, char *buf)
4371{
4372        return scnprintf(buf, PAGE_SIZE, "%d\n", scsi_debug_fake_rw);
4373}
4374static ssize_t fake_rw_store(struct device_driver *ddp, const char *buf,
4375                             size_t count)
4376{
4377        int n;
4378
4379        if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
4380                n = (n > 0);
4381                scsi_debug_fake_rw = (scsi_debug_fake_rw > 0);
4382                if (scsi_debug_fake_rw != n) {
4383                        if ((0 == n) && (NULL == fake_storep)) {
4384                                unsigned long sz =
4385                                        (unsigned long)scsi_debug_dev_size_mb *
4386                                        1048576;
4387
4388                                fake_storep = vmalloc(sz);
4389                                if (NULL == fake_storep) {
4390                                        pr_err("%s: out of memory, 9\n",
4391                                               __func__);
4392                                        return -ENOMEM;
4393                                }
4394                                memset(fake_storep, 0, sz);
4395                        }
4396                        scsi_debug_fake_rw = n;
4397                }
4398                return count;
4399        }
4400        return -EINVAL;
4401}
4402static DRIVER_ATTR_RW(fake_rw);
4403
4404static ssize_t no_lun_0_show(struct device_driver *ddp, char *buf)
4405{
4406        return scnprintf(buf, PAGE_SIZE, "%d\n", scsi_debug_no_lun_0);
4407}
4408static ssize_t no_lun_0_store(struct device_driver *ddp, const char *buf,
4409                              size_t count)
4410{
4411        int n;
4412
4413        if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
4414                scsi_debug_no_lun_0 = n;
4415                return count;
4416        }
4417        return -EINVAL;
4418}
4419static DRIVER_ATTR_RW(no_lun_0);
4420
4421static ssize_t num_tgts_show(struct device_driver *ddp, char *buf)
4422{
4423        return scnprintf(buf, PAGE_SIZE, "%d\n", scsi_debug_num_tgts);
4424}
4425static ssize_t num_tgts_store(struct device_driver *ddp, const char *buf,
4426                              size_t count)
4427{
4428        int n;
4429
4430        if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
4431                scsi_debug_num_tgts = n;
4432                sdebug_max_tgts_luns();
4433                return count;
4434        }
4435        return -EINVAL;
4436}
4437static DRIVER_ATTR_RW(num_tgts);
4438
4439static ssize_t dev_size_mb_show(struct device_driver *ddp, char *buf)
4440{
4441        return scnprintf(buf, PAGE_SIZE, "%d\n", scsi_debug_dev_size_mb);
4442}
4443static DRIVER_ATTR_RO(dev_size_mb);
4444
4445static ssize_t num_parts_show(struct device_driver *ddp, char *buf)
4446{
4447        return scnprintf(buf, PAGE_SIZE, "%d\n", scsi_debug_num_parts);
4448}
4449static DRIVER_ATTR_RO(num_parts);
4450
4451static ssize_t every_nth_show(struct device_driver *ddp, char *buf)
4452{
4453        return scnprintf(buf, PAGE_SIZE, "%d\n", scsi_debug_every_nth);
4454}
4455static ssize_t every_nth_store(struct device_driver *ddp, const char *buf,
4456                               size_t count)
4457{
4458        int nth;
4459
4460        if ((count > 0) && (1 == sscanf(buf, "%d", &nth))) {
4461                scsi_debug_every_nth = nth;
4462                atomic_set(&sdebug_cmnd_count, 0);
4463                return count;
4464        }
4465        return -EINVAL;
4466}
4467static DRIVER_ATTR_RW(every_nth);
4468
4469static ssize_t max_luns_show(struct device_driver *ddp, char *buf)
4470{
4471        return scnprintf(buf, PAGE_SIZE, "%d\n", scsi_debug_max_luns);
4472}
4473static ssize_t max_luns_store(struct device_driver *ddp, const char *buf,
4474                              size_t count)
4475{
4476        int n;
4477        bool changed;
4478
4479        if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
4480                changed = (scsi_debug_max_luns != n);
4481                scsi_debug_max_luns = n;
4482                sdebug_max_tgts_luns();
4483                if (changed && (scsi_debug_scsi_level >= 5)) {  /* >= SPC-3 */
4484                        struct sdebug_host_info *sdhp;
4485                        struct sdebug_dev_info *dp;
4486
4487                        spin_lock(&sdebug_host_list_lock);
4488                        list_for_each_entry(sdhp, &sdebug_host_list,
4489                                            host_list) {
4490                                list_for_each_entry(dp, &sdhp->dev_info_list,
4491                                                    dev_list) {
4492                                        set_bit(SDEBUG_UA_LUNS_CHANGED,
4493                                                dp->uas_bm);
4494                                }
4495                        }
4496                        spin_unlock(&sdebug_host_list_lock);
4497                }
4498                return count;
4499        }
4500        return -EINVAL;
4501}
4502static DRIVER_ATTR_RW(max_luns);
4503
4504static ssize_t max_queue_show(struct device_driver *ddp, char *buf)
4505{
4506        return scnprintf(buf, PAGE_SIZE, "%d\n", scsi_debug_max_queue);
4507}
4508/* N.B. max_queue can be changed while there are queued commands. In flight
4509 * commands beyond the new max_queue will be completed. */
4510static ssize_t max_queue_store(struct device_driver *ddp, const char *buf,
4511                               size_t count)
4512{
4513        unsigned long iflags;
4514        int n, k;
4515
4516        if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n > 0) &&
4517            (n <= SCSI_DEBUG_CANQUEUE)) {
4518                spin_lock_irqsave(&queued_arr_lock, iflags);
4519                k = find_last_bit(queued_in_use_bm, SCSI_DEBUG_CANQUEUE);
4520                scsi_debug_max_queue = n;
4521                if (SCSI_DEBUG_CANQUEUE == k)
4522                        atomic_set(&retired_max_queue, 0);
4523                else if (k >= n)
4524                        atomic_set(&retired_max_queue, k + 1);
4525                else
4526                        atomic_set(&retired_max_queue, 0);
4527                spin_unlock_irqrestore(&queued_arr_lock, iflags);
4528                return count;
4529        }
4530        return -EINVAL;
4531}
4532static DRIVER_ATTR_RW(max_queue);
4533
4534static ssize_t no_uld_show(struct device_driver *ddp, char *buf)
4535{
4536        return scnprintf(buf, PAGE_SIZE, "%d\n", scsi_debug_no_uld);
4537}
4538static DRIVER_ATTR_RO(no_uld);
4539
4540static ssize_t scsi_level_show(struct device_driver *ddp, char *buf)
4541{
4542        return scnprintf(buf, PAGE_SIZE, "%d\n", scsi_debug_scsi_level);
4543}
4544static DRIVER_ATTR_RO(scsi_level);
4545
4546static ssize_t virtual_gb_show(struct device_driver *ddp, char *buf)
4547{
4548        return scnprintf(buf, PAGE_SIZE, "%d\n", scsi_debug_virtual_gb);
4549}
4550static ssize_t virtual_gb_store(struct device_driver *ddp, const char *buf,
4551                                size_t count)
4552{
4553        int n;
4554        bool changed;
4555
4556        if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
4557                changed = (scsi_debug_virtual_gb != n);
4558                scsi_debug_virtual_gb = n;
4559                sdebug_capacity = get_sdebug_capacity();
4560                if (changed) {
4561                        struct sdebug_host_info *sdhp;
4562                        struct sdebug_dev_info *dp;
4563
4564                        spin_lock(&sdebug_host_list_lock);
4565                        list_for_each_entry(sdhp, &sdebug_host_list,
4566                                            host_list) {
4567                                list_for_each_entry(dp, &sdhp->dev_info_list,
4568                                                    dev_list) {
4569                                        set_bit(SDEBUG_UA_CAPACITY_CHANGED,
4570                                                dp->uas_bm);
4571                                }
4572                        }
4573                        spin_unlock(&sdebug_host_list_lock);
4574                }
4575                return count;
4576        }
4577        return -EINVAL;
4578}
4579static DRIVER_ATTR_RW(virtual_gb);
4580
4581static ssize_t add_host_show(struct device_driver *ddp, char *buf)
4582{
4583        return scnprintf(buf, PAGE_SIZE, "%d\n", scsi_debug_add_host);
4584}
4585
4586static ssize_t add_host_store(struct device_driver *ddp, const char *buf,
4587                              size_t count)
4588{
4589        int delta_hosts;
4590
4591        if (sscanf(buf, "%d", &delta_hosts) != 1)
4592                return -EINVAL;
4593        if (delta_hosts > 0) {
4594                do {
4595                        sdebug_add_adapter();
4596                } while (--delta_hosts);
4597        } else if (delta_hosts < 0) {
4598                do {
4599                        sdebug_remove_adapter();
4600                } while (++delta_hosts);
4601        }
4602        return count;
4603}
4604static DRIVER_ATTR_RW(add_host);
4605
4606static ssize_t vpd_use_hostno_show(struct device_driver *ddp, char *buf)
4607{
4608        return scnprintf(buf, PAGE_SIZE, "%d\n", scsi_debug_vpd_use_hostno);
4609}
4610static ssize_t vpd_use_hostno_store(struct device_driver *ddp, const char *buf,
4611                                    size_t count)
4612{
4613        int n;
4614
4615        if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
4616                scsi_debug_vpd_use_hostno = n;
4617                return count;
4618        }
4619        return -EINVAL;
4620}
4621static DRIVER_ATTR_RW(vpd_use_hostno);
4622
4623static ssize_t sector_size_show(struct device_driver *ddp, char *buf)
4624{
4625        return scnprintf(buf, PAGE_SIZE, "%u\n", scsi_debug_sector_size);
4626}
4627static DRIVER_ATTR_RO(sector_size);
4628
4629static ssize_t dix_show(struct device_driver *ddp, char *buf)
4630{
4631        return scnprintf(buf, PAGE_SIZE, "%d\n", scsi_debug_dix);
4632}
4633static DRIVER_ATTR_RO(dix);
4634
4635static ssize_t dif_show(struct device_driver *ddp, char *buf)
4636{
4637        return scnprintf(buf, PAGE_SIZE, "%d\n", scsi_debug_dif);
4638}
4639static DRIVER_ATTR_RO(dif);
4640
4641static ssize_t guard_show(struct device_driver *ddp, char *buf)
4642{
4643        return scnprintf(buf, PAGE_SIZE, "%u\n", scsi_debug_guard);
4644}
4645static DRIVER_ATTR_RO(guard);
4646
4647static ssize_t ato_show(struct device_driver *ddp, char *buf)
4648{
4649        return scnprintf(buf, PAGE_SIZE, "%d\n", scsi_debug_ato);
4650}
4651static DRIVER_ATTR_RO(ato);
4652
4653static ssize_t map_show(struct device_driver *ddp, char *buf)
4654{
4655        ssize_t count;
4656
4657        if (!scsi_debug_lbp())
4658                return scnprintf(buf, PAGE_SIZE, "0-%u\n",
4659                                 sdebug_store_sectors);
4660
4661        count = scnprintf(buf, PAGE_SIZE - 1, "%*pbl",
4662                          (int)map_size, map_storep);
4663        buf[count++] = '\n';
4664        buf[count] = '\0';
4665
4666        return count;
4667}
4668static DRIVER_ATTR_RO(map);
4669
4670static ssize_t removable_show(struct device_driver *ddp, char *buf)
4671{
4672        return scnprintf(buf, PAGE_SIZE, "%d\n", scsi_debug_removable ? 1 : 0);
4673}
4674static ssize_t removable_store(struct device_driver *ddp, const char *buf,
4675                               size_t count)
4676{
4677        int n;
4678
4679        if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
4680                scsi_debug_removable = (n > 0);
4681                return count;
4682        }
4683        return -EINVAL;
4684}
4685static DRIVER_ATTR_RW(removable);
4686
4687static ssize_t host_lock_show(struct device_driver *ddp, char *buf)
4688{
4689        return scnprintf(buf, PAGE_SIZE, "%d\n", !!scsi_debug_host_lock);
4690}
4691/* Returns -EBUSY if host_lock is being changed and commands are queued */
4692static ssize_t host_lock_store(struct device_driver *ddp, const char *buf,
4693                               size_t count)
4694{
4695        int n, res;
4696
4697        if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
4698                bool new_host_lock = (n > 0);
4699
4700                res = count;
4701                if (new_host_lock != scsi_debug_host_lock) {
4702                        unsigned long iflags;
4703                        int k;
4704
4705                        spin_lock_irqsave(&queued_arr_lock, iflags);
4706                        k = find_first_bit(queued_in_use_bm,
4707                                           scsi_debug_max_queue);
4708                        if (k != scsi_debug_max_queue)
4709                                res = -EBUSY;   /* have queued commands */
4710                        else
4711                                scsi_debug_host_lock = new_host_lock;
4712                        spin_unlock_irqrestore(&queued_arr_lock, iflags);
4713                }
4714                return res;
4715        }
4716        return -EINVAL;
4717}
4718static DRIVER_ATTR_RW(host_lock);
4719
4720static ssize_t strict_show(struct device_driver *ddp, char *buf)
4721{
4722        return scnprintf(buf, PAGE_SIZE, "%d\n", !!scsi_debug_strict);
4723}
4724static ssize_t strict_store(struct device_driver *ddp, const char *buf,
4725                            size_t count)
4726{
4727        int n;
4728
4729        if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
4730                scsi_debug_strict = (n > 0);
4731                return count;
4732        }
4733        return -EINVAL;
4734}
4735static DRIVER_ATTR_RW(strict);
4736
4737
4738/* Note: The following array creates attribute files in the
4739   /sys/bus/pseudo/drivers/scsi_debug directory. The advantage of these
4740   files (over those found in the /sys/module/scsi_debug/parameters
4741   directory) is that auxiliary actions can be triggered when an attribute
4742   is changed. For example see: sdebug_add_host_store() above.
4743 */
4744
4745static struct attribute *sdebug_drv_attrs[] = {
4746        &driver_attr_delay.attr,
4747        &driver_attr_opts.attr,
4748        &driver_attr_ptype.attr,
4749        &driver_attr_dsense.attr,
4750        &driver_attr_fake_rw.attr,
4751        &driver_attr_no_lun_0.attr,
4752        &driver_attr_num_tgts.attr,
4753        &driver_attr_dev_size_mb.attr,
4754        &driver_attr_num_parts.attr,
4755        &driver_attr_every_nth.attr,
4756        &driver_attr_max_luns.attr,
4757        &driver_attr_max_queue.attr,
4758        &driver_attr_no_uld.attr,
4759        &driver_attr_scsi_level.attr,
4760        &driver_attr_virtual_gb.attr,
4761        &driver_attr_add_host.attr,
4762        &driver_attr_vpd_use_hostno.attr,
4763        &driver_attr_sector_size.attr,
4764        &driver_attr_dix.attr,
4765        &driver_attr_dif.attr,
4766        &driver_attr_guard.attr,
4767        &driver_attr_ato.attr,
4768        &driver_attr_map.attr,
4769        &driver_attr_removable.attr,
4770        &driver_attr_host_lock.attr,
4771        &driver_attr_ndelay.attr,
4772        &driver_attr_strict.attr,
4773        NULL,
4774};
4775ATTRIBUTE_GROUPS(sdebug_drv);
4776
4777static struct device *pseudo_primary;
4778
4779static int __init scsi_debug_init(void)
4780{
4781        unsigned long sz;
4782        int host_to_add;
4783        int k;
4784        int ret;
4785
4786        atomic_set(&sdebug_cmnd_count, 0);
4787        atomic_set(&sdebug_completions, 0);
4788        atomic_set(&retired_max_queue, 0);
4789
4790        if (scsi_debug_ndelay >= 1000000000) {
4791                pr_warn("%s: ndelay must be less than 1 second, ignored\n",
4792                        __func__);
4793                scsi_debug_ndelay = 0;
4794        } else if (scsi_debug_ndelay > 0)
4795                scsi_debug_delay = DELAY_OVERRIDDEN;
4796
4797        switch (scsi_debug_sector_size) {
4798        case  512:
4799        case 1024:
4800        case 2048:
4801        case 4096:
4802                break;
4803        default:
4804                pr_err("%s: invalid sector_size %d\n", __func__,
4805                       scsi_debug_sector_size);
4806                return -EINVAL;
4807        }
4808
4809        switch (scsi_debug_dif) {
4810
4811        case SD_DIF_TYPE0_PROTECTION:
4812        case SD_DIF_TYPE1_PROTECTION:
4813        case SD_DIF_TYPE2_PROTECTION:
4814        case SD_DIF_TYPE3_PROTECTION:
4815                break;
4816
4817        default:
4818                pr_err("%s: dif must be 0, 1, 2 or 3\n", __func__);
4819                return -EINVAL;
4820        }
4821
4822        if (scsi_debug_guard > 1) {
4823                pr_err("%s: guard must be 0 or 1\n", __func__);
4824                return -EINVAL;
4825        }
4826
4827        if (scsi_debug_ato > 1) {
4828                pr_err("%s: ato must be 0 or 1\n", __func__);
4829                return -EINVAL;
4830        }
4831
4832        if (scsi_debug_physblk_exp > 15) {
4833                pr_err("%s: invalid physblk_exp %u\n", __func__,
4834                       scsi_debug_physblk_exp);
4835                return -EINVAL;
4836        }
4837
4838        if (scsi_debug_lowest_aligned > 0x3fff) {
4839                pr_err("%s: lowest_aligned too big: %u\n", __func__,
4840                       scsi_debug_lowest_aligned);
4841                return -EINVAL;
4842        }
4843
4844        if (scsi_debug_dev_size_mb < 1)
4845                scsi_debug_dev_size_mb = 1;  /* force minimum 1 MB ramdisk */
4846        sz = (unsigned long)scsi_debug_dev_size_mb * 1048576;
4847        sdebug_store_sectors = sz / scsi_debug_sector_size;
4848        sdebug_capacity = get_sdebug_capacity();
4849
4850        /* play around with geometry, don't waste too much on track 0 */
4851        sdebug_heads = 8;
4852        sdebug_sectors_per = 32;
4853        if (scsi_debug_dev_size_mb >= 16)
4854                sdebug_heads = 32;
4855        else if (scsi_debug_dev_size_mb >= 256)
4856                sdebug_heads = 64;
4857        sdebug_cylinders_per = (unsigned long)sdebug_capacity /
4858                               (sdebug_sectors_per * sdebug_heads);
4859        if (sdebug_cylinders_per >= 1024) {
4860                /* other LLDs do this; implies >= 1GB ram disk ... */
4861                sdebug_heads = 255;
4862                sdebug_sectors_per = 63;
4863                sdebug_cylinders_per = (unsigned long)sdebug_capacity /
4864                               (sdebug_sectors_per * sdebug_heads);
4865        }
4866
4867        if (0 == scsi_debug_fake_rw) {
4868                fake_storep = vmalloc(sz);
4869                if (NULL == fake_storep) {
4870                        pr_err("%s: out of memory, 1\n", __func__);
4871                        return -ENOMEM;
4872                }
4873                memset(fake_storep, 0, sz);
4874                if (scsi_debug_num_parts > 0)
4875                        sdebug_build_parts(fake_storep, sz);
4876        }
4877
4878        if (scsi_debug_dix) {
4879                int dif_size;
4880
4881                dif_size = sdebug_store_sectors * sizeof(struct sd_dif_tuple);
4882                dif_storep = vmalloc(dif_size);
4883
4884                pr_err("%s: dif_storep %u bytes @ %p\n", __func__, dif_size,
4885                        dif_storep);
4886
4887                if (dif_storep == NULL) {
4888                        pr_err("%s: out of mem. (DIX)\n", __func__);
4889                        ret = -ENOMEM;
4890                        goto free_vm;
4891                }
4892
4893                memset(dif_storep, 0xff, dif_size);
4894        }
4895
4896        /* Logical Block Provisioning */
4897        if (scsi_debug_lbp()) {
4898                scsi_debug_unmap_max_blocks =
4899                        clamp(scsi_debug_unmap_max_blocks, 0U, 0xffffffffU);
4900
4901                scsi_debug_unmap_max_desc =
4902                        clamp(scsi_debug_unmap_max_desc, 0U, 256U);
4903
4904                scsi_debug_unmap_granularity =
4905                        clamp(scsi_debug_unmap_granularity, 1U, 0xffffffffU);
4906
4907                if (scsi_debug_unmap_alignment &&
4908                    scsi_debug_unmap_granularity <=
4909                    scsi_debug_unmap_alignment) {
4910                        pr_err("%s: ERR: unmap_granularity <= unmap_alignment\n",
4911                               __func__);
4912                        return -EINVAL;
4913                }
4914
4915                map_size = lba_to_map_index(sdebug_store_sectors - 1) + 1;
4916                map_storep = vmalloc(BITS_TO_LONGS(map_size) * sizeof(long));
4917
4918                pr_info("%s: %lu provisioning blocks\n", __func__, map_size);
4919
4920                if (map_storep == NULL) {
4921                        pr_err("%s: out of mem. (MAP)\n", __func__);
4922                        ret = -ENOMEM;
4923                        goto free_vm;
4924                }
4925
4926                bitmap_zero(map_storep, map_size);
4927
4928                /* Map first 1KB for partition table */
4929                if (scsi_debug_num_parts)
4930                        map_region(0, 2);
4931        }
4932
4933        pseudo_primary = root_device_register("pseudo_0");
4934        if (IS_ERR(pseudo_primary)) {
4935                pr_warn("%s: root_device_register() error\n", __func__);
4936                ret = PTR_ERR(pseudo_primary);
4937                goto free_vm;
4938        }
4939        ret = bus_register(&pseudo_lld_bus);
4940        if (ret < 0) {
4941                pr_warn("%s: bus_register error: %d\n", __func__, ret);
4942                goto dev_unreg;
4943        }
4944        ret = driver_register(&sdebug_driverfs_driver);
4945        if (ret < 0) {
4946                pr_warn("%s: driver_register error: %d\n", __func__, ret);
4947                goto bus_unreg;
4948        }
4949
4950        host_to_add = scsi_debug_add_host;
4951        scsi_debug_add_host = 0;
4952
4953        for (k = 0; k < host_to_add; k++) {
4954                if (sdebug_add_adapter()) {
4955                        pr_err("%s: sdebug_add_adapter failed k=%d\n",
4956                                __func__, k);
4957                        break;
4958                }
4959        }
4960
4961        if (SCSI_DEBUG_OPT_NOISE & scsi_debug_opts) {
4962                pr_info("%s: built %d host(s)\n", __func__,
4963                        scsi_debug_add_host);
4964        }
4965        return 0;
4966
4967bus_unreg:
4968        bus_unregister(&pseudo_lld_bus);
4969dev_unreg:
4970        root_device_unregister(pseudo_primary);
4971free_vm:
4972        if (map_storep)
4973                vfree(map_storep);
4974        if (dif_storep)
4975                vfree(dif_storep);
4976        vfree(fake_storep);
4977
4978        return ret;
4979}
4980
4981static void __exit scsi_debug_exit(void)
4982{
4983        int k = scsi_debug_add_host;
4984
4985        stop_all_queued();
4986        free_all_queued();
4987        for (; k; k--)
4988                sdebug_remove_adapter();
4989        driver_unregister(&sdebug_driverfs_driver);
4990        bus_unregister(&pseudo_lld_bus);
4991        root_device_unregister(pseudo_primary);
4992
4993        if (dif_storep)
4994                vfree(dif_storep);
4995
4996        vfree(fake_storep);
4997}
4998
4999device_initcall(scsi_debug_init);
5000module_exit(scsi_debug_exit);
5001
5002static void sdebug_release_adapter(struct device * dev)
5003{
5004        struct sdebug_host_info *sdbg_host;
5005
5006        sdbg_host = to_sdebug_host(dev);
5007        kfree(sdbg_host);
5008}
5009
5010static int sdebug_add_adapter(void)
5011{
5012        int k, devs_per_host;
5013        int error = 0;
5014        struct sdebug_host_info *sdbg_host;
5015        struct sdebug_dev_info *sdbg_devinfo, *tmp;
5016
5017        sdbg_host = kzalloc(sizeof(*sdbg_host),GFP_KERNEL);
5018        if (NULL == sdbg_host) {
5019                printk(KERN_ERR "%s: out of memory at line %d\n",
5020                       __func__, __LINE__);
5021                return -ENOMEM;
5022        }
5023
5024        INIT_LIST_HEAD(&sdbg_host->dev_info_list);
5025
5026        devs_per_host = scsi_debug_num_tgts * scsi_debug_max_luns;
5027        for (k = 0; k < devs_per_host; k++) {
5028                sdbg_devinfo = sdebug_device_create(sdbg_host, GFP_KERNEL);
5029                if (!sdbg_devinfo) {
5030                        printk(KERN_ERR "%s: out of memory at line %d\n",
5031                               __func__, __LINE__);
5032                        error = -ENOMEM;
5033                        goto clean;
5034                }
5035        }
5036
5037        spin_lock(&sdebug_host_list_lock);
5038        list_add_tail(&sdbg_host->host_list, &sdebug_host_list);
5039        spin_unlock(&sdebug_host_list_lock);
5040
5041        sdbg_host->dev.bus = &pseudo_lld_bus;
5042        sdbg_host->dev.parent = pseudo_primary;
5043        sdbg_host->dev.release = &sdebug_release_adapter;
5044        dev_set_name(&sdbg_host->dev, "adapter%d", scsi_debug_add_host);
5045
5046        error = device_register(&sdbg_host->dev);
5047
5048        if (error)
5049                goto clean;
5050
5051        ++scsi_debug_add_host;
5052        return error;
5053
5054clean:
5055        list_for_each_entry_safe(sdbg_devinfo, tmp, &sdbg_host->dev_info_list,
5056                                 dev_list) {
5057                list_del(&sdbg_devinfo->dev_list);
5058                kfree(sdbg_devinfo);
5059        }
5060
5061        kfree(sdbg_host);
5062        return error;
5063}
5064
5065static void sdebug_remove_adapter(void)
5066{
5067        struct sdebug_host_info * sdbg_host = NULL;
5068
5069        spin_lock(&sdebug_host_list_lock);
5070        if (!list_empty(&sdebug_host_list)) {
5071                sdbg_host = list_entry(sdebug_host_list.prev,
5072                                       struct sdebug_host_info, host_list);
5073                list_del(&sdbg_host->host_list);
5074        }
5075        spin_unlock(&sdebug_host_list_lock);
5076
5077        if (!sdbg_host)
5078                return;
5079
5080        device_unregister(&sdbg_host->dev);
5081        --scsi_debug_add_host;
5082}
5083
5084static int
5085sdebug_change_qdepth(struct scsi_device *sdev, int qdepth)
5086{
5087        int num_in_q = 0;
5088        unsigned long iflags;
5089        struct sdebug_dev_info *devip;
5090
5091        spin_lock_irqsave(&queued_arr_lock, iflags);
5092        devip = (struct sdebug_dev_info *)sdev->hostdata;
5093        if (NULL == devip) {
5094                spin_unlock_irqrestore(&queued_arr_lock, iflags);
5095                return  -ENODEV;
5096        }
5097        num_in_q = atomic_read(&devip->num_in_q);
5098        spin_unlock_irqrestore(&queued_arr_lock, iflags);
5099
5100        if (qdepth < 1)
5101                qdepth = 1;
5102        /* allow to exceed max host queued_arr elements for testing */
5103        if (qdepth > SCSI_DEBUG_CANQUEUE + 10)
5104                qdepth = SCSI_DEBUG_CANQUEUE + 10;
5105        scsi_change_queue_depth(sdev, qdepth);
5106
5107        if (SCSI_DEBUG_OPT_Q_NOISE & scsi_debug_opts) {
5108                sdev_printk(KERN_INFO, sdev,
5109                            "%s: qdepth=%d, num_in_q=%d\n",
5110                            __func__, qdepth, num_in_q);
5111        }
5112        return sdev->queue_depth;
5113}
5114
5115static int
5116check_inject(struct scsi_cmnd *scp)
5117{
5118        struct sdebug_scmd_extra_t *ep = scsi_cmd_priv(scp);
5119
5120        memset(ep, 0, sizeof(struct sdebug_scmd_extra_t));
5121
5122        if (atomic_inc_return(&sdebug_cmnd_count) >=
5123            abs(scsi_debug_every_nth)) {
5124                atomic_set(&sdebug_cmnd_count, 0);
5125                if (scsi_debug_every_nth < -1)
5126                        scsi_debug_every_nth = -1;
5127                if (SCSI_DEBUG_OPT_TIMEOUT & scsi_debug_opts)
5128                        return 1; /* ignore command causing timeout */
5129                else if (SCSI_DEBUG_OPT_MAC_TIMEOUT & scsi_debug_opts &&
5130                         scsi_medium_access_command(scp))
5131                        return 1; /* time out reads and writes */
5132                if (sdebug_any_injecting_opt) {
5133                        int opts = scsi_debug_opts;
5134
5135                        if (SCSI_DEBUG_OPT_RECOVERED_ERR & opts)
5136                                ep->inj_recovered = true;
5137                        else if (SCSI_DEBUG_OPT_TRANSPORT_ERR & opts)
5138                                ep->inj_transport = true;
5139                        else if (SCSI_DEBUG_OPT_DIF_ERR & opts)
5140                                ep->inj_dif = true;
5141                        else if (SCSI_DEBUG_OPT_DIX_ERR & opts)
5142                                ep->inj_dix = true;
5143                        else if (SCSI_DEBUG_OPT_SHORT_TRANSFER & opts)
5144                                ep->inj_short = true;
5145                }
5146        }
5147        return 0;
5148}
5149
5150static int
5151scsi_debug_queuecommand(struct scsi_cmnd *scp)
5152{
5153        u8 sdeb_i;
5154        struct scsi_device *sdp = scp->device;
5155        const struct opcode_info_t *oip;
5156        const struct opcode_info_t *r_oip;
5157        struct sdebug_dev_info *devip;
5158        u8 *cmd = scp->cmnd;
5159        int (*r_pfp)(struct scsi_cmnd *, struct sdebug_dev_info *);
5160        int k, na;
5161        int errsts = 0;
5162        int errsts_no_connect = DID_NO_CONNECT << 16;
5163        u32 flags;
5164        u16 sa;
5165        u8 opcode = cmd[0];
5166        bool has_wlun_rl;
5167        bool debug = !!(SCSI_DEBUG_OPT_NOISE & scsi_debug_opts);
5168
5169        scsi_set_resid(scp, 0);
5170        if (debug && !(SCSI_DEBUG_OPT_NO_CDB_NOISE & scsi_debug_opts)) {
5171                char b[120];
5172                int n, len, sb;
5173
5174                len = scp->cmd_len;
5175                sb = (int)sizeof(b);
5176                if (len > 32)
5177                        strcpy(b, "too long, over 32 bytes");
5178                else {
5179                        for (k = 0, n = 0; k < len && n < sb; ++k)
5180                                n += scnprintf(b + n, sb - n, "%02x ",
5181                                               (u32)cmd[k]);
5182                }
5183                sdev_printk(KERN_INFO, sdp, "%s: cmd %s\n", my_name, b);
5184        }
5185        has_wlun_rl = (sdp->lun == SAM2_WLUN_REPORT_LUNS);
5186        if ((sdp->lun >= scsi_debug_max_luns) && !has_wlun_rl)
5187                return schedule_resp(scp, NULL, errsts_no_connect, 0);
5188
5189        sdeb_i = opcode_ind_arr[opcode];        /* fully mapped */
5190        oip = &opcode_info_arr[sdeb_i];         /* safe if table consistent */
5191        devip = (struct sdebug_dev_info *)sdp->hostdata;
5192        if (!devip) {
5193                devip = devInfoReg(sdp);
5194                if (NULL == devip)
5195                        return schedule_resp(scp, NULL, errsts_no_connect, 0);
5196        }
5197        na = oip->num_attached;
5198        r_pfp = oip->pfp;
5199        if (na) {       /* multiple commands with this opcode */
5200                r_oip = oip;
5201                if (FF_SA & r_oip->flags) {
5202                        if (F_SA_LOW & oip->flags)
5203                                sa = 0x1f & cmd[1];
5204                        else
5205                                sa = get_unaligned_be16(cmd + 8);
5206                        for (k = 0; k <= na; oip = r_oip->arrp + k++) {
5207                                if (opcode == oip->opcode && sa == oip->sa)
5208                                        break;
5209                        }
5210                } else {   /* since no service action only check opcode */
5211                        for (k = 0; k <= na; oip = r_oip->arrp + k++) {
5212                                if (opcode == oip->opcode)
5213                                        break;
5214                        }
5215                }
5216                if (k > na) {
5217                        if (F_SA_LOW & r_oip->flags)
5218                                mk_sense_invalid_fld(scp, SDEB_IN_CDB, 1, 4);
5219                        else if (F_SA_HIGH & r_oip->flags)
5220                                mk_sense_invalid_fld(scp, SDEB_IN_CDB, 8, 7);
5221                        else
5222                                mk_sense_invalid_opcode(scp);
5223                        goto check_cond;
5224                }
5225        }       /* else (when na==0) we assume the oip is a match */
5226        flags = oip->flags;
5227        if (F_INV_OP & flags) {
5228                mk_sense_invalid_opcode(scp);
5229                goto check_cond;
5230        }
5231        if (has_wlun_rl && !(F_RL_WLUN_OK & flags)) {
5232                if (debug)
5233                        sdev_printk(KERN_INFO, sdp, "scsi_debug: Opcode: "
5234                                    "0x%x not supported for wlun\n", opcode);
5235                mk_sense_invalid_opcode(scp);
5236                goto check_cond;
5237        }
5238        if (scsi_debug_strict) {        /* check cdb against mask */
5239                u8 rem;
5240                int j;
5241
5242                for (k = 1; k < oip->len_mask[0] && k < 16; ++k) {
5243                        rem = ~oip->len_mask[k] & cmd[k];
5244                        if (rem) {
5245                                for (j = 7; j >= 0; --j, rem <<= 1) {
5246                                        if (0x80 & rem)
5247                                                break;
5248                                }
5249                                mk_sense_invalid_fld(scp, SDEB_IN_CDB, k, j);
5250                                goto check_cond;
5251                        }
5252                }
5253        }
5254        if (!(F_SKIP_UA & flags) &&
5255            SDEBUG_NUM_UAS != find_first_bit(devip->uas_bm, SDEBUG_NUM_UAS)) {
5256                errsts = check_readiness(scp, UAS_ONLY, devip);
5257                if (errsts)
5258                        goto check_cond;
5259        }
5260        if ((F_M_ACCESS & flags) && devip->stopped) {
5261                mk_sense_buffer(scp, NOT_READY, LOGICAL_UNIT_NOT_READY, 0x2);
5262                if (debug)
5263                        sdev_printk(KERN_INFO, sdp, "%s reports: Not ready: "
5264                                    "%s\n", my_name, "initializing command "
5265                                    "required");
5266                errsts = check_condition_result;
5267                goto fini;
5268        }
5269        if (scsi_debug_fake_rw && (F_FAKE_RW & flags))
5270                goto fini;
5271        if (scsi_debug_every_nth) {
5272                if (check_inject(scp))
5273                        return 0;       /* ignore command: make trouble */
5274        }
5275        if (oip->pfp)   /* if this command has a resp_* function, call it */
5276                errsts = oip->pfp(scp, devip);
5277        else if (r_pfp) /* if leaf function ptr NULL, try the root's */
5278                errsts = r_pfp(scp, devip);
5279
5280fini:
5281        return schedule_resp(scp, devip, errsts,
5282                             ((F_DELAY_OVERR & flags) ? 0 : scsi_debug_delay));
5283check_cond:
5284        return schedule_resp(scp, devip, check_condition_result, 0);
5285}
5286
5287static int
5288sdebug_queuecommand_lock_or_not(struct Scsi_Host *shost, struct scsi_cmnd *cmd)
5289{
5290        if (scsi_debug_host_lock) {
5291                unsigned long iflags;
5292                int rc;
5293
5294                spin_lock_irqsave(shost->host_lock, iflags);
5295                rc = scsi_debug_queuecommand(cmd);
5296                spin_unlock_irqrestore(shost->host_lock, iflags);
5297                return rc;
5298        } else
5299                return scsi_debug_queuecommand(cmd);
5300}
5301
5302static struct scsi_host_template sdebug_driver_template = {
5303        .show_info =            scsi_debug_show_info,
5304        .write_info =           scsi_debug_write_info,
5305        .proc_name =            sdebug_proc_name,
5306        .name =                 "SCSI DEBUG",
5307        .info =                 scsi_debug_info,
5308        .slave_alloc =          scsi_debug_slave_alloc,
5309        .slave_configure =      scsi_debug_slave_configure,
5310        .slave_destroy =        scsi_debug_slave_destroy,
5311        .ioctl =                scsi_debug_ioctl,
5312        .queuecommand =         sdebug_queuecommand_lock_or_not,
5313        .change_queue_depth =   sdebug_change_qdepth,
5314        .eh_abort_handler =     scsi_debug_abort,
5315        .eh_device_reset_handler = scsi_debug_device_reset,
5316        .eh_target_reset_handler = scsi_debug_target_reset,
5317        .eh_bus_reset_handler = scsi_debug_bus_reset,
5318        .eh_host_reset_handler = scsi_debug_host_reset,
5319        .can_queue =            SCSI_DEBUG_CANQUEUE,
5320        .this_id =              7,
5321        .sg_tablesize =         SCSI_MAX_SG_CHAIN_SEGMENTS,
5322        .cmd_per_lun =          DEF_CMD_PER_LUN,
5323        .max_sectors =          -1U,
5324        .use_clustering =       DISABLE_CLUSTERING,
5325        .module =               THIS_MODULE,
5326        .track_queue_depth =    1,
5327        .cmd_size =             sizeof(struct sdebug_scmd_extra_t),
5328};
5329
5330static int sdebug_driver_probe(struct device * dev)
5331{
5332        int error = 0;
5333        int opts;
5334        struct sdebug_host_info *sdbg_host;
5335        struct Scsi_Host *hpnt;
5336        int host_prot;
5337
5338        sdbg_host = to_sdebug_host(dev);
5339
5340        sdebug_driver_template.can_queue = scsi_debug_max_queue;
5341        if (scsi_debug_clustering)
5342                sdebug_driver_template.use_clustering = ENABLE_CLUSTERING;
5343        hpnt = scsi_host_alloc(&sdebug_driver_template, sizeof(sdbg_host));
5344        if (NULL == hpnt) {
5345                pr_err("%s: scsi_host_alloc failed\n", __func__);
5346                error = -ENODEV;
5347                return error;
5348        }
5349
5350        sdbg_host->shost = hpnt;
5351        *((struct sdebug_host_info **)hpnt->hostdata) = sdbg_host;
5352        if ((hpnt->this_id >= 0) && (scsi_debug_num_tgts > hpnt->this_id))
5353                hpnt->max_id = scsi_debug_num_tgts + 1;
5354        else
5355                hpnt->max_id = scsi_debug_num_tgts;
5356        hpnt->max_lun = SAM2_WLUN_REPORT_LUNS;  /* = scsi_debug_max_luns; */
5357
5358        host_prot = 0;
5359
5360        switch (scsi_debug_dif) {
5361
5362        case SD_DIF_TYPE1_PROTECTION:
5363                host_prot = SHOST_DIF_TYPE1_PROTECTION;
5364                if (scsi_debug_dix)
5365                        host_prot |= SHOST_DIX_TYPE1_PROTECTION;
5366                break;
5367
5368        case SD_DIF_TYPE2_PROTECTION:
5369                host_prot = SHOST_DIF_TYPE2_PROTECTION;
5370                if (scsi_debug_dix)
5371                        host_prot |= SHOST_DIX_TYPE2_PROTECTION;
5372                break;
5373
5374        case SD_DIF_TYPE3_PROTECTION:
5375                host_prot = SHOST_DIF_TYPE3_PROTECTION;
5376                if (scsi_debug_dix)
5377                        host_prot |= SHOST_DIX_TYPE3_PROTECTION;
5378                break;
5379
5380        default:
5381                if (scsi_debug_dix)
5382                        host_prot |= SHOST_DIX_TYPE0_PROTECTION;
5383                break;
5384        }
5385
5386        scsi_host_set_prot(hpnt, host_prot);
5387
5388        printk(KERN_INFO "scsi_debug: host protection%s%s%s%s%s%s%s\n",
5389               (host_prot & SHOST_DIF_TYPE1_PROTECTION) ? " DIF1" : "",
5390               (host_prot & SHOST_DIF_TYPE2_PROTECTION) ? " DIF2" : "",
5391               (host_prot & SHOST_DIF_TYPE3_PROTECTION) ? " DIF3" : "",
5392               (host_prot & SHOST_DIX_TYPE0_PROTECTION) ? " DIX0" : "",
5393               (host_prot & SHOST_DIX_TYPE1_PROTECTION) ? " DIX1" : "",
5394               (host_prot & SHOST_DIX_TYPE2_PROTECTION) ? " DIX2" : "",
5395               (host_prot & SHOST_DIX_TYPE3_PROTECTION) ? " DIX3" : "");
5396
5397        if (scsi_debug_guard == 1)
5398                scsi_host_set_guard(hpnt, SHOST_DIX_GUARD_IP);
5399        else
5400                scsi_host_set_guard(hpnt, SHOST_DIX_GUARD_CRC);
5401
5402        opts = scsi_debug_opts;
5403        if (SCSI_DEBUG_OPT_RECOVERED_ERR & opts)
5404                sdebug_any_injecting_opt = true;
5405        else if (SCSI_DEBUG_OPT_TRANSPORT_ERR & opts)
5406                sdebug_any_injecting_opt = true;
5407        else if (SCSI_DEBUG_OPT_DIF_ERR & opts)
5408                sdebug_any_injecting_opt = true;
5409        else if (SCSI_DEBUG_OPT_DIX_ERR & opts)
5410                sdebug_any_injecting_opt = true;
5411        else if (SCSI_DEBUG_OPT_SHORT_TRANSFER & opts)
5412                sdebug_any_injecting_opt = true;
5413
5414        error = scsi_add_host(hpnt, &sdbg_host->dev);
5415        if (error) {
5416                printk(KERN_ERR "%s: scsi_add_host failed\n", __func__);
5417                error = -ENODEV;
5418                scsi_host_put(hpnt);
5419        } else
5420                scsi_scan_host(hpnt);
5421
5422        return error;
5423}
5424
5425static int sdebug_driver_remove(struct device * dev)
5426{
5427        struct sdebug_host_info *sdbg_host;
5428        struct sdebug_dev_info *sdbg_devinfo, *tmp;
5429
5430        sdbg_host = to_sdebug_host(dev);
5431
5432        if (!sdbg_host) {
5433                printk(KERN_ERR "%s: Unable to locate host info\n",
5434                       __func__);
5435                return -ENODEV;
5436        }
5437
5438        scsi_remove_host(sdbg_host->shost);
5439
5440        list_for_each_entry_safe(sdbg_devinfo, tmp, &sdbg_host->dev_info_list,
5441                                 dev_list) {
5442                list_del(&sdbg_devinfo->dev_list);
5443                kfree(sdbg_devinfo);
5444        }
5445
5446        scsi_host_put(sdbg_host->shost);
5447        return 0;
5448}
5449
5450static int pseudo_lld_bus_match(struct device *dev,
5451                                struct device_driver *dev_driver)
5452{
5453        return 1;
5454}
5455
5456static struct bus_type pseudo_lld_bus = {
5457        .name = "pseudo",
5458        .match = pseudo_lld_bus_match,
5459        .probe = sdebug_driver_probe,
5460        .remove = sdebug_driver_remove,
5461        .drv_groups = sdebug_drv_groups,
5462};
5463