]> git.karo-electronics.de Git - karo-tx-linux.git/blob - drivers/scsi/scsi_debug.c
Merge tag 'scsi-misc' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi...
[karo-tx-linux.git] / drivers / scsi / scsi_debug.c
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
46 #include <net/checksum.h>
47
48 #include <asm/unaligned.h>
49
50 #include <scsi/scsi.h>
51 #include <scsi/scsi_cmnd.h>
52 #include <scsi/scsi_device.h>
53 #include <scsi/scsi_host.h>
54 #include <scsi/scsicam.h>
55 #include <scsi/scsi_eh.h>
56 #include <scsi/scsi_dbg.h>
57
58 #include "sd.h"
59 #include "scsi_logging.h"
60
61 #define SCSI_DEBUG_VERSION "1.82"
62 static const char * scsi_debug_version_date = "20100324";
63
64 /* Additional Sense Code (ASC) */
65 #define NO_ADDITIONAL_SENSE 0x0
66 #define LOGICAL_UNIT_NOT_READY 0x4
67 #define UNRECOVERED_READ_ERR 0x11
68 #define PARAMETER_LIST_LENGTH_ERR 0x1a
69 #define INVALID_OPCODE 0x20
70 #define ADDR_OUT_OF_RANGE 0x21
71 #define INVALID_COMMAND_OPCODE 0x20
72 #define INVALID_FIELD_IN_CDB 0x24
73 #define INVALID_FIELD_IN_PARAM_LIST 0x26
74 #define POWERON_RESET 0x29
75 #define SAVING_PARAMS_UNSUP 0x39
76 #define TRANSPORT_PROBLEM 0x4b
77 #define THRESHOLD_EXCEEDED 0x5d
78 #define LOW_POWER_COND_ON 0x5e
79
80 /* Additional Sense Code Qualifier (ASCQ) */
81 #define ACK_NAK_TO 0x3
82
83 #define SDEBUG_TAGGED_QUEUING 0 /* 0 | MSG_SIMPLE_TAG | MSG_ORDERED_TAG */
84
85 /* Default values for driver parameters */
86 #define DEF_NUM_HOST   1
87 #define DEF_NUM_TGTS   1
88 #define DEF_MAX_LUNS   1
89 /* With these defaults, this driver will make 1 host with 1 target
90  * (id 0) containing 1 logical unit (lun 0). That is 1 device.
91  */
92 #define DEF_ATO 1
93 #define DEF_DELAY   1
94 #define DEF_DEV_SIZE_MB   8
95 #define DEF_DIF 0
96 #define DEF_DIX 0
97 #define DEF_D_SENSE   0
98 #define DEF_EVERY_NTH   0
99 #define DEF_FAKE_RW     0
100 #define DEF_GUARD 0
101 #define DEF_LBPU 0
102 #define DEF_LBPWS 0
103 #define DEF_LBPWS10 0
104 #define DEF_LBPRZ 1
105 #define DEF_LOWEST_ALIGNED 0
106 #define DEF_NO_LUN_0   0
107 #define DEF_NUM_PARTS   0
108 #define DEF_OPTS   0
109 #define DEF_OPT_BLKS 64
110 #define DEF_PHYSBLK_EXP 0
111 #define DEF_PTYPE   0
112 #define DEF_SCSI_LEVEL   5    /* INQUIRY, byte2 [5->SPC-3] */
113 #define DEF_SECTOR_SIZE 512
114 #define DEF_UNMAP_ALIGNMENT 0
115 #define DEF_UNMAP_GRANULARITY 1
116 #define DEF_UNMAP_MAX_BLOCKS 0xFFFFFFFF
117 #define DEF_UNMAP_MAX_DESC 256
118 #define DEF_VIRTUAL_GB   0
119 #define DEF_VPD_USE_HOSTNO 1
120 #define DEF_WRITESAME_LENGTH 0xFFFF
121
122 /* bit mask values for scsi_debug_opts */
123 #define SCSI_DEBUG_OPT_NOISE   1
124 #define SCSI_DEBUG_OPT_MEDIUM_ERR   2
125 #define SCSI_DEBUG_OPT_TIMEOUT   4
126 #define SCSI_DEBUG_OPT_RECOVERED_ERR   8
127 #define SCSI_DEBUG_OPT_TRANSPORT_ERR   16
128 #define SCSI_DEBUG_OPT_DIF_ERR   32
129 #define SCSI_DEBUG_OPT_DIX_ERR   64
130 #define SCSI_DEBUG_OPT_MAC_TIMEOUT  128
131 /* When "every_nth" > 0 then modulo "every_nth" commands:
132  *   - a no response is simulated if SCSI_DEBUG_OPT_TIMEOUT is set
133  *   - a RECOVERED_ERROR is simulated on successful read and write
134  *     commands if SCSI_DEBUG_OPT_RECOVERED_ERR is set.
135  *   - a TRANSPORT_ERROR is simulated on successful read and write
136  *     commands if SCSI_DEBUG_OPT_TRANSPORT_ERR is set.
137  *
138  * When "every_nth" < 0 then after "- every_nth" commands:
139  *   - a no response is simulated if SCSI_DEBUG_OPT_TIMEOUT is set
140  *   - a RECOVERED_ERROR is simulated on successful read and write
141  *     commands if SCSI_DEBUG_OPT_RECOVERED_ERR is set.
142  *   - a TRANSPORT_ERROR is simulated on successful read and write
143  *     commands if SCSI_DEBUG_OPT_TRANSPORT_ERR is set.
144  * This will continue until some other action occurs (e.g. the user
145  * writing a new value (other than -1 or 1) to every_nth via sysfs).
146  */
147
148 /* when 1==SCSI_DEBUG_OPT_MEDIUM_ERR, a medium error is simulated at this
149  * sector on read commands: */
150 #define OPT_MEDIUM_ERR_ADDR   0x1234 /* that's sector 4660 in decimal */
151 #define OPT_MEDIUM_ERR_NUM    10     /* number of consecutive medium errs */
152
153 /* If REPORT LUNS has luns >= 256 it can choose "flat space" (value 1)
154  * or "peripheral device" addressing (value 0) */
155 #define SAM2_LUN_ADDRESS_METHOD 0
156 #define SAM2_WLUN_REPORT_LUNS 0xc101
157
158 /* Can queue up to this number of commands. Typically commands that
159  * that have a non-zero delay are queued. */
160 #define SCSI_DEBUG_CANQUEUE  255
161
162 static int scsi_debug_add_host = DEF_NUM_HOST;
163 static int scsi_debug_ato = DEF_ATO;
164 static int scsi_debug_delay = DEF_DELAY;
165 static int scsi_debug_dev_size_mb = DEF_DEV_SIZE_MB;
166 static int scsi_debug_dif = DEF_DIF;
167 static int scsi_debug_dix = DEF_DIX;
168 static int scsi_debug_dsense = DEF_D_SENSE;
169 static int scsi_debug_every_nth = DEF_EVERY_NTH;
170 static int scsi_debug_fake_rw = DEF_FAKE_RW;
171 static int scsi_debug_guard = DEF_GUARD;
172 static int scsi_debug_lowest_aligned = DEF_LOWEST_ALIGNED;
173 static int scsi_debug_max_luns = DEF_MAX_LUNS;
174 static int scsi_debug_max_queue = SCSI_DEBUG_CANQUEUE;
175 static int scsi_debug_no_lun_0 = DEF_NO_LUN_0;
176 static int scsi_debug_no_uld = 0;
177 static int scsi_debug_num_parts = DEF_NUM_PARTS;
178 static int scsi_debug_num_tgts = DEF_NUM_TGTS; /* targets per host */
179 static int scsi_debug_opt_blks = DEF_OPT_BLKS;
180 static int scsi_debug_opts = DEF_OPTS;
181 static int scsi_debug_physblk_exp = DEF_PHYSBLK_EXP;
182 static int scsi_debug_ptype = DEF_PTYPE; /* SCSI peripheral type (0==disk) */
183 static int scsi_debug_scsi_level = DEF_SCSI_LEVEL;
184 static int scsi_debug_sector_size = DEF_SECTOR_SIZE;
185 static int scsi_debug_virtual_gb = DEF_VIRTUAL_GB;
186 static int scsi_debug_vpd_use_hostno = DEF_VPD_USE_HOSTNO;
187 static unsigned int scsi_debug_lbpu = DEF_LBPU;
188 static unsigned int scsi_debug_lbpws = DEF_LBPWS;
189 static unsigned int scsi_debug_lbpws10 = DEF_LBPWS10;
190 static unsigned int scsi_debug_lbprz = DEF_LBPRZ;
191 static unsigned int scsi_debug_unmap_alignment = DEF_UNMAP_ALIGNMENT;
192 static unsigned int scsi_debug_unmap_granularity = DEF_UNMAP_GRANULARITY;
193 static unsigned int scsi_debug_unmap_max_blocks = DEF_UNMAP_MAX_BLOCKS;
194 static unsigned int scsi_debug_unmap_max_desc = DEF_UNMAP_MAX_DESC;
195 static unsigned int scsi_debug_write_same_length = DEF_WRITESAME_LENGTH;
196
197 static int scsi_debug_cmnd_count = 0;
198
199 #define DEV_READONLY(TGT)      (0)
200 #define DEV_REMOVEABLE(TGT)    (0)
201
202 static unsigned int sdebug_store_sectors;
203 static sector_t sdebug_capacity;        /* in sectors */
204
205 /* old BIOS stuff, kernel may get rid of them but some mode sense pages
206    may still need them */
207 static int sdebug_heads;                /* heads per disk */
208 static int sdebug_cylinders_per;        /* cylinders per surface */
209 static int sdebug_sectors_per;          /* sectors per cylinder */
210
211 #define SDEBUG_MAX_PARTS 4
212
213 #define SDEBUG_SENSE_LEN 32
214
215 #define SCSI_DEBUG_MAX_CMD_LEN 32
216
217 static unsigned int scsi_debug_lbp(void)
218 {
219         return scsi_debug_lbpu | scsi_debug_lbpws | scsi_debug_lbpws10;
220 }
221
222 struct sdebug_dev_info {
223         struct list_head dev_list;
224         unsigned char sense_buff[SDEBUG_SENSE_LEN];     /* weak nexus */
225         unsigned int channel;
226         unsigned int target;
227         unsigned int lun;
228         struct sdebug_host_info *sdbg_host;
229         unsigned int wlun;
230         char reset;
231         char stopped;
232         char used;
233 };
234
235 struct sdebug_host_info {
236         struct list_head host_list;
237         struct Scsi_Host *shost;
238         struct device dev;
239         struct list_head dev_info_list;
240 };
241
242 #define to_sdebug_host(d)       \
243         container_of(d, struct sdebug_host_info, dev)
244
245 static LIST_HEAD(sdebug_host_list);
246 static DEFINE_SPINLOCK(sdebug_host_list_lock);
247
248 typedef void (* done_funct_t) (struct scsi_cmnd *);
249
250 struct sdebug_queued_cmd {
251         int in_use;
252         struct timer_list cmnd_timer;
253         done_funct_t done_funct;
254         struct scsi_cmnd * a_cmnd;
255         int scsi_result;
256 };
257 static struct sdebug_queued_cmd queued_arr[SCSI_DEBUG_CANQUEUE];
258
259 static unsigned char * fake_storep;     /* ramdisk storage */
260 static unsigned char *dif_storep;       /* protection info */
261 static void *map_storep;                /* provisioning map */
262
263 static unsigned long map_size;
264 static int num_aborts = 0;
265 static int num_dev_resets = 0;
266 static int num_bus_resets = 0;
267 static int num_host_resets = 0;
268 static int dix_writes;
269 static int dix_reads;
270 static int dif_errors;
271
272 static DEFINE_SPINLOCK(queued_arr_lock);
273 static DEFINE_RWLOCK(atomic_rw);
274
275 static char sdebug_proc_name[] = "scsi_debug";
276
277 static struct bus_type pseudo_lld_bus;
278
279 static inline sector_t dif_offset(sector_t sector)
280 {
281         return sector << 3;
282 }
283
284 static struct device_driver sdebug_driverfs_driver = {
285         .name           = sdebug_proc_name,
286         .bus            = &pseudo_lld_bus,
287 };
288
289 static const int check_condition_result =
290                 (DRIVER_SENSE << 24) | SAM_STAT_CHECK_CONDITION;
291
292 static const int illegal_condition_result =
293         (DRIVER_SENSE << 24) | (DID_ABORT << 16) | SAM_STAT_CHECK_CONDITION;
294
295 static unsigned char ctrl_m_pg[] = {0xa, 10, 2, 0, 0, 0, 0, 0,
296                                     0, 0, 0x2, 0x4b};
297 static unsigned char iec_m_pg[] = {0x1c, 0xa, 0x08, 0, 0, 0, 0, 0,
298                                    0, 0, 0x0, 0x0};
299
300 static int sdebug_add_adapter(void);
301 static void sdebug_remove_adapter(void);
302
303 static void sdebug_max_tgts_luns(void)
304 {
305         struct sdebug_host_info *sdbg_host;
306         struct Scsi_Host *hpnt;
307
308         spin_lock(&sdebug_host_list_lock);
309         list_for_each_entry(sdbg_host, &sdebug_host_list, host_list) {
310                 hpnt = sdbg_host->shost;
311                 if ((hpnt->this_id >= 0) &&
312                     (scsi_debug_num_tgts > hpnt->this_id))
313                         hpnt->max_id = scsi_debug_num_tgts + 1;
314                 else
315                         hpnt->max_id = scsi_debug_num_tgts;
316                 /* scsi_debug_max_luns; */
317                 hpnt->max_lun = SAM2_WLUN_REPORT_LUNS;
318         }
319         spin_unlock(&sdebug_host_list_lock);
320 }
321
322 static void mk_sense_buffer(struct sdebug_dev_info *devip, int key,
323                             int asc, int asq)
324 {
325         unsigned char *sbuff;
326
327         sbuff = devip->sense_buff;
328         memset(sbuff, 0, SDEBUG_SENSE_LEN);
329
330         scsi_build_sense_buffer(scsi_debug_dsense, sbuff, key, asc, asq);
331
332         if (SCSI_DEBUG_OPT_NOISE & scsi_debug_opts)
333                 printk(KERN_INFO "scsi_debug:    [sense_key,asc,ascq]: "
334                       "[0x%x,0x%x,0x%x]\n", key, asc, asq);
335 }
336
337 static void get_data_transfer_info(unsigned char *cmd,
338                                    unsigned long long *lba, unsigned int *num,
339                                    u32 *ei_lba)
340 {
341         *ei_lba = 0;
342
343         switch (*cmd) {
344         case VARIABLE_LENGTH_CMD:
345                 *lba = (u64)cmd[19] | (u64)cmd[18] << 8 |
346                         (u64)cmd[17] << 16 | (u64)cmd[16] << 24 |
347                         (u64)cmd[15] << 32 | (u64)cmd[14] << 40 |
348                         (u64)cmd[13] << 48 | (u64)cmd[12] << 56;
349
350                 *ei_lba = (u32)cmd[23] | (u32)cmd[22] << 8 |
351                         (u32)cmd[21] << 16 | (u32)cmd[20] << 24;
352
353                 *num = (u32)cmd[31] | (u32)cmd[30] << 8 | (u32)cmd[29] << 16 |
354                         (u32)cmd[28] << 24;
355                 break;
356
357         case WRITE_SAME_16:
358         case WRITE_16:
359         case READ_16:
360                 *lba = (u64)cmd[9] | (u64)cmd[8] << 8 |
361                         (u64)cmd[7] << 16 | (u64)cmd[6] << 24 |
362                         (u64)cmd[5] << 32 | (u64)cmd[4] << 40 |
363                         (u64)cmd[3] << 48 | (u64)cmd[2] << 56;
364
365                 *num = (u32)cmd[13] | (u32)cmd[12] << 8 | (u32)cmd[11] << 16 |
366                         (u32)cmd[10] << 24;
367                 break;
368         case WRITE_12:
369         case READ_12:
370                 *lba = (u32)cmd[5] | (u32)cmd[4] << 8 | (u32)cmd[3] << 16 |
371                         (u32)cmd[2] << 24;
372
373                 *num = (u32)cmd[9] | (u32)cmd[8] << 8 | (u32)cmd[7] << 16 |
374                         (u32)cmd[6] << 24;
375                 break;
376         case WRITE_SAME:
377         case WRITE_10:
378         case READ_10:
379         case XDWRITEREAD_10:
380                 *lba = (u32)cmd[5] | (u32)cmd[4] << 8 | (u32)cmd[3] << 16 |
381                         (u32)cmd[2] << 24;
382
383                 *num = (u32)cmd[8] | (u32)cmd[7] << 8;
384                 break;
385         case WRITE_6:
386         case READ_6:
387                 *lba = (u32)cmd[3] | (u32)cmd[2] << 8 |
388                         (u32)(cmd[1] & 0x1f) << 16;
389                 *num = (0 == cmd[4]) ? 256 : cmd[4];
390                 break;
391         default:
392                 break;
393         }
394 }
395
396 static int scsi_debug_ioctl(struct scsi_device *dev, int cmd, void __user *arg)
397 {
398         if (SCSI_DEBUG_OPT_NOISE & scsi_debug_opts) {
399                 printk(KERN_INFO "scsi_debug: ioctl: cmd=0x%x\n", cmd);
400         }
401         return -EINVAL;
402         /* return -ENOTTY; // correct return but upsets fdisk */
403 }
404
405 static int check_readiness(struct scsi_cmnd * SCpnt, int reset_only,
406                            struct sdebug_dev_info * devip)
407 {
408         if (devip->reset) {
409                 if (SCSI_DEBUG_OPT_NOISE & scsi_debug_opts)
410                         printk(KERN_INFO "scsi_debug: Reporting Unit "
411                                "attention: power on reset\n");
412                 devip->reset = 0;
413                 mk_sense_buffer(devip, UNIT_ATTENTION, POWERON_RESET, 0);
414                 return check_condition_result;
415         }
416         if ((0 == reset_only) && devip->stopped) {
417                 if (SCSI_DEBUG_OPT_NOISE & scsi_debug_opts)
418                         printk(KERN_INFO "scsi_debug: Reporting Not "
419                                "ready: initializing command required\n");
420                 mk_sense_buffer(devip, NOT_READY, LOGICAL_UNIT_NOT_READY,
421                                 0x2);
422                 return check_condition_result;
423         }
424         return 0;
425 }
426
427 /* Returns 0 if ok else (DID_ERROR << 16). Sets scp->resid . */
428 static int fill_from_dev_buffer(struct scsi_cmnd *scp, unsigned char *arr,
429                                 int arr_len)
430 {
431         int act_len;
432         struct scsi_data_buffer *sdb = scsi_in(scp);
433
434         if (!sdb->length)
435                 return 0;
436         if (!(scsi_bidi_cmnd(scp) || scp->sc_data_direction == DMA_FROM_DEVICE))
437                 return (DID_ERROR << 16);
438
439         act_len = sg_copy_from_buffer(sdb->table.sgl, sdb->table.nents,
440                                       arr, arr_len);
441         if (sdb->resid)
442                 sdb->resid -= act_len;
443         else
444                 sdb->resid = scsi_bufflen(scp) - act_len;
445
446         return 0;
447 }
448
449 /* Returns number of bytes fetched into 'arr' or -1 if error. */
450 static int fetch_to_dev_buffer(struct scsi_cmnd *scp, unsigned char *arr,
451                                int arr_len)
452 {
453         if (!scsi_bufflen(scp))
454                 return 0;
455         if (!(scsi_bidi_cmnd(scp) || scp->sc_data_direction == DMA_TO_DEVICE))
456                 return -1;
457
458         return scsi_sg_copy_to_buffer(scp, arr, arr_len);
459 }
460
461
462 static const char * inq_vendor_id = "Linux   ";
463 static const char * inq_product_id = "scsi_debug      ";
464 static const char * inq_product_rev = "0004";
465
466 static int inquiry_evpd_83(unsigned char * arr, int port_group_id,
467                            int target_dev_id, int dev_id_num,
468                            const char * dev_id_str,
469                            int dev_id_str_len)
470 {
471         int num, port_a;
472         char b[32];
473
474         port_a = target_dev_id + 1;
475         /* T10 vendor identifier field format (faked) */
476         arr[0] = 0x2;   /* ASCII */
477         arr[1] = 0x1;
478         arr[2] = 0x0;
479         memcpy(&arr[4], inq_vendor_id, 8);
480         memcpy(&arr[12], inq_product_id, 16);
481         memcpy(&arr[28], dev_id_str, dev_id_str_len);
482         num = 8 + 16 + dev_id_str_len;
483         arr[3] = num;
484         num += 4;
485         if (dev_id_num >= 0) {
486                 /* NAA-5, Logical unit identifier (binary) */
487                 arr[num++] = 0x1;       /* binary (not necessarily sas) */
488                 arr[num++] = 0x3;       /* PIV=0, lu, naa */
489                 arr[num++] = 0x0;
490                 arr[num++] = 0x8;
491                 arr[num++] = 0x53;  /* naa-5 ieee company id=0x333333 (fake) */
492                 arr[num++] = 0x33;
493                 arr[num++] = 0x33;
494                 arr[num++] = 0x30;
495                 arr[num++] = (dev_id_num >> 24);
496                 arr[num++] = (dev_id_num >> 16) & 0xff;
497                 arr[num++] = (dev_id_num >> 8) & 0xff;
498                 arr[num++] = dev_id_num & 0xff;
499                 /* Target relative port number */
500                 arr[num++] = 0x61;      /* proto=sas, binary */
501                 arr[num++] = 0x94;      /* PIV=1, target port, rel port */
502                 arr[num++] = 0x0;       /* reserved */
503                 arr[num++] = 0x4;       /* length */
504                 arr[num++] = 0x0;       /* reserved */
505                 arr[num++] = 0x0;       /* reserved */
506                 arr[num++] = 0x0;
507                 arr[num++] = 0x1;       /* relative port A */
508         }
509         /* NAA-5, Target port identifier */
510         arr[num++] = 0x61;      /* proto=sas, binary */
511         arr[num++] = 0x93;      /* piv=1, target port, naa */
512         arr[num++] = 0x0;
513         arr[num++] = 0x8;
514         arr[num++] = 0x52;      /* naa-5, company id=0x222222 (fake) */
515         arr[num++] = 0x22;
516         arr[num++] = 0x22;
517         arr[num++] = 0x20;
518         arr[num++] = (port_a >> 24);
519         arr[num++] = (port_a >> 16) & 0xff;
520         arr[num++] = (port_a >> 8) & 0xff;
521         arr[num++] = port_a & 0xff;
522         /* NAA-5, Target port group identifier */
523         arr[num++] = 0x61;      /* proto=sas, binary */
524         arr[num++] = 0x95;      /* piv=1, target port group id */
525         arr[num++] = 0x0;
526         arr[num++] = 0x4;
527         arr[num++] = 0;
528         arr[num++] = 0;
529         arr[num++] = (port_group_id >> 8) & 0xff;
530         arr[num++] = port_group_id & 0xff;
531         /* NAA-5, Target device identifier */
532         arr[num++] = 0x61;      /* proto=sas, binary */
533         arr[num++] = 0xa3;      /* piv=1, target device, naa */
534         arr[num++] = 0x0;
535         arr[num++] = 0x8;
536         arr[num++] = 0x52;      /* naa-5, company id=0x222222 (fake) */
537         arr[num++] = 0x22;
538         arr[num++] = 0x22;
539         arr[num++] = 0x20;
540         arr[num++] = (target_dev_id >> 24);
541         arr[num++] = (target_dev_id >> 16) & 0xff;
542         arr[num++] = (target_dev_id >> 8) & 0xff;
543         arr[num++] = target_dev_id & 0xff;
544         /* SCSI name string: Target device identifier */
545         arr[num++] = 0x63;      /* proto=sas, UTF-8 */
546         arr[num++] = 0xa8;      /* piv=1, target device, SCSI name string */
547         arr[num++] = 0x0;
548         arr[num++] = 24;
549         memcpy(arr + num, "naa.52222220", 12);
550         num += 12;
551         snprintf(b, sizeof(b), "%08X", target_dev_id);
552         memcpy(arr + num, b, 8);
553         num += 8;
554         memset(arr + num, 0, 4);
555         num += 4;
556         return num;
557 }
558
559
560 static unsigned char vpd84_data[] = {
561 /* from 4th byte */ 0x22,0x22,0x22,0x0,0xbb,0x0,
562     0x22,0x22,0x22,0x0,0xbb,0x1,
563     0x22,0x22,0x22,0x0,0xbb,0x2,
564 };
565
566 static int inquiry_evpd_84(unsigned char * arr)
567 {
568         memcpy(arr, vpd84_data, sizeof(vpd84_data));
569         return sizeof(vpd84_data);
570 }
571
572 static int inquiry_evpd_85(unsigned char * arr)
573 {
574         int num = 0;
575         const char * na1 = "https://www.kernel.org/config";
576         const char * na2 = "http://www.kernel.org/log";
577         int plen, olen;
578
579         arr[num++] = 0x1;       /* lu, storage config */
580         arr[num++] = 0x0;       /* reserved */
581         arr[num++] = 0x0;
582         olen = strlen(na1);
583         plen = olen + 1;
584         if (plen % 4)
585                 plen = ((plen / 4) + 1) * 4;
586         arr[num++] = plen;      /* length, null termianted, padded */
587         memcpy(arr + num, na1, olen);
588         memset(arr + num + olen, 0, plen - olen);
589         num += plen;
590
591         arr[num++] = 0x4;       /* lu, logging */
592         arr[num++] = 0x0;       /* reserved */
593         arr[num++] = 0x0;
594         olen = strlen(na2);
595         plen = olen + 1;
596         if (plen % 4)
597                 plen = ((plen / 4) + 1) * 4;
598         arr[num++] = plen;      /* length, null terminated, padded */
599         memcpy(arr + num, na2, olen);
600         memset(arr + num + olen, 0, plen - olen);
601         num += plen;
602
603         return num;
604 }
605
606 /* SCSI ports VPD page */
607 static int inquiry_evpd_88(unsigned char * arr, int target_dev_id)
608 {
609         int num = 0;
610         int port_a, port_b;
611
612         port_a = target_dev_id + 1;
613         port_b = port_a + 1;
614         arr[num++] = 0x0;       /* reserved */
615         arr[num++] = 0x0;       /* reserved */
616         arr[num++] = 0x0;
617         arr[num++] = 0x1;       /* relative port 1 (primary) */
618         memset(arr + num, 0, 6);
619         num += 6;
620         arr[num++] = 0x0;
621         arr[num++] = 12;        /* length tp descriptor */
622         /* naa-5 target port identifier (A) */
623         arr[num++] = 0x61;      /* proto=sas, binary */
624         arr[num++] = 0x93;      /* PIV=1, target port, NAA */
625         arr[num++] = 0x0;       /* reserved */
626         arr[num++] = 0x8;       /* length */
627         arr[num++] = 0x52;      /* NAA-5, company_id=0x222222 (fake) */
628         arr[num++] = 0x22;
629         arr[num++] = 0x22;
630         arr[num++] = 0x20;
631         arr[num++] = (port_a >> 24);
632         arr[num++] = (port_a >> 16) & 0xff;
633         arr[num++] = (port_a >> 8) & 0xff;
634         arr[num++] = port_a & 0xff;
635
636         arr[num++] = 0x0;       /* reserved */
637         arr[num++] = 0x0;       /* reserved */
638         arr[num++] = 0x0;
639         arr[num++] = 0x2;       /* relative port 2 (secondary) */
640         memset(arr + num, 0, 6);
641         num += 6;
642         arr[num++] = 0x0;
643         arr[num++] = 12;        /* length tp descriptor */
644         /* naa-5 target port identifier (B) */
645         arr[num++] = 0x61;      /* proto=sas, binary */
646         arr[num++] = 0x93;      /* PIV=1, target port, NAA */
647         arr[num++] = 0x0;       /* reserved */
648         arr[num++] = 0x8;       /* length */
649         arr[num++] = 0x52;      /* NAA-5, company_id=0x222222 (fake) */
650         arr[num++] = 0x22;
651         arr[num++] = 0x22;
652         arr[num++] = 0x20;
653         arr[num++] = (port_b >> 24);
654         arr[num++] = (port_b >> 16) & 0xff;
655         arr[num++] = (port_b >> 8) & 0xff;
656         arr[num++] = port_b & 0xff;
657
658         return num;
659 }
660
661
662 static unsigned char vpd89_data[] = {
663 /* from 4th byte */ 0,0,0,0,
664 'l','i','n','u','x',' ',' ',' ',
665 'S','A','T',' ','s','c','s','i','_','d','e','b','u','g',' ',' ',
666 '1','2','3','4',
667 0x34,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,
668 0xec,0,0,0,
669 0x5a,0xc,0xff,0x3f,0x37,0xc8,0x10,0,0,0,0,0,0x3f,0,0,0,
670 0,0,0,0,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x20,0x20,0x20,0x20,
671 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0,0,0,0x40,0x4,0,0x2e,0x33,
672 0x38,0x31,0x20,0x20,0x20,0x20,0x54,0x53,0x38,0x33,0x30,0x30,0x33,0x31,
673 0x53,0x41,
674 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
675 0x20,0x20,
676 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
677 0x10,0x80,
678 0,0,0,0x2f,0,0,0,0x2,0,0x2,0x7,0,0xff,0xff,0x1,0,
679 0x3f,0,0xc1,0xff,0x3e,0,0x10,0x1,0xb0,0xf8,0x50,0x9,0,0,0x7,0,
680 0x3,0,0x78,0,0x78,0,0xf0,0,0x78,0,0,0,0,0,0,0,
681 0,0,0,0,0,0,0,0,0x2,0,0,0,0,0,0,0,
682 0x7e,0,0x1b,0,0x6b,0x34,0x1,0x7d,0x3,0x40,0x69,0x34,0x1,0x3c,0x3,0x40,
683 0x7f,0x40,0,0,0,0,0xfe,0xfe,0,0,0,0,0,0xfe,0,0,
684 0,0,0,0,0,0,0,0,0xb0,0xf8,0x50,0x9,0,0,0,0,
685 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
686 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
687 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
688 0x1,0,0xb0,0xf8,0x50,0x9,0xb0,0xf8,0x50,0x9,0x20,0x20,0x2,0,0xb6,0x42,
689 0,0x80,0x8a,0,0x6,0x3c,0xa,0x3c,0xff,0xff,0xc6,0x7,0,0x1,0,0x8,
690 0xf0,0xf,0,0x10,0x2,0,0x30,0,0,0,0,0,0,0,0x6,0xfe,
691 0,0,0x2,0,0x50,0,0x8a,0,0x4f,0x95,0,0,0x21,0,0xb,0,
692 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
693 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
694 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
695 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
696 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
697 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
698 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
699 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
700 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
701 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
702 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
703 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xa5,0x51,
704 };
705
706 static int inquiry_evpd_89(unsigned char * arr)
707 {
708         memcpy(arr, vpd89_data, sizeof(vpd89_data));
709         return sizeof(vpd89_data);
710 }
711
712
713 /* Block limits VPD page (SBC-3) */
714 static unsigned char vpdb0_data[] = {
715         /* from 4th byte */ 0,0,0,4, 0,0,0x4,0, 0,0,0,64,
716         0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
717         0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
718         0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
719 };
720
721 static int inquiry_evpd_b0(unsigned char * arr)
722 {
723         unsigned int gran;
724
725         memcpy(arr, vpdb0_data, sizeof(vpdb0_data));
726
727         /* Optimal transfer length granularity */
728         gran = 1 << scsi_debug_physblk_exp;
729         arr[2] = (gran >> 8) & 0xff;
730         arr[3] = gran & 0xff;
731
732         /* Maximum Transfer Length */
733         if (sdebug_store_sectors > 0x400) {
734                 arr[4] = (sdebug_store_sectors >> 24) & 0xff;
735                 arr[5] = (sdebug_store_sectors >> 16) & 0xff;
736                 arr[6] = (sdebug_store_sectors >> 8) & 0xff;
737                 arr[7] = sdebug_store_sectors & 0xff;
738         }
739
740         /* Optimal Transfer Length */
741         put_unaligned_be32(scsi_debug_opt_blks, &arr[8]);
742
743         if (scsi_debug_lbpu) {
744                 /* Maximum Unmap LBA Count */
745                 put_unaligned_be32(scsi_debug_unmap_max_blocks, &arr[16]);
746
747                 /* Maximum Unmap Block Descriptor Count */
748                 put_unaligned_be32(scsi_debug_unmap_max_desc, &arr[20]);
749         }
750
751         /* Unmap Granularity Alignment */
752         if (scsi_debug_unmap_alignment) {
753                 put_unaligned_be32(scsi_debug_unmap_alignment, &arr[28]);
754                 arr[28] |= 0x80; /* UGAVALID */
755         }
756
757         /* Optimal Unmap Granularity */
758         put_unaligned_be32(scsi_debug_unmap_granularity, &arr[24]);
759
760         /* Maximum WRITE SAME Length */
761         put_unaligned_be64(scsi_debug_write_same_length, &arr[32]);
762
763         return 0x3c; /* Mandatory page length for Logical Block Provisioning */
764
765         return sizeof(vpdb0_data);
766 }
767
768 /* Block device characteristics VPD page (SBC-3) */
769 static int inquiry_evpd_b1(unsigned char *arr)
770 {
771         memset(arr, 0, 0x3c);
772         arr[0] = 0;
773         arr[1] = 1;     /* non rotating medium (e.g. solid state) */
774         arr[2] = 0;
775         arr[3] = 5;     /* less than 1.8" */
776
777         return 0x3c;
778 }
779
780 /* Logical block provisioning VPD page (SBC-3) */
781 static int inquiry_evpd_b2(unsigned char *arr)
782 {
783         memset(arr, 0, 0x4);
784         arr[0] = 0;                     /* threshold exponent */
785
786         if (scsi_debug_lbpu)
787                 arr[1] = 1 << 7;
788
789         if (scsi_debug_lbpws)
790                 arr[1] |= 1 << 6;
791
792         if (scsi_debug_lbpws10)
793                 arr[1] |= 1 << 5;
794
795         if (scsi_debug_lbprz)
796                 arr[1] |= 1 << 2;
797
798         return 0x4;
799 }
800
801 #define SDEBUG_LONG_INQ_SZ 96
802 #define SDEBUG_MAX_INQ_ARR_SZ 584
803
804 static int resp_inquiry(struct scsi_cmnd * scp, int target,
805                         struct sdebug_dev_info * devip)
806 {
807         unsigned char pq_pdt;
808         unsigned char * arr;
809         unsigned char *cmd = (unsigned char *)scp->cmnd;
810         int alloc_len, n, ret;
811
812         alloc_len = (cmd[3] << 8) + cmd[4];
813         arr = kzalloc(SDEBUG_MAX_INQ_ARR_SZ, GFP_ATOMIC);
814         if (! arr)
815                 return DID_REQUEUE << 16;
816         if (devip->wlun)
817                 pq_pdt = 0x1e;  /* present, wlun */
818         else if (scsi_debug_no_lun_0 && (0 == devip->lun))
819                 pq_pdt = 0x7f;  /* not present, no device type */
820         else
821                 pq_pdt = (scsi_debug_ptype & 0x1f);
822         arr[0] = pq_pdt;
823         if (0x2 & cmd[1]) {  /* CMDDT bit set */
824                 mk_sense_buffer(devip, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB,
825                                 0);
826                 kfree(arr);
827                 return check_condition_result;
828         } else if (0x1 & cmd[1]) {  /* EVPD bit set */
829                 int lu_id_num, port_group_id, target_dev_id, len;
830                 char lu_id_str[6];
831                 int host_no = devip->sdbg_host->shost->host_no;
832                 
833                 port_group_id = (((host_no + 1) & 0x7f) << 8) +
834                     (devip->channel & 0x7f);
835                 if (0 == scsi_debug_vpd_use_hostno)
836                         host_no = 0;
837                 lu_id_num = devip->wlun ? -1 : (((host_no + 1) * 2000) +
838                             (devip->target * 1000) + devip->lun);
839                 target_dev_id = ((host_no + 1) * 2000) +
840                                  (devip->target * 1000) - 3;
841                 len = scnprintf(lu_id_str, 6, "%d", lu_id_num);
842                 if (0 == cmd[2]) { /* supported vital product data pages */
843                         arr[1] = cmd[2];        /*sanity */
844                         n = 4;
845                         arr[n++] = 0x0;   /* this page */
846                         arr[n++] = 0x80;  /* unit serial number */
847                         arr[n++] = 0x83;  /* device identification */
848                         arr[n++] = 0x84;  /* software interface ident. */
849                         arr[n++] = 0x85;  /* management network addresses */
850                         arr[n++] = 0x86;  /* extended inquiry */
851                         arr[n++] = 0x87;  /* mode page policy */
852                         arr[n++] = 0x88;  /* SCSI ports */
853                         arr[n++] = 0x89;  /* ATA information */
854                         arr[n++] = 0xb0;  /* Block limits (SBC) */
855                         arr[n++] = 0xb1;  /* Block characteristics (SBC) */
856                         if (scsi_debug_lbp()) /* Logical Block Prov. (SBC) */
857                                 arr[n++] = 0xb2;
858                         arr[3] = n - 4;   /* number of supported VPD pages */
859                 } else if (0x80 == cmd[2]) { /* unit serial number */
860                         arr[1] = cmd[2];        /*sanity */
861                         arr[3] = len;
862                         memcpy(&arr[4], lu_id_str, len);
863                 } else if (0x83 == cmd[2]) { /* device identification */
864                         arr[1] = cmd[2];        /*sanity */
865                         arr[3] = inquiry_evpd_83(&arr[4], port_group_id,
866                                                  target_dev_id, lu_id_num,
867                                                  lu_id_str, len);
868                 } else if (0x84 == cmd[2]) { /* Software interface ident. */
869                         arr[1] = cmd[2];        /*sanity */
870                         arr[3] = inquiry_evpd_84(&arr[4]);
871                 } else if (0x85 == cmd[2]) { /* Management network addresses */
872                         arr[1] = cmd[2];        /*sanity */
873                         arr[3] = inquiry_evpd_85(&arr[4]);
874                 } else if (0x86 == cmd[2]) { /* extended inquiry */
875                         arr[1] = cmd[2];        /*sanity */
876                         arr[3] = 0x3c;  /* number of following entries */
877                         if (scsi_debug_dif == SD_DIF_TYPE3_PROTECTION)
878                                 arr[4] = 0x4;   /* SPT: GRD_CHK:1 */
879                         else if (scsi_debug_dif)
880                                 arr[4] = 0x5;   /* SPT: GRD_CHK:1, REF_CHK:1 */
881                         else
882                                 arr[4] = 0x0;   /* no protection stuff */
883                         arr[5] = 0x7;   /* head of q, ordered + simple q's */
884                 } else if (0x87 == cmd[2]) { /* mode page policy */
885                         arr[1] = cmd[2];        /*sanity */
886                         arr[3] = 0x8;   /* number of following entries */
887                         arr[4] = 0x2;   /* disconnect-reconnect mp */
888                         arr[6] = 0x80;  /* mlus, shared */
889                         arr[8] = 0x18;   /* protocol specific lu */
890                         arr[10] = 0x82;  /* mlus, per initiator port */
891                 } else if (0x88 == cmd[2]) { /* SCSI Ports */
892                         arr[1] = cmd[2];        /*sanity */
893                         arr[3] = inquiry_evpd_88(&arr[4], target_dev_id);
894                 } else if (0x89 == cmd[2]) { /* ATA information */
895                         arr[1] = cmd[2];        /*sanity */
896                         n = inquiry_evpd_89(&arr[4]);
897                         arr[2] = (n >> 8);
898                         arr[3] = (n & 0xff);
899                 } else if (0xb0 == cmd[2]) { /* Block limits (SBC) */
900                         arr[1] = cmd[2];        /*sanity */
901                         arr[3] = inquiry_evpd_b0(&arr[4]);
902                 } else if (0xb1 == cmd[2]) { /* Block characteristics (SBC) */
903                         arr[1] = cmd[2];        /*sanity */
904                         arr[3] = inquiry_evpd_b1(&arr[4]);
905                 } else if (0xb2 == cmd[2]) { /* Logical Block Prov. (SBC) */
906                         arr[1] = cmd[2];        /*sanity */
907                         arr[3] = inquiry_evpd_b2(&arr[4]);
908                 } else {
909                         /* Illegal request, invalid field in cdb */
910                         mk_sense_buffer(devip, ILLEGAL_REQUEST,
911                                         INVALID_FIELD_IN_CDB, 0);
912                         kfree(arr);
913                         return check_condition_result;
914                 }
915                 len = min(((arr[2] << 8) + arr[3]) + 4, alloc_len);
916                 ret = fill_from_dev_buffer(scp, arr,
917                             min(len, SDEBUG_MAX_INQ_ARR_SZ));
918                 kfree(arr);
919                 return ret;
920         }
921         /* drops through here for a standard inquiry */
922         arr[1] = DEV_REMOVEABLE(target) ? 0x80 : 0;     /* Removable disk */
923         arr[2] = scsi_debug_scsi_level;
924         arr[3] = 2;    /* response_data_format==2 */
925         arr[4] = SDEBUG_LONG_INQ_SZ - 5;
926         arr[5] = scsi_debug_dif ? 1 : 0; /* PROTECT bit */
927         if (0 == scsi_debug_vpd_use_hostno)
928                 arr[5] = 0x10; /* claim: implicit TGPS */
929         arr[6] = 0x10; /* claim: MultiP */
930         /* arr[6] |= 0x40; ... claim: EncServ (enclosure services) */
931         arr[7] = 0xa; /* claim: LINKED + CMDQUE */
932         memcpy(&arr[8], inq_vendor_id, 8);
933         memcpy(&arr[16], inq_product_id, 16);
934         memcpy(&arr[32], inq_product_rev, 4);
935         /* version descriptors (2 bytes each) follow */
936         arr[58] = 0x0; arr[59] = 0x77; /* SAM-3 ANSI */
937         arr[60] = 0x3; arr[61] = 0x14;  /* SPC-3 ANSI */
938         n = 62;
939         if (scsi_debug_ptype == 0) {
940                 arr[n++] = 0x3; arr[n++] = 0x3d; /* SBC-2 ANSI */
941         } else if (scsi_debug_ptype == 1) {
942                 arr[n++] = 0x3; arr[n++] = 0x60; /* SSC-2 no version */
943         }
944         arr[n++] = 0xc; arr[n++] = 0xf;  /* SAS-1.1 rev 10 */
945         ret = fill_from_dev_buffer(scp, arr,
946                             min(alloc_len, SDEBUG_LONG_INQ_SZ));
947         kfree(arr);
948         return ret;
949 }
950
951 static int resp_requests(struct scsi_cmnd * scp,
952                          struct sdebug_dev_info * devip)
953 {
954         unsigned char * sbuff;
955         unsigned char *cmd = (unsigned char *)scp->cmnd;
956         unsigned char arr[SDEBUG_SENSE_LEN];
957         int want_dsense;
958         int len = 18;
959
960         memset(arr, 0, sizeof(arr));
961         if (devip->reset == 1)
962                 mk_sense_buffer(devip, 0, NO_ADDITIONAL_SENSE, 0);
963         want_dsense = !!(cmd[1] & 1) || scsi_debug_dsense;
964         sbuff = devip->sense_buff;
965         if ((iec_m_pg[2] & 0x4) && (6 == (iec_m_pg[3] & 0xf))) {
966                 if (want_dsense) {
967                         arr[0] = 0x72;
968                         arr[1] = 0x0;           /* NO_SENSE in sense_key */
969                         arr[2] = THRESHOLD_EXCEEDED;
970                         arr[3] = 0xff;          /* TEST set and MRIE==6 */
971                 } else {
972                         arr[0] = 0x70;
973                         arr[2] = 0x0;           /* NO_SENSE in sense_key */
974                         arr[7] = 0xa;           /* 18 byte sense buffer */
975                         arr[12] = THRESHOLD_EXCEEDED;
976                         arr[13] = 0xff;         /* TEST set and MRIE==6 */
977                 }
978         } else {
979                 memcpy(arr, sbuff, SDEBUG_SENSE_LEN);
980                 if ((cmd[1] & 1) && (! scsi_debug_dsense)) {
981                         /* DESC bit set and sense_buff in fixed format */
982                         memset(arr, 0, sizeof(arr));
983                         arr[0] = 0x72;
984                         arr[1] = sbuff[2];     /* sense key */
985                         arr[2] = sbuff[12];    /* asc */
986                         arr[3] = sbuff[13];    /* ascq */
987                         len = 8;
988                 }
989         }
990         mk_sense_buffer(devip, 0, NO_ADDITIONAL_SENSE, 0);
991         return fill_from_dev_buffer(scp, arr, len);
992 }
993
994 static int resp_start_stop(struct scsi_cmnd * scp,
995                            struct sdebug_dev_info * devip)
996 {
997         unsigned char *cmd = (unsigned char *)scp->cmnd;
998         int power_cond, errsts, start;
999
1000         if ((errsts = check_readiness(scp, 1, devip)))
1001                 return errsts;
1002         power_cond = (cmd[4] & 0xf0) >> 4;
1003         if (power_cond) {
1004                 mk_sense_buffer(devip, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB,
1005                                 0);
1006                 return check_condition_result;
1007         }
1008         start = cmd[4] & 1;
1009         if (start == devip->stopped)
1010                 devip->stopped = !start;
1011         return 0;
1012 }
1013
1014 static sector_t get_sdebug_capacity(void)
1015 {
1016         if (scsi_debug_virtual_gb > 0)
1017                 return (sector_t)scsi_debug_virtual_gb *
1018                         (1073741824 / scsi_debug_sector_size);
1019         else
1020                 return sdebug_store_sectors;
1021 }
1022
1023 #define SDEBUG_READCAP_ARR_SZ 8
1024 static int resp_readcap(struct scsi_cmnd * scp,
1025                         struct sdebug_dev_info * devip)
1026 {
1027         unsigned char arr[SDEBUG_READCAP_ARR_SZ];
1028         unsigned int capac;
1029         int errsts;
1030
1031         if ((errsts = check_readiness(scp, 1, devip)))
1032                 return errsts;
1033         /* following just in case virtual_gb changed */
1034         sdebug_capacity = get_sdebug_capacity();
1035         memset(arr, 0, SDEBUG_READCAP_ARR_SZ);
1036         if (sdebug_capacity < 0xffffffff) {
1037                 capac = (unsigned int)sdebug_capacity - 1;
1038                 arr[0] = (capac >> 24);
1039                 arr[1] = (capac >> 16) & 0xff;
1040                 arr[2] = (capac >> 8) & 0xff;
1041                 arr[3] = capac & 0xff;
1042         } else {
1043                 arr[0] = 0xff;
1044                 arr[1] = 0xff;
1045                 arr[2] = 0xff;
1046                 arr[3] = 0xff;
1047         }
1048         arr[6] = (scsi_debug_sector_size >> 8) & 0xff;
1049         arr[7] = scsi_debug_sector_size & 0xff;
1050         return fill_from_dev_buffer(scp, arr, SDEBUG_READCAP_ARR_SZ);
1051 }
1052
1053 #define SDEBUG_READCAP16_ARR_SZ 32
1054 static int resp_readcap16(struct scsi_cmnd * scp,
1055                           struct sdebug_dev_info * devip)
1056 {
1057         unsigned char *cmd = (unsigned char *)scp->cmnd;
1058         unsigned char arr[SDEBUG_READCAP16_ARR_SZ];
1059         unsigned long long capac;
1060         int errsts, k, alloc_len;
1061
1062         if ((errsts = check_readiness(scp, 1, devip)))
1063                 return errsts;
1064         alloc_len = ((cmd[10] << 24) + (cmd[11] << 16) + (cmd[12] << 8)
1065                      + cmd[13]);
1066         /* following just in case virtual_gb changed */
1067         sdebug_capacity = get_sdebug_capacity();
1068         memset(arr, 0, SDEBUG_READCAP16_ARR_SZ);
1069         capac = sdebug_capacity - 1;
1070         for (k = 0; k < 8; ++k, capac >>= 8)
1071                 arr[7 - k] = capac & 0xff;
1072         arr[8] = (scsi_debug_sector_size >> 24) & 0xff;
1073         arr[9] = (scsi_debug_sector_size >> 16) & 0xff;
1074         arr[10] = (scsi_debug_sector_size >> 8) & 0xff;
1075         arr[11] = scsi_debug_sector_size & 0xff;
1076         arr[13] = scsi_debug_physblk_exp & 0xf;
1077         arr[14] = (scsi_debug_lowest_aligned >> 8) & 0x3f;
1078
1079         if (scsi_debug_lbp()) {
1080                 arr[14] |= 0x80; /* LBPME */
1081                 if (scsi_debug_lbprz)
1082                         arr[14] |= 0x40; /* LBPRZ */
1083         }
1084
1085         arr[15] = scsi_debug_lowest_aligned & 0xff;
1086
1087         if (scsi_debug_dif) {
1088                 arr[12] = (scsi_debug_dif - 1) << 1; /* P_TYPE */
1089                 arr[12] |= 1; /* PROT_EN */
1090         }
1091
1092         return fill_from_dev_buffer(scp, arr,
1093                                     min(alloc_len, SDEBUG_READCAP16_ARR_SZ));
1094 }
1095
1096 #define SDEBUG_MAX_TGTPGS_ARR_SZ 1412
1097
1098 static int resp_report_tgtpgs(struct scsi_cmnd * scp,
1099                               struct sdebug_dev_info * devip)
1100 {
1101         unsigned char *cmd = (unsigned char *)scp->cmnd;
1102         unsigned char * arr;
1103         int host_no = devip->sdbg_host->shost->host_no;
1104         int n, ret, alen, rlen;
1105         int port_group_a, port_group_b, port_a, port_b;
1106
1107         alen = ((cmd[6] << 24) + (cmd[7] << 16) + (cmd[8] << 8)
1108                 + cmd[9]);
1109
1110         arr = kzalloc(SDEBUG_MAX_TGTPGS_ARR_SZ, GFP_ATOMIC);
1111         if (! arr)
1112                 return DID_REQUEUE << 16;
1113         /*
1114          * EVPD page 0x88 states we have two ports, one
1115          * real and a fake port with no device connected.
1116          * So we create two port groups with one port each
1117          * and set the group with port B to unavailable.
1118          */
1119         port_a = 0x1; /* relative port A */
1120         port_b = 0x2; /* relative port B */
1121         port_group_a = (((host_no + 1) & 0x7f) << 8) +
1122             (devip->channel & 0x7f);
1123         port_group_b = (((host_no + 1) & 0x7f) << 8) +
1124             (devip->channel & 0x7f) + 0x80;
1125
1126         /*
1127          * The asymmetric access state is cycled according to the host_id.
1128          */
1129         n = 4;
1130         if (0 == scsi_debug_vpd_use_hostno) {
1131             arr[n++] = host_no % 3; /* Asymm access state */
1132             arr[n++] = 0x0F; /* claim: all states are supported */
1133         } else {
1134             arr[n++] = 0x0; /* Active/Optimized path */
1135             arr[n++] = 0x01; /* claim: only support active/optimized paths */
1136         }
1137         arr[n++] = (port_group_a >> 8) & 0xff;
1138         arr[n++] = port_group_a & 0xff;
1139         arr[n++] = 0;    /* Reserved */
1140         arr[n++] = 0;    /* Status code */
1141         arr[n++] = 0;    /* Vendor unique */
1142         arr[n++] = 0x1;  /* One port per group */
1143         arr[n++] = 0;    /* Reserved */
1144         arr[n++] = 0;    /* Reserved */
1145         arr[n++] = (port_a >> 8) & 0xff;
1146         arr[n++] = port_a & 0xff;
1147         arr[n++] = 3;    /* Port unavailable */
1148         arr[n++] = 0x08; /* claim: only unavailalbe paths are supported */
1149         arr[n++] = (port_group_b >> 8) & 0xff;
1150         arr[n++] = port_group_b & 0xff;
1151         arr[n++] = 0;    /* Reserved */
1152         arr[n++] = 0;    /* Status code */
1153         arr[n++] = 0;    /* Vendor unique */
1154         arr[n++] = 0x1;  /* One port per group */
1155         arr[n++] = 0;    /* Reserved */
1156         arr[n++] = 0;    /* Reserved */
1157         arr[n++] = (port_b >> 8) & 0xff;
1158         arr[n++] = port_b & 0xff;
1159
1160         rlen = n - 4;
1161         arr[0] = (rlen >> 24) & 0xff;
1162         arr[1] = (rlen >> 16) & 0xff;
1163         arr[2] = (rlen >> 8) & 0xff;
1164         arr[3] = rlen & 0xff;
1165
1166         /*
1167          * Return the smallest value of either
1168          * - The allocated length
1169          * - The constructed command length
1170          * - The maximum array size
1171          */
1172         rlen = min(alen,n);
1173         ret = fill_from_dev_buffer(scp, arr,
1174                                    min(rlen, SDEBUG_MAX_TGTPGS_ARR_SZ));
1175         kfree(arr);
1176         return ret;
1177 }
1178
1179 /* <<Following mode page info copied from ST318451LW>> */
1180
1181 static int resp_err_recov_pg(unsigned char * p, int pcontrol, int target)
1182 {       /* Read-Write Error Recovery page for mode_sense */
1183         unsigned char err_recov_pg[] = {0x1, 0xa, 0xc0, 11, 240, 0, 0, 0,
1184                                         5, 0, 0xff, 0xff};
1185
1186         memcpy(p, err_recov_pg, sizeof(err_recov_pg));
1187         if (1 == pcontrol)
1188                 memset(p + 2, 0, sizeof(err_recov_pg) - 2);
1189         return sizeof(err_recov_pg);
1190 }
1191
1192 static int resp_disconnect_pg(unsigned char * p, int pcontrol, int target)
1193 {       /* Disconnect-Reconnect page for mode_sense */
1194         unsigned char disconnect_pg[] = {0x2, 0xe, 128, 128, 0, 10, 0, 0,
1195                                          0, 0, 0, 0, 0, 0, 0, 0};
1196
1197         memcpy(p, disconnect_pg, sizeof(disconnect_pg));
1198         if (1 == pcontrol)
1199                 memset(p + 2, 0, sizeof(disconnect_pg) - 2);
1200         return sizeof(disconnect_pg);
1201 }
1202
1203 static int resp_format_pg(unsigned char * p, int pcontrol, int target)
1204 {       /* Format device page for mode_sense */
1205         unsigned char format_pg[] = {0x3, 0x16, 0, 0, 0, 0, 0, 0,
1206                                      0, 0, 0, 0, 0, 0, 0, 0,
1207                                      0, 0, 0, 0, 0x40, 0, 0, 0};
1208
1209         memcpy(p, format_pg, sizeof(format_pg));
1210         p[10] = (sdebug_sectors_per >> 8) & 0xff;
1211         p[11] = sdebug_sectors_per & 0xff;
1212         p[12] = (scsi_debug_sector_size >> 8) & 0xff;
1213         p[13] = scsi_debug_sector_size & 0xff;
1214         if (DEV_REMOVEABLE(target))
1215                 p[20] |= 0x20; /* should agree with INQUIRY */
1216         if (1 == pcontrol)
1217                 memset(p + 2, 0, sizeof(format_pg) - 2);
1218         return sizeof(format_pg);
1219 }
1220
1221 static int resp_caching_pg(unsigned char * p, int pcontrol, int target)
1222 {       /* Caching page for mode_sense */
1223         unsigned char caching_pg[] = {0x8, 18, 0x14, 0, 0xff, 0xff, 0, 0,
1224                 0xff, 0xff, 0xff, 0xff, 0x80, 0x14, 0, 0,     0, 0, 0, 0};
1225
1226         memcpy(p, caching_pg, sizeof(caching_pg));
1227         if (1 == pcontrol)
1228                 memset(p + 2, 0, sizeof(caching_pg) - 2);
1229         return sizeof(caching_pg);
1230 }
1231
1232 static int resp_ctrl_m_pg(unsigned char * p, int pcontrol, int target)
1233 {       /* Control mode page for mode_sense */
1234         unsigned char ch_ctrl_m_pg[] = {/* 0xa, 10, */ 0x6, 0, 0, 0, 0, 0,
1235                                         0, 0, 0, 0};
1236         unsigned char d_ctrl_m_pg[] = {0xa, 10, 2, 0, 0, 0, 0, 0,
1237                                      0, 0, 0x2, 0x4b};
1238
1239         if (scsi_debug_dsense)
1240                 ctrl_m_pg[2] |= 0x4;
1241         else
1242                 ctrl_m_pg[2] &= ~0x4;
1243
1244         if (scsi_debug_ato)
1245                 ctrl_m_pg[5] |= 0x80; /* ATO=1 */
1246
1247         memcpy(p, ctrl_m_pg, sizeof(ctrl_m_pg));
1248         if (1 == pcontrol)
1249                 memcpy(p + 2, ch_ctrl_m_pg, sizeof(ch_ctrl_m_pg));
1250         else if (2 == pcontrol)
1251                 memcpy(p, d_ctrl_m_pg, sizeof(d_ctrl_m_pg));
1252         return sizeof(ctrl_m_pg);
1253 }
1254
1255
1256 static int resp_iec_m_pg(unsigned char * p, int pcontrol, int target)
1257 {       /* Informational Exceptions control mode page for mode_sense */
1258         unsigned char ch_iec_m_pg[] = {/* 0x1c, 0xa, */ 0x4, 0xf, 0, 0, 0, 0,
1259                                        0, 0, 0x0, 0x0};
1260         unsigned char d_iec_m_pg[] = {0x1c, 0xa, 0x08, 0, 0, 0, 0, 0,
1261                                       0, 0, 0x0, 0x0};
1262
1263         memcpy(p, iec_m_pg, sizeof(iec_m_pg));
1264         if (1 == pcontrol)
1265                 memcpy(p + 2, ch_iec_m_pg, sizeof(ch_iec_m_pg));
1266         else if (2 == pcontrol)
1267                 memcpy(p, d_iec_m_pg, sizeof(d_iec_m_pg));
1268         return sizeof(iec_m_pg);
1269 }
1270
1271 static int resp_sas_sf_m_pg(unsigned char * p, int pcontrol, int target)
1272 {       /* SAS SSP mode page - short format for mode_sense */
1273         unsigned char sas_sf_m_pg[] = {0x19, 0x6,
1274                 0x6, 0x0, 0x7, 0xd0, 0x0, 0x0};
1275
1276         memcpy(p, sas_sf_m_pg, sizeof(sas_sf_m_pg));
1277         if (1 == pcontrol)
1278                 memset(p + 2, 0, sizeof(sas_sf_m_pg) - 2);
1279         return sizeof(sas_sf_m_pg);
1280 }
1281
1282
1283 static int resp_sas_pcd_m_spg(unsigned char * p, int pcontrol, int target,
1284                               int target_dev_id)
1285 {       /* SAS phy control and discover mode page for mode_sense */
1286         unsigned char sas_pcd_m_pg[] = {0x59, 0x1, 0, 0x64, 0, 0x6, 0, 2,
1287                     0, 0, 0, 0, 0x10, 0x9, 0x8, 0x0,
1288                     0x52, 0x22, 0x22, 0x20, 0x0, 0x0, 0x0, 0x0,
1289                     0x51, 0x11, 0x11, 0x10, 0x0, 0x0, 0x0, 0x1,
1290                     0x2, 0, 0, 0, 0, 0, 0, 0,
1291                     0x88, 0x99, 0, 0, 0, 0, 0, 0,
1292                     0, 0, 0, 0, 0, 0, 0, 0,
1293                     0, 1, 0, 0, 0x10, 0x9, 0x8, 0x0,
1294                     0x52, 0x22, 0x22, 0x20, 0x0, 0x0, 0x0, 0x0,
1295                     0x51, 0x11, 0x11, 0x10, 0x0, 0x0, 0x0, 0x1,
1296                     0x3, 0, 0, 0, 0, 0, 0, 0,
1297                     0x88, 0x99, 0, 0, 0, 0, 0, 0,
1298                     0, 0, 0, 0, 0, 0, 0, 0,
1299                 };
1300         int port_a, port_b;
1301
1302         port_a = target_dev_id + 1;
1303         port_b = port_a + 1;
1304         memcpy(p, sas_pcd_m_pg, sizeof(sas_pcd_m_pg));
1305         p[20] = (port_a >> 24);
1306         p[21] = (port_a >> 16) & 0xff;
1307         p[22] = (port_a >> 8) & 0xff;
1308         p[23] = port_a & 0xff;
1309         p[48 + 20] = (port_b >> 24);
1310         p[48 + 21] = (port_b >> 16) & 0xff;
1311         p[48 + 22] = (port_b >> 8) & 0xff;
1312         p[48 + 23] = port_b & 0xff;
1313         if (1 == pcontrol)
1314                 memset(p + 4, 0, sizeof(sas_pcd_m_pg) - 4);
1315         return sizeof(sas_pcd_m_pg);
1316 }
1317
1318 static int resp_sas_sha_m_spg(unsigned char * p, int pcontrol)
1319 {       /* SAS SSP shared protocol specific port mode subpage */
1320         unsigned char sas_sha_m_pg[] = {0x59, 0x2, 0, 0xc, 0, 0x6, 0x10, 0,
1321                     0, 0, 0, 0, 0, 0, 0, 0,
1322                 };
1323
1324         memcpy(p, sas_sha_m_pg, sizeof(sas_sha_m_pg));
1325         if (1 == pcontrol)
1326                 memset(p + 4, 0, sizeof(sas_sha_m_pg) - 4);
1327         return sizeof(sas_sha_m_pg);
1328 }
1329
1330 #define SDEBUG_MAX_MSENSE_SZ 256
1331
1332 static int resp_mode_sense(struct scsi_cmnd * scp, int target,
1333                            struct sdebug_dev_info * devip)
1334 {
1335         unsigned char dbd, llbaa;
1336         int pcontrol, pcode, subpcode, bd_len;
1337         unsigned char dev_spec;
1338         int k, alloc_len, msense_6, offset, len, errsts, target_dev_id;
1339         unsigned char * ap;
1340         unsigned char arr[SDEBUG_MAX_MSENSE_SZ];
1341         unsigned char *cmd = (unsigned char *)scp->cmnd;
1342
1343         if ((errsts = check_readiness(scp, 1, devip)))
1344                 return errsts;
1345         dbd = !!(cmd[1] & 0x8);
1346         pcontrol = (cmd[2] & 0xc0) >> 6;
1347         pcode = cmd[2] & 0x3f;
1348         subpcode = cmd[3];
1349         msense_6 = (MODE_SENSE == cmd[0]);
1350         llbaa = msense_6 ? 0 : !!(cmd[1] & 0x10);
1351         if ((0 == scsi_debug_ptype) && (0 == dbd))
1352                 bd_len = llbaa ? 16 : 8;
1353         else
1354                 bd_len = 0;
1355         alloc_len = msense_6 ? cmd[4] : ((cmd[7] << 8) | cmd[8]);
1356         memset(arr, 0, SDEBUG_MAX_MSENSE_SZ);
1357         if (0x3 == pcontrol) {  /* Saving values not supported */
1358                 mk_sense_buffer(devip, ILLEGAL_REQUEST, SAVING_PARAMS_UNSUP,
1359                                 0);
1360                 return check_condition_result;
1361         }
1362         target_dev_id = ((devip->sdbg_host->shost->host_no + 1) * 2000) +
1363                         (devip->target * 1000) - 3;
1364         /* set DPOFUA bit for disks */
1365         if (0 == scsi_debug_ptype)
1366                 dev_spec = (DEV_READONLY(target) ? 0x80 : 0x0) | 0x10;
1367         else
1368                 dev_spec = 0x0;
1369         if (msense_6) {
1370                 arr[2] = dev_spec;
1371                 arr[3] = bd_len;
1372                 offset = 4;
1373         } else {
1374                 arr[3] = dev_spec;
1375                 if (16 == bd_len)
1376                         arr[4] = 0x1;   /* set LONGLBA bit */
1377                 arr[7] = bd_len;        /* assume 255 or less */
1378                 offset = 8;
1379         }
1380         ap = arr + offset;
1381         if ((bd_len > 0) && (!sdebug_capacity))
1382                 sdebug_capacity = get_sdebug_capacity();
1383
1384         if (8 == bd_len) {
1385                 if (sdebug_capacity > 0xfffffffe) {
1386                         ap[0] = 0xff;
1387                         ap[1] = 0xff;
1388                         ap[2] = 0xff;
1389                         ap[3] = 0xff;
1390                 } else {
1391                         ap[0] = (sdebug_capacity >> 24) & 0xff;
1392                         ap[1] = (sdebug_capacity >> 16) & 0xff;
1393                         ap[2] = (sdebug_capacity >> 8) & 0xff;
1394                         ap[3] = sdebug_capacity & 0xff;
1395                 }
1396                 ap[6] = (scsi_debug_sector_size >> 8) & 0xff;
1397                 ap[7] = scsi_debug_sector_size & 0xff;
1398                 offset += bd_len;
1399                 ap = arr + offset;
1400         } else if (16 == bd_len) {
1401                 unsigned long long capac = sdebug_capacity;
1402
1403                 for (k = 0; k < 8; ++k, capac >>= 8)
1404                         ap[7 - k] = capac & 0xff;
1405                 ap[12] = (scsi_debug_sector_size >> 24) & 0xff;
1406                 ap[13] = (scsi_debug_sector_size >> 16) & 0xff;
1407                 ap[14] = (scsi_debug_sector_size >> 8) & 0xff;
1408                 ap[15] = scsi_debug_sector_size & 0xff;
1409                 offset += bd_len;
1410                 ap = arr + offset;
1411         }
1412
1413         if ((subpcode > 0x0) && (subpcode < 0xff) && (0x19 != pcode)) {
1414                 /* TODO: Control Extension page */
1415                 mk_sense_buffer(devip, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB,
1416                                 0);
1417                 return check_condition_result;
1418         }
1419         switch (pcode) {
1420         case 0x1:       /* Read-Write error recovery page, direct access */
1421                 len = resp_err_recov_pg(ap, pcontrol, target);
1422                 offset += len;
1423                 break;
1424         case 0x2:       /* Disconnect-Reconnect page, all devices */
1425                 len = resp_disconnect_pg(ap, pcontrol, target);
1426                 offset += len;
1427                 break;
1428         case 0x3:       /* Format device page, direct access */
1429                 len = resp_format_pg(ap, pcontrol, target);
1430                 offset += len;
1431                 break;
1432         case 0x8:       /* Caching page, direct access */
1433                 len = resp_caching_pg(ap, pcontrol, target);
1434                 offset += len;
1435                 break;
1436         case 0xa:       /* Control Mode page, all devices */
1437                 len = resp_ctrl_m_pg(ap, pcontrol, target);
1438                 offset += len;
1439                 break;
1440         case 0x19:      /* if spc==1 then sas phy, control+discover */
1441                 if ((subpcode > 0x2) && (subpcode < 0xff)) {
1442                         mk_sense_buffer(devip, ILLEGAL_REQUEST,
1443                                         INVALID_FIELD_IN_CDB, 0);
1444                         return check_condition_result;
1445                 }
1446                 len = 0;
1447                 if ((0x0 == subpcode) || (0xff == subpcode))
1448                         len += resp_sas_sf_m_pg(ap + len, pcontrol, target);
1449                 if ((0x1 == subpcode) || (0xff == subpcode))
1450                         len += resp_sas_pcd_m_spg(ap + len, pcontrol, target,
1451                                                   target_dev_id);
1452                 if ((0x2 == subpcode) || (0xff == subpcode))
1453                         len += resp_sas_sha_m_spg(ap + len, pcontrol);
1454                 offset += len;
1455                 break;
1456         case 0x1c:      /* Informational Exceptions Mode page, all devices */
1457                 len = resp_iec_m_pg(ap, pcontrol, target);
1458                 offset += len;
1459                 break;
1460         case 0x3f:      /* Read all Mode pages */
1461                 if ((0 == subpcode) || (0xff == subpcode)) {
1462                         len = resp_err_recov_pg(ap, pcontrol, target);
1463                         len += resp_disconnect_pg(ap + len, pcontrol, target);
1464                         len += resp_format_pg(ap + len, pcontrol, target);
1465                         len += resp_caching_pg(ap + len, pcontrol, target);
1466                         len += resp_ctrl_m_pg(ap + len, pcontrol, target);
1467                         len += resp_sas_sf_m_pg(ap + len, pcontrol, target);
1468                         if (0xff == subpcode) {
1469                                 len += resp_sas_pcd_m_spg(ap + len, pcontrol,
1470                                                   target, target_dev_id);
1471                                 len += resp_sas_sha_m_spg(ap + len, pcontrol);
1472                         }
1473                         len += resp_iec_m_pg(ap + len, pcontrol, target);
1474                 } else {
1475                         mk_sense_buffer(devip, ILLEGAL_REQUEST,
1476                                         INVALID_FIELD_IN_CDB, 0);
1477                         return check_condition_result;
1478                 }
1479                 offset += len;
1480                 break;
1481         default:
1482                 mk_sense_buffer(devip, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB,
1483                                 0);
1484                 return check_condition_result;
1485         }
1486         if (msense_6)
1487                 arr[0] = offset - 1;
1488         else {
1489                 arr[0] = ((offset - 2) >> 8) & 0xff;
1490                 arr[1] = (offset - 2) & 0xff;
1491         }
1492         return fill_from_dev_buffer(scp, arr, min(alloc_len, offset));
1493 }
1494
1495 #define SDEBUG_MAX_MSELECT_SZ 512
1496
1497 static int resp_mode_select(struct scsi_cmnd * scp, int mselect6,
1498                             struct sdebug_dev_info * devip)
1499 {
1500         int pf, sp, ps, md_len, bd_len, off, spf, pg_len;
1501         int param_len, res, errsts, mpage;
1502         unsigned char arr[SDEBUG_MAX_MSELECT_SZ];
1503         unsigned char *cmd = (unsigned char *)scp->cmnd;
1504
1505         if ((errsts = check_readiness(scp, 1, devip)))
1506                 return errsts;
1507         memset(arr, 0, sizeof(arr));
1508         pf = cmd[1] & 0x10;
1509         sp = cmd[1] & 0x1;
1510         param_len = mselect6 ? cmd[4] : ((cmd[7] << 8) + cmd[8]);
1511         if ((0 == pf) || sp || (param_len > SDEBUG_MAX_MSELECT_SZ)) {
1512                 mk_sense_buffer(devip, ILLEGAL_REQUEST,
1513                                 INVALID_FIELD_IN_CDB, 0);
1514                 return check_condition_result;
1515         }
1516         res = fetch_to_dev_buffer(scp, arr, param_len);
1517         if (-1 == res)
1518                 return (DID_ERROR << 16);
1519         else if ((res < param_len) &&
1520                  (SCSI_DEBUG_OPT_NOISE & scsi_debug_opts))
1521                 printk(KERN_INFO "scsi_debug: mode_select: cdb indicated=%d, "
1522                        " IO sent=%d bytes\n", param_len, res);
1523         md_len = mselect6 ? (arr[0] + 1) : ((arr[0] << 8) + arr[1] + 2);
1524         bd_len = mselect6 ? arr[3] : ((arr[6] << 8) + arr[7]);
1525         if (md_len > 2) {
1526                 mk_sense_buffer(devip, ILLEGAL_REQUEST,
1527                                 INVALID_FIELD_IN_PARAM_LIST, 0);
1528                 return check_condition_result;
1529         }
1530         off = bd_len + (mselect6 ? 4 : 8);
1531         mpage = arr[off] & 0x3f;
1532         ps = !!(arr[off] & 0x80);
1533         if (ps) {
1534                 mk_sense_buffer(devip, ILLEGAL_REQUEST,
1535                                 INVALID_FIELD_IN_PARAM_LIST, 0);
1536                 return check_condition_result;
1537         }
1538         spf = !!(arr[off] & 0x40);
1539         pg_len = spf ? ((arr[off + 2] << 8) + arr[off + 3] + 4) :
1540                        (arr[off + 1] + 2);
1541         if ((pg_len + off) > param_len) {
1542                 mk_sense_buffer(devip, ILLEGAL_REQUEST,
1543                                 PARAMETER_LIST_LENGTH_ERR, 0);
1544                 return check_condition_result;
1545         }
1546         switch (mpage) {
1547         case 0xa:      /* Control Mode page */
1548                 if (ctrl_m_pg[1] == arr[off + 1]) {
1549                         memcpy(ctrl_m_pg + 2, arr + off + 2,
1550                                sizeof(ctrl_m_pg) - 2);
1551                         scsi_debug_dsense = !!(ctrl_m_pg[2] & 0x4);
1552                         return 0;
1553                 }
1554                 break;
1555         case 0x1c:      /* Informational Exceptions Mode page */
1556                 if (iec_m_pg[1] == arr[off + 1]) {
1557                         memcpy(iec_m_pg + 2, arr + off + 2,
1558                                sizeof(iec_m_pg) - 2);
1559                         return 0;
1560                 }
1561                 break;
1562         default:
1563                 break;
1564         }
1565         mk_sense_buffer(devip, ILLEGAL_REQUEST,
1566                         INVALID_FIELD_IN_PARAM_LIST, 0);
1567         return check_condition_result;
1568 }
1569
1570 static int resp_temp_l_pg(unsigned char * arr)
1571 {
1572         unsigned char temp_l_pg[] = {0x0, 0x0, 0x3, 0x2, 0x0, 38,
1573                                      0x0, 0x1, 0x3, 0x2, 0x0, 65,
1574                 };
1575
1576         memcpy(arr, temp_l_pg, sizeof(temp_l_pg));
1577         return sizeof(temp_l_pg);
1578 }
1579
1580 static int resp_ie_l_pg(unsigned char * arr)
1581 {
1582         unsigned char ie_l_pg[] = {0x0, 0x0, 0x3, 0x3, 0x0, 0x0, 38,
1583                 };
1584
1585         memcpy(arr, ie_l_pg, sizeof(ie_l_pg));
1586         if (iec_m_pg[2] & 0x4) {        /* TEST bit set */
1587                 arr[4] = THRESHOLD_EXCEEDED;
1588                 arr[5] = 0xff;
1589         }
1590         return sizeof(ie_l_pg);
1591 }
1592
1593 #define SDEBUG_MAX_LSENSE_SZ 512
1594
1595 static int resp_log_sense(struct scsi_cmnd * scp,
1596                           struct sdebug_dev_info * devip)
1597 {
1598         int ppc, sp, pcontrol, pcode, subpcode, alloc_len, errsts, len, n;
1599         unsigned char arr[SDEBUG_MAX_LSENSE_SZ];
1600         unsigned char *cmd = (unsigned char *)scp->cmnd;
1601
1602         if ((errsts = check_readiness(scp, 1, devip)))
1603                 return errsts;
1604         memset(arr, 0, sizeof(arr));
1605         ppc = cmd[1] & 0x2;
1606         sp = cmd[1] & 0x1;
1607         if (ppc || sp) {
1608                 mk_sense_buffer(devip, ILLEGAL_REQUEST,
1609                                 INVALID_FIELD_IN_CDB, 0);
1610                 return check_condition_result;
1611         }
1612         pcontrol = (cmd[2] & 0xc0) >> 6;
1613         pcode = cmd[2] & 0x3f;
1614         subpcode = cmd[3] & 0xff;
1615         alloc_len = (cmd[7] << 8) + cmd[8];
1616         arr[0] = pcode;
1617         if (0 == subpcode) {
1618                 switch (pcode) {
1619                 case 0x0:       /* Supported log pages log page */
1620                         n = 4;
1621                         arr[n++] = 0x0;         /* this page */
1622                         arr[n++] = 0xd;         /* Temperature */
1623                         arr[n++] = 0x2f;        /* Informational exceptions */
1624                         arr[3] = n - 4;
1625                         break;
1626                 case 0xd:       /* Temperature log page */
1627                         arr[3] = resp_temp_l_pg(arr + 4);
1628                         break;
1629                 case 0x2f:      /* Informational exceptions log page */
1630                         arr[3] = resp_ie_l_pg(arr + 4);
1631                         break;
1632                 default:
1633                         mk_sense_buffer(devip, ILLEGAL_REQUEST,
1634                                         INVALID_FIELD_IN_CDB, 0);
1635                         return check_condition_result;
1636                 }
1637         } else if (0xff == subpcode) {
1638                 arr[0] |= 0x40;
1639                 arr[1] = subpcode;
1640                 switch (pcode) {
1641                 case 0x0:       /* Supported log pages and subpages log page */
1642                         n = 4;
1643                         arr[n++] = 0x0;
1644                         arr[n++] = 0x0;         /* 0,0 page */
1645                         arr[n++] = 0x0;
1646                         arr[n++] = 0xff;        /* this page */
1647                         arr[n++] = 0xd;
1648                         arr[n++] = 0x0;         /* Temperature */
1649                         arr[n++] = 0x2f;
1650                         arr[n++] = 0x0; /* Informational exceptions */
1651                         arr[3] = n - 4;
1652                         break;
1653                 case 0xd:       /* Temperature subpages */
1654                         n = 4;
1655                         arr[n++] = 0xd;
1656                         arr[n++] = 0x0;         /* Temperature */
1657                         arr[3] = n - 4;
1658                         break;
1659                 case 0x2f:      /* Informational exceptions subpages */
1660                         n = 4;
1661                         arr[n++] = 0x2f;
1662                         arr[n++] = 0x0;         /* Informational exceptions */
1663                         arr[3] = n - 4;
1664                         break;
1665                 default:
1666                         mk_sense_buffer(devip, ILLEGAL_REQUEST,
1667                                         INVALID_FIELD_IN_CDB, 0);
1668                         return check_condition_result;
1669                 }
1670         } else {
1671                 mk_sense_buffer(devip, ILLEGAL_REQUEST,
1672                                 INVALID_FIELD_IN_CDB, 0);
1673                 return check_condition_result;
1674         }
1675         len = min(((arr[2] << 8) + arr[3]) + 4, alloc_len);
1676         return fill_from_dev_buffer(scp, arr,
1677                     min(len, SDEBUG_MAX_INQ_ARR_SZ));
1678 }
1679
1680 static int check_device_access_params(struct sdebug_dev_info *devi,
1681                                       unsigned long long lba, unsigned int num)
1682 {
1683         if (lba + num > sdebug_capacity) {
1684                 mk_sense_buffer(devi, ILLEGAL_REQUEST, ADDR_OUT_OF_RANGE, 0);
1685                 return check_condition_result;
1686         }
1687         /* transfer length excessive (tie in to block limits VPD page) */
1688         if (num > sdebug_store_sectors) {
1689                 mk_sense_buffer(devi, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB, 0);
1690                 return check_condition_result;
1691         }
1692         return 0;
1693 }
1694
1695 static int do_device_access(struct scsi_cmnd *scmd,
1696                             struct sdebug_dev_info *devi,
1697                             unsigned long long lba, unsigned int num, int write)
1698 {
1699         int ret;
1700         unsigned long long block, rest = 0;
1701         int (*func)(struct scsi_cmnd *, unsigned char *, int);
1702
1703         func = write ? fetch_to_dev_buffer : fill_from_dev_buffer;
1704
1705         block = do_div(lba, sdebug_store_sectors);
1706         if (block + num > sdebug_store_sectors)
1707                 rest = block + num - sdebug_store_sectors;
1708
1709         ret = func(scmd, fake_storep + (block * scsi_debug_sector_size),
1710                    (num - rest) * scsi_debug_sector_size);
1711         if (!ret && rest)
1712                 ret = func(scmd, fake_storep, rest * scsi_debug_sector_size);
1713
1714         return ret;
1715 }
1716
1717 static int prot_verify_read(struct scsi_cmnd *SCpnt, sector_t start_sec,
1718                             unsigned int sectors, u32 ei_lba)
1719 {
1720         unsigned int i, resid;
1721         struct scatterlist *psgl;
1722         struct sd_dif_tuple *sdt;
1723         sector_t sector;
1724         sector_t tmp_sec = start_sec;
1725         void *paddr;
1726
1727         start_sec = do_div(tmp_sec, sdebug_store_sectors);
1728
1729         sdt = (struct sd_dif_tuple *)(dif_storep + dif_offset(start_sec));
1730
1731         for (i = 0 ; i < sectors ; i++) {
1732                 u16 csum;
1733
1734                 if (sdt[i].app_tag == 0xffff)
1735                         continue;
1736
1737                 sector = start_sec + i;
1738
1739                 switch (scsi_debug_guard) {
1740                 case 1:
1741                         csum = ip_compute_csum(fake_storep +
1742                                                sector * scsi_debug_sector_size,
1743                                                scsi_debug_sector_size);
1744                         break;
1745                 case 0:
1746                         csum = crc_t10dif(fake_storep +
1747                                           sector * scsi_debug_sector_size,
1748                                           scsi_debug_sector_size);
1749                         csum = cpu_to_be16(csum);
1750                         break;
1751                 default:
1752                         BUG();
1753                 }
1754
1755                 if (sdt[i].guard_tag != csum) {
1756                         printk(KERN_ERR "%s: GUARD check failed on sector %lu" \
1757                                " rcvd 0x%04x, data 0x%04x\n", __func__,
1758                                (unsigned long)sector,
1759                                be16_to_cpu(sdt[i].guard_tag),
1760                                be16_to_cpu(csum));
1761                         dif_errors++;
1762                         return 0x01;
1763                 }
1764
1765                 if (scsi_debug_dif == SD_DIF_TYPE1_PROTECTION &&
1766                     be32_to_cpu(sdt[i].ref_tag) != (sector & 0xffffffff)) {
1767                         printk(KERN_ERR "%s: REF check failed on sector %lu\n",
1768                                __func__, (unsigned long)sector);
1769                         dif_errors++;
1770                         return 0x03;
1771                 }
1772
1773                 if (scsi_debug_dif == SD_DIF_TYPE2_PROTECTION &&
1774                     be32_to_cpu(sdt[i].ref_tag) != ei_lba) {
1775                         printk(KERN_ERR "%s: REF check failed on sector %lu\n",
1776                                __func__, (unsigned long)sector);
1777                         dif_errors++;
1778                         return 0x03;
1779                 }
1780
1781                 ei_lba++;
1782         }
1783
1784         resid = sectors * 8; /* Bytes of protection data to copy into sgl */
1785         sector = start_sec;
1786
1787         scsi_for_each_prot_sg(SCpnt, psgl, scsi_prot_sg_count(SCpnt), i) {
1788                 int len = min(psgl->length, resid);
1789
1790                 paddr = kmap_atomic(sg_page(psgl)) + psgl->offset;
1791                 memcpy(paddr, dif_storep + dif_offset(sector), len);
1792
1793                 sector += len >> 3;
1794                 if (sector >= sdebug_store_sectors) {
1795                         /* Force wrap */
1796                         tmp_sec = sector;
1797                         sector = do_div(tmp_sec, sdebug_store_sectors);
1798                 }
1799                 resid -= len;
1800                 kunmap_atomic(paddr);
1801         }
1802
1803         dix_reads++;
1804
1805         return 0;
1806 }
1807
1808 static int resp_read(struct scsi_cmnd *SCpnt, unsigned long long lba,
1809                      unsigned int num, struct sdebug_dev_info *devip,
1810                      u32 ei_lba)
1811 {
1812         unsigned long iflags;
1813         int ret;
1814
1815         ret = check_device_access_params(devip, lba, num);
1816         if (ret)
1817                 return ret;
1818
1819         if ((SCSI_DEBUG_OPT_MEDIUM_ERR & scsi_debug_opts) &&
1820             (lba <= (OPT_MEDIUM_ERR_ADDR + OPT_MEDIUM_ERR_NUM - 1)) &&
1821             ((lba + num) > OPT_MEDIUM_ERR_ADDR)) {
1822                 /* claim unrecoverable read error */
1823                 mk_sense_buffer(devip, MEDIUM_ERROR, UNRECOVERED_READ_ERR, 0);
1824                 /* set info field and valid bit for fixed descriptor */
1825                 if (0x70 == (devip->sense_buff[0] & 0x7f)) {
1826                         devip->sense_buff[0] |= 0x80;   /* Valid bit */
1827                         ret = (lba < OPT_MEDIUM_ERR_ADDR)
1828                               ? OPT_MEDIUM_ERR_ADDR : (int)lba;
1829                         devip->sense_buff[3] = (ret >> 24) & 0xff;
1830                         devip->sense_buff[4] = (ret >> 16) & 0xff;
1831                         devip->sense_buff[5] = (ret >> 8) & 0xff;
1832                         devip->sense_buff[6] = ret & 0xff;
1833                 }
1834                 scsi_set_resid(SCpnt, scsi_bufflen(SCpnt));
1835                 return check_condition_result;
1836         }
1837
1838         /* DIX + T10 DIF */
1839         if (scsi_debug_dix && scsi_prot_sg_count(SCpnt)) {
1840                 int prot_ret = prot_verify_read(SCpnt, lba, num, ei_lba);
1841
1842                 if (prot_ret) {
1843                         mk_sense_buffer(devip, ABORTED_COMMAND, 0x10, prot_ret);
1844                         return illegal_condition_result;
1845                 }
1846         }
1847
1848         read_lock_irqsave(&atomic_rw, iflags);
1849         ret = do_device_access(SCpnt, devip, lba, num, 0);
1850         read_unlock_irqrestore(&atomic_rw, iflags);
1851         return ret;
1852 }
1853
1854 void dump_sector(unsigned char *buf, int len)
1855 {
1856         int i, j;
1857
1858         printk(KERN_ERR ">>> Sector Dump <<<\n");
1859
1860         for (i = 0 ; i < len ; i += 16) {
1861                 printk(KERN_ERR "%04d: ", i);
1862
1863                 for (j = 0 ; j < 16 ; j++) {
1864                         unsigned char c = buf[i+j];
1865                         if (c >= 0x20 && c < 0x7e)
1866                                 printk(" %c ", buf[i+j]);
1867                         else
1868                                 printk("%02x ", buf[i+j]);
1869                 }
1870
1871                 printk("\n");
1872         }
1873 }
1874
1875 static int prot_verify_write(struct scsi_cmnd *SCpnt, sector_t start_sec,
1876                              unsigned int sectors, u32 ei_lba)
1877 {
1878         int i, j, ret;
1879         struct sd_dif_tuple *sdt;
1880         struct scatterlist *dsgl = scsi_sglist(SCpnt);
1881         struct scatterlist *psgl = scsi_prot_sglist(SCpnt);
1882         void *daddr, *paddr;
1883         sector_t tmp_sec = start_sec;
1884         sector_t sector;
1885         int ppage_offset;
1886         unsigned short csum;
1887
1888         sector = do_div(tmp_sec, sdebug_store_sectors);
1889
1890         BUG_ON(scsi_sg_count(SCpnt) == 0);
1891         BUG_ON(scsi_prot_sg_count(SCpnt) == 0);
1892
1893         paddr = kmap_atomic(sg_page(psgl)) + psgl->offset;
1894         ppage_offset = 0;
1895
1896         /* For each data page */
1897         scsi_for_each_sg(SCpnt, dsgl, scsi_sg_count(SCpnt), i) {
1898                 daddr = kmap_atomic(sg_page(dsgl)) + dsgl->offset;
1899
1900                 /* For each sector-sized chunk in data page */
1901                 for (j = 0 ; j < dsgl->length ; j += scsi_debug_sector_size) {
1902
1903                         /* If we're at the end of the current
1904                          * protection page advance to the next one
1905                          */
1906                         if (ppage_offset >= psgl->length) {
1907                                 kunmap_atomic(paddr);
1908                                 psgl = sg_next(psgl);
1909                                 BUG_ON(psgl == NULL);
1910                                 paddr = kmap_atomic(sg_page(psgl))
1911                                         + psgl->offset;
1912                                 ppage_offset = 0;
1913                         }
1914
1915                         sdt = paddr + ppage_offset;
1916
1917                         switch (scsi_debug_guard) {
1918                         case 1:
1919                                 csum = ip_compute_csum(daddr,
1920                                                        scsi_debug_sector_size);
1921                                 break;
1922                         case 0:
1923                                 csum = cpu_to_be16(crc_t10dif(daddr,
1924                                                       scsi_debug_sector_size));
1925                                 break;
1926                         default:
1927                                 BUG();
1928                                 ret = 0;
1929                                 goto out;
1930                         }
1931
1932                         if (sdt->guard_tag != csum) {
1933                                 printk(KERN_ERR
1934                                        "%s: GUARD check failed on sector %lu " \
1935                                        "rcvd 0x%04x, calculated 0x%04x\n",
1936                                        __func__, (unsigned long)sector,
1937                                        be16_to_cpu(sdt->guard_tag),
1938                                        be16_to_cpu(csum));
1939                                 ret = 0x01;
1940                                 dump_sector(daddr, scsi_debug_sector_size);
1941                                 goto out;
1942                         }
1943
1944                         if (scsi_debug_dif == SD_DIF_TYPE1_PROTECTION &&
1945                             be32_to_cpu(sdt->ref_tag)
1946                             != (start_sec & 0xffffffff)) {
1947                                 printk(KERN_ERR
1948                                        "%s: REF check failed on sector %lu\n",
1949                                        __func__, (unsigned long)sector);
1950                                 ret = 0x03;
1951                                 dump_sector(daddr, scsi_debug_sector_size);
1952                                 goto out;
1953                         }
1954
1955                         if (scsi_debug_dif == SD_DIF_TYPE2_PROTECTION &&
1956                             be32_to_cpu(sdt->ref_tag) != ei_lba) {
1957                                 printk(KERN_ERR
1958                                        "%s: REF check failed on sector %lu\n",
1959                                        __func__, (unsigned long)sector);
1960                                 ret = 0x03;
1961                                 dump_sector(daddr, scsi_debug_sector_size);
1962                                 goto out;
1963                         }
1964
1965                         /* Would be great to copy this in bigger
1966                          * chunks.  However, for the sake of
1967                          * correctness we need to verify each sector
1968                          * before writing it to "stable" storage
1969                          */
1970                         memcpy(dif_storep + dif_offset(sector), sdt, 8);
1971
1972                         sector++;
1973
1974                         if (sector == sdebug_store_sectors)
1975                                 sector = 0;     /* Force wrap */
1976
1977                         start_sec++;
1978                         ei_lba++;
1979                         daddr += scsi_debug_sector_size;
1980                         ppage_offset += sizeof(struct sd_dif_tuple);
1981                 }
1982
1983                 kunmap_atomic(daddr);
1984         }
1985
1986         kunmap_atomic(paddr);
1987
1988         dix_writes++;
1989
1990         return 0;
1991
1992 out:
1993         dif_errors++;
1994         kunmap_atomic(daddr);
1995         kunmap_atomic(paddr);
1996         return ret;
1997 }
1998
1999 static unsigned int map_state(sector_t lba, unsigned int *num)
2000 {
2001         unsigned int granularity, alignment, mapped;
2002         sector_t block, next, end;
2003
2004         granularity = scsi_debug_unmap_granularity;
2005         alignment = granularity - scsi_debug_unmap_alignment;
2006         block = lba + alignment;
2007         do_div(block, granularity);
2008
2009         mapped = test_bit(block, map_storep);
2010
2011         if (mapped)
2012                 next = find_next_zero_bit(map_storep, map_size, block);
2013         else
2014                 next = find_next_bit(map_storep, map_size, block);
2015
2016         end = next * granularity - scsi_debug_unmap_alignment;
2017         *num = end - lba;
2018
2019         return mapped;
2020 }
2021
2022 static void map_region(sector_t lba, unsigned int len)
2023 {
2024         unsigned int granularity, alignment;
2025         sector_t end = lba + len;
2026
2027         granularity = scsi_debug_unmap_granularity;
2028         alignment = granularity - scsi_debug_unmap_alignment;
2029
2030         while (lba < end) {
2031                 sector_t block, rem;
2032
2033                 block = lba + alignment;
2034                 rem = do_div(block, granularity);
2035
2036                 if (block < map_size)
2037                         set_bit(block, map_storep);
2038
2039                 lba += granularity - rem;
2040         }
2041 }
2042
2043 static void unmap_region(sector_t lba, unsigned int len)
2044 {
2045         unsigned int granularity, alignment;
2046         sector_t end = lba + len;
2047
2048         granularity = scsi_debug_unmap_granularity;
2049         alignment = granularity - scsi_debug_unmap_alignment;
2050
2051         while (lba < end) {
2052                 sector_t block, rem;
2053
2054                 block = lba + alignment;
2055                 rem = do_div(block, granularity);
2056
2057                 if (rem == 0 && lba + granularity <= end && block < map_size) {
2058                         clear_bit(block, map_storep);
2059                         if (scsi_debug_lbprz)
2060                                 memset(fake_storep +
2061                                        block * scsi_debug_sector_size, 0,
2062                                        scsi_debug_sector_size);
2063                 }
2064                 lba += granularity - rem;
2065         }
2066 }
2067
2068 static int resp_write(struct scsi_cmnd *SCpnt, unsigned long long lba,
2069                       unsigned int num, struct sdebug_dev_info *devip,
2070                       u32 ei_lba)
2071 {
2072         unsigned long iflags;
2073         int ret;
2074
2075         ret = check_device_access_params(devip, lba, num);
2076         if (ret)
2077                 return ret;
2078
2079         /* DIX + T10 DIF */
2080         if (scsi_debug_dix && scsi_prot_sg_count(SCpnt)) {
2081                 int prot_ret = prot_verify_write(SCpnt, lba, num, ei_lba);
2082
2083                 if (prot_ret) {
2084                         mk_sense_buffer(devip, ILLEGAL_REQUEST, 0x10, prot_ret);
2085                         return illegal_condition_result;
2086                 }
2087         }
2088
2089         write_lock_irqsave(&atomic_rw, iflags);
2090         ret = do_device_access(SCpnt, devip, lba, num, 1);
2091         if (scsi_debug_unmap_granularity)
2092                 map_region(lba, num);
2093         write_unlock_irqrestore(&atomic_rw, iflags);
2094         if (-1 == ret)
2095                 return (DID_ERROR << 16);
2096         else if ((ret < (num * scsi_debug_sector_size)) &&
2097                  (SCSI_DEBUG_OPT_NOISE & scsi_debug_opts))
2098                 printk(KERN_INFO "scsi_debug: write: cdb indicated=%u, "
2099                        " IO sent=%d bytes\n", num * scsi_debug_sector_size, ret);
2100
2101         return 0;
2102 }
2103
2104 static int resp_write_same(struct scsi_cmnd *scmd, unsigned long long lba,
2105                       unsigned int num, struct sdebug_dev_info *devip,
2106                            u32 ei_lba, unsigned int unmap)
2107 {
2108         unsigned long iflags;
2109         unsigned long long i;
2110         int ret;
2111
2112         ret = check_device_access_params(devip, lba, num);
2113         if (ret)
2114                 return ret;
2115
2116         if (num > scsi_debug_write_same_length) {
2117                 mk_sense_buffer(devip, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB,
2118                                 0);
2119                 return check_condition_result;
2120         }
2121
2122         write_lock_irqsave(&atomic_rw, iflags);
2123
2124         if (unmap && scsi_debug_unmap_granularity) {
2125                 unmap_region(lba, num);
2126                 goto out;
2127         }
2128
2129         /* Else fetch one logical block */
2130         ret = fetch_to_dev_buffer(scmd,
2131                                   fake_storep + (lba * scsi_debug_sector_size),
2132                                   scsi_debug_sector_size);
2133
2134         if (-1 == ret) {
2135                 write_unlock_irqrestore(&atomic_rw, iflags);
2136                 return (DID_ERROR << 16);
2137         } else if ((ret < (num * scsi_debug_sector_size)) &&
2138                  (SCSI_DEBUG_OPT_NOISE & scsi_debug_opts))
2139                 printk(KERN_INFO "scsi_debug: write same: cdb indicated=%u, "
2140                        " IO sent=%d bytes\n", num * scsi_debug_sector_size, ret);
2141
2142         /* Copy first sector to remaining blocks */
2143         for (i = 1 ; i < num ; i++)
2144                 memcpy(fake_storep + ((lba + i) * scsi_debug_sector_size),
2145                        fake_storep + (lba * scsi_debug_sector_size),
2146                        scsi_debug_sector_size);
2147
2148         if (scsi_debug_unmap_granularity)
2149                 map_region(lba, num);
2150 out:
2151         write_unlock_irqrestore(&atomic_rw, iflags);
2152
2153         return 0;
2154 }
2155
2156 struct unmap_block_desc {
2157         __be64  lba;
2158         __be32  blocks;
2159         __be32  __reserved;
2160 };
2161
2162 static int resp_unmap(struct scsi_cmnd * scmd, struct sdebug_dev_info * devip)
2163 {
2164         unsigned char *buf;
2165         struct unmap_block_desc *desc;
2166         unsigned int i, payload_len, descriptors;
2167         int ret;
2168
2169         ret = check_readiness(scmd, 1, devip);
2170         if (ret)
2171                 return ret;
2172
2173         payload_len = get_unaligned_be16(&scmd->cmnd[7]);
2174         BUG_ON(scsi_bufflen(scmd) != payload_len);
2175
2176         descriptors = (payload_len - 8) / 16;
2177
2178         buf = kmalloc(scsi_bufflen(scmd), GFP_ATOMIC);
2179         if (!buf)
2180                 return check_condition_result;
2181
2182         scsi_sg_copy_to_buffer(scmd, buf, scsi_bufflen(scmd));
2183
2184         BUG_ON(get_unaligned_be16(&buf[0]) != payload_len - 2);
2185         BUG_ON(get_unaligned_be16(&buf[2]) != descriptors * 16);
2186
2187         desc = (void *)&buf[8];
2188
2189         for (i = 0 ; i < descriptors ; i++) {
2190                 unsigned long long lba = get_unaligned_be64(&desc[i].lba);
2191                 unsigned int num = get_unaligned_be32(&desc[i].blocks);
2192
2193                 ret = check_device_access_params(devip, lba, num);
2194                 if (ret)
2195                         goto out;
2196
2197                 unmap_region(lba, num);
2198         }
2199
2200         ret = 0;
2201
2202 out:
2203         kfree(buf);
2204
2205         return ret;
2206 }
2207
2208 #define SDEBUG_GET_LBA_STATUS_LEN 32
2209
2210 static int resp_get_lba_status(struct scsi_cmnd * scmd,
2211                                struct sdebug_dev_info * devip)
2212 {
2213         unsigned long long lba;
2214         unsigned int alloc_len, mapped, num;
2215         unsigned char arr[SDEBUG_GET_LBA_STATUS_LEN];
2216         int ret;
2217
2218         ret = check_readiness(scmd, 1, devip);
2219         if (ret)
2220                 return ret;
2221
2222         lba = get_unaligned_be64(&scmd->cmnd[2]);
2223         alloc_len = get_unaligned_be32(&scmd->cmnd[10]);
2224
2225         if (alloc_len < 24)
2226                 return 0;
2227
2228         ret = check_device_access_params(devip, lba, 1);
2229         if (ret)
2230                 return ret;
2231
2232         mapped = map_state(lba, &num);
2233
2234         memset(arr, 0, SDEBUG_GET_LBA_STATUS_LEN);
2235         put_unaligned_be32(20, &arr[0]);        /* Parameter Data Length */
2236         put_unaligned_be64(lba, &arr[8]);       /* LBA */
2237         put_unaligned_be32(num, &arr[16]);      /* Number of blocks */
2238         arr[20] = !mapped;                      /* mapped = 0, unmapped = 1 */
2239
2240         return fill_from_dev_buffer(scmd, arr, SDEBUG_GET_LBA_STATUS_LEN);
2241 }
2242
2243 #define SDEBUG_RLUN_ARR_SZ 256
2244
2245 static int resp_report_luns(struct scsi_cmnd * scp,
2246                             struct sdebug_dev_info * devip)
2247 {
2248         unsigned int alloc_len;
2249         int lun_cnt, i, upper, num, n, wlun, lun;
2250         unsigned char *cmd = (unsigned char *)scp->cmnd;
2251         int select_report = (int)cmd[2];
2252         struct scsi_lun *one_lun;
2253         unsigned char arr[SDEBUG_RLUN_ARR_SZ];
2254         unsigned char * max_addr;
2255
2256         alloc_len = cmd[9] + (cmd[8] << 8) + (cmd[7] << 16) + (cmd[6] << 24);
2257         if ((alloc_len < 4) || (select_report > 2)) {
2258                 mk_sense_buffer(devip, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB,
2259                                 0);
2260                 return check_condition_result;
2261         }
2262         /* can produce response with up to 16k luns (lun 0 to lun 16383) */
2263         memset(arr, 0, SDEBUG_RLUN_ARR_SZ);
2264         lun_cnt = scsi_debug_max_luns;
2265         if (1 == select_report)
2266                 lun_cnt = 0;
2267         else if (scsi_debug_no_lun_0 && (lun_cnt > 0))
2268                 --lun_cnt;
2269         wlun = (select_report > 0) ? 1 : 0;
2270         num = lun_cnt + wlun;
2271         arr[2] = ((sizeof(struct scsi_lun) * num) >> 8) & 0xff;
2272         arr[3] = (sizeof(struct scsi_lun) * num) & 0xff;
2273         n = min((int)((SDEBUG_RLUN_ARR_SZ - 8) /
2274                             sizeof(struct scsi_lun)), num);
2275         if (n < num) {
2276                 wlun = 0;
2277                 lun_cnt = n;
2278         }
2279         one_lun = (struct scsi_lun *) &arr[8];
2280         max_addr = arr + SDEBUG_RLUN_ARR_SZ;
2281         for (i = 0, lun = (scsi_debug_no_lun_0 ? 1 : 0);
2282              ((i < lun_cnt) && ((unsigned char *)(one_lun + i) < max_addr));
2283              i++, lun++) {
2284                 upper = (lun >> 8) & 0x3f;
2285                 if (upper)
2286                         one_lun[i].scsi_lun[0] =
2287                             (upper | (SAM2_LUN_ADDRESS_METHOD << 6));
2288                 one_lun[i].scsi_lun[1] = lun & 0xff;
2289         }
2290         if (wlun) {
2291                 one_lun[i].scsi_lun[0] = (SAM2_WLUN_REPORT_LUNS >> 8) & 0xff;
2292                 one_lun[i].scsi_lun[1] = SAM2_WLUN_REPORT_LUNS & 0xff;
2293                 i++;
2294         }
2295         alloc_len = (unsigned char *)(one_lun + i) - arr;
2296         return fill_from_dev_buffer(scp, arr,
2297                                     min((int)alloc_len, SDEBUG_RLUN_ARR_SZ));
2298 }
2299
2300 static int resp_xdwriteread(struct scsi_cmnd *scp, unsigned long long lba,
2301                             unsigned int num, struct sdebug_dev_info *devip)
2302 {
2303         int i, j, ret = -1;
2304         unsigned char *kaddr, *buf;
2305         unsigned int offset;
2306         struct scatterlist *sg;
2307         struct scsi_data_buffer *sdb = scsi_in(scp);
2308
2309         /* better not to use temporary buffer. */
2310         buf = kmalloc(scsi_bufflen(scp), GFP_ATOMIC);
2311         if (!buf)
2312                 return ret;
2313
2314         scsi_sg_copy_to_buffer(scp, buf, scsi_bufflen(scp));
2315
2316         offset = 0;
2317         for_each_sg(sdb->table.sgl, sg, sdb->table.nents, i) {
2318                 kaddr = (unsigned char *)kmap_atomic(sg_page(sg));
2319                 if (!kaddr)
2320                         goto out;
2321
2322                 for (j = 0; j < sg->length; j++)
2323                         *(kaddr + sg->offset + j) ^= *(buf + offset + j);
2324
2325                 offset += sg->length;
2326                 kunmap_atomic(kaddr);
2327         }
2328         ret = 0;
2329 out:
2330         kfree(buf);
2331
2332         return ret;
2333 }
2334
2335 /* When timer goes off this function is called. */
2336 static void timer_intr_handler(unsigned long indx)
2337 {
2338         struct sdebug_queued_cmd * sqcp;
2339         unsigned long iflags;
2340
2341         if (indx >= scsi_debug_max_queue) {
2342                 printk(KERN_ERR "scsi_debug:timer_intr_handler: indx too "
2343                        "large\n");
2344                 return;
2345         }
2346         spin_lock_irqsave(&queued_arr_lock, iflags);
2347         sqcp = &queued_arr[(int)indx];
2348         if (! sqcp->in_use) {
2349                 printk(KERN_ERR "scsi_debug:timer_intr_handler: Unexpected "
2350                        "interrupt\n");
2351                 spin_unlock_irqrestore(&queued_arr_lock, iflags);
2352                 return;
2353         }
2354         sqcp->in_use = 0;
2355         if (sqcp->done_funct) {
2356                 sqcp->a_cmnd->result = sqcp->scsi_result;
2357                 sqcp->done_funct(sqcp->a_cmnd); /* callback to mid level */
2358         }
2359         sqcp->done_funct = NULL;
2360         spin_unlock_irqrestore(&queued_arr_lock, iflags);
2361 }
2362
2363
2364 static struct sdebug_dev_info *
2365 sdebug_device_create(struct sdebug_host_info *sdbg_host, gfp_t flags)
2366 {
2367         struct sdebug_dev_info *devip;
2368
2369         devip = kzalloc(sizeof(*devip), flags);
2370         if (devip) {
2371                 devip->sdbg_host = sdbg_host;
2372                 list_add_tail(&devip->dev_list, &sdbg_host->dev_info_list);
2373         }
2374         return devip;
2375 }
2376
2377 static struct sdebug_dev_info * devInfoReg(struct scsi_device * sdev)
2378 {
2379         struct sdebug_host_info * sdbg_host;
2380         struct sdebug_dev_info * open_devip = NULL;
2381         struct sdebug_dev_info * devip =
2382                         (struct sdebug_dev_info *)sdev->hostdata;
2383
2384         if (devip)
2385                 return devip;
2386         sdbg_host = *(struct sdebug_host_info **)shost_priv(sdev->host);
2387         if (!sdbg_host) {
2388                 printk(KERN_ERR "Host info NULL\n");
2389                 return NULL;
2390         }
2391         list_for_each_entry(devip, &sdbg_host->dev_info_list, dev_list) {
2392                 if ((devip->used) && (devip->channel == sdev->channel) &&
2393                     (devip->target == sdev->id) &&
2394                     (devip->lun == sdev->lun))
2395                         return devip;
2396                 else {
2397                         if ((!devip->used) && (!open_devip))
2398                                 open_devip = devip;
2399                 }
2400         }
2401         if (!open_devip) { /* try and make a new one */
2402                 open_devip = sdebug_device_create(sdbg_host, GFP_ATOMIC);
2403                 if (!open_devip) {
2404                         printk(KERN_ERR "%s: out of memory at line %d\n",
2405                                 __func__, __LINE__);
2406                         return NULL;
2407                 }
2408         }
2409
2410         open_devip->channel = sdev->channel;
2411         open_devip->target = sdev->id;
2412         open_devip->lun = sdev->lun;
2413         open_devip->sdbg_host = sdbg_host;
2414         open_devip->reset = 1;
2415         open_devip->used = 1;
2416         memset(open_devip->sense_buff, 0, SDEBUG_SENSE_LEN);
2417         if (scsi_debug_dsense)
2418                 open_devip->sense_buff[0] = 0x72;
2419         else {
2420                 open_devip->sense_buff[0] = 0x70;
2421                 open_devip->sense_buff[7] = 0xa;
2422         }
2423         if (sdev->lun == SAM2_WLUN_REPORT_LUNS)
2424                 open_devip->wlun = SAM2_WLUN_REPORT_LUNS & 0xff;
2425
2426         return open_devip;
2427 }
2428
2429 static int scsi_debug_slave_alloc(struct scsi_device *sdp)
2430 {
2431         if (SCSI_DEBUG_OPT_NOISE & scsi_debug_opts)
2432                 printk(KERN_INFO "scsi_debug: slave_alloc <%u %u %u %u>\n",
2433                        sdp->host->host_no, sdp->channel, sdp->id, sdp->lun);
2434         queue_flag_set_unlocked(QUEUE_FLAG_BIDI, sdp->request_queue);
2435         return 0;
2436 }
2437
2438 static int scsi_debug_slave_configure(struct scsi_device *sdp)
2439 {
2440         struct sdebug_dev_info *devip;
2441
2442         if (SCSI_DEBUG_OPT_NOISE & scsi_debug_opts)
2443                 printk(KERN_INFO "scsi_debug: slave_configure <%u %u %u %u>\n",
2444                        sdp->host->host_no, sdp->channel, sdp->id, sdp->lun);
2445         if (sdp->host->max_cmd_len != SCSI_DEBUG_MAX_CMD_LEN)
2446                 sdp->host->max_cmd_len = SCSI_DEBUG_MAX_CMD_LEN;
2447         devip = devInfoReg(sdp);
2448         if (NULL == devip)
2449                 return 1;       /* no resources, will be marked offline */
2450         sdp->hostdata = devip;
2451         if (sdp->host->cmd_per_lun)
2452                 scsi_adjust_queue_depth(sdp, SDEBUG_TAGGED_QUEUING,
2453                                         sdp->host->cmd_per_lun);
2454         blk_queue_max_segment_size(sdp->request_queue, 256 * 1024);
2455         if (scsi_debug_no_uld)
2456                 sdp->no_uld_attach = 1;
2457         return 0;
2458 }
2459
2460 static void scsi_debug_slave_destroy(struct scsi_device *sdp)
2461 {
2462         struct sdebug_dev_info *devip =
2463                 (struct sdebug_dev_info *)sdp->hostdata;
2464
2465         if (SCSI_DEBUG_OPT_NOISE & scsi_debug_opts)
2466                 printk(KERN_INFO "scsi_debug: slave_destroy <%u %u %u %u>\n",
2467                        sdp->host->host_no, sdp->channel, sdp->id, sdp->lun);
2468         if (devip) {
2469                 /* make this slot available for re-use */
2470                 devip->used = 0;
2471                 sdp->hostdata = NULL;
2472         }
2473 }
2474
2475 /* Returns 1 if found 'cmnd' and deleted its timer. else returns 0 */
2476 static int stop_queued_cmnd(struct scsi_cmnd *cmnd)
2477 {
2478         unsigned long iflags;
2479         int k;
2480         struct sdebug_queued_cmd *sqcp;
2481
2482         spin_lock_irqsave(&queued_arr_lock, iflags);
2483         for (k = 0; k < scsi_debug_max_queue; ++k) {
2484                 sqcp = &queued_arr[k];
2485                 if (sqcp->in_use && (cmnd == sqcp->a_cmnd)) {
2486                         del_timer_sync(&sqcp->cmnd_timer);
2487                         sqcp->in_use = 0;
2488                         sqcp->a_cmnd = NULL;
2489                         break;
2490                 }
2491         }
2492         spin_unlock_irqrestore(&queued_arr_lock, iflags);
2493         return (k < scsi_debug_max_queue) ? 1 : 0;
2494 }
2495
2496 /* Deletes (stops) timers of all queued commands */
2497 static void stop_all_queued(void)
2498 {
2499         unsigned long iflags;
2500         int k;
2501         struct sdebug_queued_cmd *sqcp;
2502
2503         spin_lock_irqsave(&queued_arr_lock, iflags);
2504         for (k = 0; k < scsi_debug_max_queue; ++k) {
2505                 sqcp = &queued_arr[k];
2506                 if (sqcp->in_use && sqcp->a_cmnd) {
2507                         del_timer_sync(&sqcp->cmnd_timer);
2508                         sqcp->in_use = 0;
2509                         sqcp->a_cmnd = NULL;
2510                 }
2511         }
2512         spin_unlock_irqrestore(&queued_arr_lock, iflags);
2513 }
2514
2515 static int scsi_debug_abort(struct scsi_cmnd * SCpnt)
2516 {
2517         if (SCSI_DEBUG_OPT_NOISE & scsi_debug_opts)
2518                 printk(KERN_INFO "scsi_debug: abort\n");
2519         ++num_aborts;
2520         stop_queued_cmnd(SCpnt);
2521         return SUCCESS;
2522 }
2523
2524 static int scsi_debug_biosparam(struct scsi_device *sdev,
2525                 struct block_device * bdev, sector_t capacity, int *info)
2526 {
2527         int res;
2528         unsigned char *buf;
2529
2530         if (SCSI_DEBUG_OPT_NOISE & scsi_debug_opts)
2531                 printk(KERN_INFO "scsi_debug: biosparam\n");
2532         buf = scsi_bios_ptable(bdev);
2533         if (buf) {
2534                 res = scsi_partsize(buf, capacity,
2535                                     &info[2], &info[0], &info[1]);
2536                 kfree(buf);
2537                 if (! res)
2538                         return res;
2539         }
2540         info[0] = sdebug_heads;
2541         info[1] = sdebug_sectors_per;
2542         info[2] = sdebug_cylinders_per;
2543         return 0;
2544 }
2545
2546 static int scsi_debug_device_reset(struct scsi_cmnd * SCpnt)
2547 {
2548         struct sdebug_dev_info * devip;
2549
2550         if (SCSI_DEBUG_OPT_NOISE & scsi_debug_opts)
2551                 printk(KERN_INFO "scsi_debug: device_reset\n");
2552         ++num_dev_resets;
2553         if (SCpnt) {
2554                 devip = devInfoReg(SCpnt->device);
2555                 if (devip)
2556                         devip->reset = 1;
2557         }
2558         return SUCCESS;
2559 }
2560
2561 static int scsi_debug_bus_reset(struct scsi_cmnd * SCpnt)
2562 {
2563         struct sdebug_host_info *sdbg_host;
2564         struct sdebug_dev_info * dev_info;
2565         struct scsi_device * sdp;
2566         struct Scsi_Host * hp;
2567
2568         if (SCSI_DEBUG_OPT_NOISE & scsi_debug_opts)
2569                 printk(KERN_INFO "scsi_debug: bus_reset\n");
2570         ++num_bus_resets;
2571         if (SCpnt && ((sdp = SCpnt->device)) && ((hp = sdp->host))) {
2572                 sdbg_host = *(struct sdebug_host_info **)shost_priv(hp);
2573                 if (sdbg_host) {
2574                         list_for_each_entry(dev_info,
2575                                             &sdbg_host->dev_info_list,
2576                                             dev_list)
2577                                 dev_info->reset = 1;
2578                 }
2579         }
2580         return SUCCESS;
2581 }
2582
2583 static int scsi_debug_host_reset(struct scsi_cmnd * SCpnt)
2584 {
2585         struct sdebug_host_info * sdbg_host;
2586         struct sdebug_dev_info * dev_info;
2587
2588         if (SCSI_DEBUG_OPT_NOISE & scsi_debug_opts)
2589                 printk(KERN_INFO "scsi_debug: host_reset\n");
2590         ++num_host_resets;
2591         spin_lock(&sdebug_host_list_lock);
2592         list_for_each_entry(sdbg_host, &sdebug_host_list, host_list) {
2593                 list_for_each_entry(dev_info, &sdbg_host->dev_info_list,
2594                                     dev_list)
2595                         dev_info->reset = 1;
2596         }
2597         spin_unlock(&sdebug_host_list_lock);
2598         stop_all_queued();
2599         return SUCCESS;
2600 }
2601
2602 /* Initializes timers in queued array */
2603 static void __init init_all_queued(void)
2604 {
2605         unsigned long iflags;
2606         int k;
2607         struct sdebug_queued_cmd * sqcp;
2608
2609         spin_lock_irqsave(&queued_arr_lock, iflags);
2610         for (k = 0; k < scsi_debug_max_queue; ++k) {
2611                 sqcp = &queued_arr[k];
2612                 init_timer(&sqcp->cmnd_timer);
2613                 sqcp->in_use = 0;
2614                 sqcp->a_cmnd = NULL;
2615         }
2616         spin_unlock_irqrestore(&queued_arr_lock, iflags);
2617 }
2618
2619 static void __init sdebug_build_parts(unsigned char *ramp,
2620                                       unsigned long store_size)
2621 {
2622         struct partition * pp;
2623         int starts[SDEBUG_MAX_PARTS + 2];
2624         int sectors_per_part, num_sectors, k;
2625         int heads_by_sects, start_sec, end_sec;
2626
2627         /* assume partition table already zeroed */
2628         if ((scsi_debug_num_parts < 1) || (store_size < 1048576))
2629                 return;
2630         if (scsi_debug_num_parts > SDEBUG_MAX_PARTS) {
2631                 scsi_debug_num_parts = SDEBUG_MAX_PARTS;
2632                 printk(KERN_WARNING "scsi_debug:build_parts: reducing "
2633                                     "partitions to %d\n", SDEBUG_MAX_PARTS);
2634         }
2635         num_sectors = (int)sdebug_store_sectors;
2636         sectors_per_part = (num_sectors - sdebug_sectors_per)
2637                            / scsi_debug_num_parts;
2638         heads_by_sects = sdebug_heads * sdebug_sectors_per;
2639         starts[0] = sdebug_sectors_per;
2640         for (k = 1; k < scsi_debug_num_parts; ++k)
2641                 starts[k] = ((k * sectors_per_part) / heads_by_sects)
2642                             * heads_by_sects;
2643         starts[scsi_debug_num_parts] = num_sectors;
2644         starts[scsi_debug_num_parts + 1] = 0;
2645
2646         ramp[510] = 0x55;       /* magic partition markings */
2647         ramp[511] = 0xAA;
2648         pp = (struct partition *)(ramp + 0x1be);
2649         for (k = 0; starts[k + 1]; ++k, ++pp) {
2650                 start_sec = starts[k];
2651                 end_sec = starts[k + 1] - 1;
2652                 pp->boot_ind = 0;
2653
2654                 pp->cyl = start_sec / heads_by_sects;
2655                 pp->head = (start_sec - (pp->cyl * heads_by_sects))
2656                            / sdebug_sectors_per;
2657                 pp->sector = (start_sec % sdebug_sectors_per) + 1;
2658
2659                 pp->end_cyl = end_sec / heads_by_sects;
2660                 pp->end_head = (end_sec - (pp->end_cyl * heads_by_sects))
2661                                / sdebug_sectors_per;
2662                 pp->end_sector = (end_sec % sdebug_sectors_per) + 1;
2663
2664                 pp->start_sect = start_sec;
2665                 pp->nr_sects = end_sec - start_sec + 1;
2666                 pp->sys_ind = 0x83;     /* plain Linux partition */
2667         }
2668 }
2669
2670 static int schedule_resp(struct scsi_cmnd * cmnd,
2671                          struct sdebug_dev_info * devip,
2672                          done_funct_t done, int scsi_result, int delta_jiff)
2673 {
2674         if ((SCSI_DEBUG_OPT_NOISE & scsi_debug_opts) && cmnd) {
2675                 if (scsi_result) {
2676                         struct scsi_device * sdp = cmnd->device;
2677
2678                         printk(KERN_INFO "scsi_debug:    <%u %u %u %u> "
2679                                "non-zero result=0x%x\n", sdp->host->host_no,
2680                                sdp->channel, sdp->id, sdp->lun, scsi_result);
2681                 }
2682         }
2683         if (cmnd && devip) {
2684                 /* simulate autosense by this driver */
2685                 if (SAM_STAT_CHECK_CONDITION == (scsi_result & 0xff))
2686                         memcpy(cmnd->sense_buffer, devip->sense_buff,
2687                                (SCSI_SENSE_BUFFERSIZE > SDEBUG_SENSE_LEN) ?
2688                                SDEBUG_SENSE_LEN : SCSI_SENSE_BUFFERSIZE);
2689         }
2690         if (delta_jiff <= 0) {
2691                 if (cmnd)
2692                         cmnd->result = scsi_result;
2693                 if (done)
2694                         done(cmnd);
2695                 return 0;
2696         } else {
2697                 unsigned long iflags;
2698                 int k;
2699                 struct sdebug_queued_cmd * sqcp = NULL;
2700
2701                 spin_lock_irqsave(&queued_arr_lock, iflags);
2702                 for (k = 0; k < scsi_debug_max_queue; ++k) {
2703                         sqcp = &queued_arr[k];
2704                         if (! sqcp->in_use)
2705                                 break;
2706                 }
2707                 if (k >= scsi_debug_max_queue) {
2708                         spin_unlock_irqrestore(&queued_arr_lock, iflags);
2709                         printk(KERN_WARNING "scsi_debug: can_queue exceeded\n");
2710                         return 1;       /* report busy to mid level */
2711                 }
2712                 sqcp->in_use = 1;
2713                 sqcp->a_cmnd = cmnd;
2714                 sqcp->scsi_result = scsi_result;
2715                 sqcp->done_funct = done;
2716                 sqcp->cmnd_timer.function = timer_intr_handler;
2717                 sqcp->cmnd_timer.data = k;
2718                 sqcp->cmnd_timer.expires = jiffies + delta_jiff;
2719                 add_timer(&sqcp->cmnd_timer);
2720                 spin_unlock_irqrestore(&queued_arr_lock, iflags);
2721                 if (cmnd)
2722                         cmnd->result = 0;
2723                 return 0;
2724         }
2725 }
2726 /* Note: The following macros create attribute files in the
2727    /sys/module/scsi_debug/parameters directory. Unfortunately this
2728    driver is unaware of a change and cannot trigger auxiliary actions
2729    as it can when the corresponding attribute in the
2730    /sys/bus/pseudo/drivers/scsi_debug directory is changed.
2731  */
2732 module_param_named(add_host, scsi_debug_add_host, int, S_IRUGO | S_IWUSR);
2733 module_param_named(ato, scsi_debug_ato, int, S_IRUGO);
2734 module_param_named(delay, scsi_debug_delay, int, S_IRUGO | S_IWUSR);
2735 module_param_named(dev_size_mb, scsi_debug_dev_size_mb, int, S_IRUGO);
2736 module_param_named(dif, scsi_debug_dif, int, S_IRUGO);
2737 module_param_named(dix, scsi_debug_dix, int, S_IRUGO);
2738 module_param_named(dsense, scsi_debug_dsense, int, S_IRUGO | S_IWUSR);
2739 module_param_named(every_nth, scsi_debug_every_nth, int, S_IRUGO | S_IWUSR);
2740 module_param_named(fake_rw, scsi_debug_fake_rw, int, S_IRUGO | S_IWUSR);
2741 module_param_named(guard, scsi_debug_guard, int, S_IRUGO);
2742 module_param_named(lbpu, scsi_debug_lbpu, int, S_IRUGO);
2743 module_param_named(lbpws, scsi_debug_lbpws, int, S_IRUGO);
2744 module_param_named(lbpws10, scsi_debug_lbpws10, int, S_IRUGO);
2745 module_param_named(lbprz, scsi_debug_lbprz, int, S_IRUGO);
2746 module_param_named(lowest_aligned, scsi_debug_lowest_aligned, int, S_IRUGO);
2747 module_param_named(max_luns, scsi_debug_max_luns, int, S_IRUGO | S_IWUSR);
2748 module_param_named(max_queue, scsi_debug_max_queue, int, S_IRUGO | S_IWUSR);
2749 module_param_named(no_lun_0, scsi_debug_no_lun_0, int, S_IRUGO | S_IWUSR);
2750 module_param_named(no_uld, scsi_debug_no_uld, int, S_IRUGO);
2751 module_param_named(num_parts, scsi_debug_num_parts, int, S_IRUGO);
2752 module_param_named(num_tgts, scsi_debug_num_tgts, int, S_IRUGO | S_IWUSR);
2753 module_param_named(opt_blks, scsi_debug_opt_blks, int, S_IRUGO);
2754 module_param_named(opts, scsi_debug_opts, int, S_IRUGO | S_IWUSR);
2755 module_param_named(physblk_exp, scsi_debug_physblk_exp, int, S_IRUGO);
2756 module_param_named(ptype, scsi_debug_ptype, int, S_IRUGO | S_IWUSR);
2757 module_param_named(scsi_level, scsi_debug_scsi_level, int, S_IRUGO);
2758 module_param_named(sector_size, scsi_debug_sector_size, int, S_IRUGO);
2759 module_param_named(unmap_alignment, scsi_debug_unmap_alignment, int, S_IRUGO);
2760 module_param_named(unmap_granularity, scsi_debug_unmap_granularity, int, S_IRUGO);
2761 module_param_named(unmap_max_blocks, scsi_debug_unmap_max_blocks, int, S_IRUGO);
2762 module_param_named(unmap_max_desc, scsi_debug_unmap_max_desc, int, S_IRUGO);
2763 module_param_named(virtual_gb, scsi_debug_virtual_gb, int, S_IRUGO | S_IWUSR);
2764 module_param_named(vpd_use_hostno, scsi_debug_vpd_use_hostno, int,
2765                    S_IRUGO | S_IWUSR);
2766 module_param_named(write_same_length, scsi_debug_write_same_length, int,
2767                    S_IRUGO | S_IWUSR);
2768
2769 MODULE_AUTHOR("Eric Youngdale + Douglas Gilbert");
2770 MODULE_DESCRIPTION("SCSI debug adapter driver");
2771 MODULE_LICENSE("GPL");
2772 MODULE_VERSION(SCSI_DEBUG_VERSION);
2773
2774 MODULE_PARM_DESC(add_host, "0..127 hosts allowed(def=1)");
2775 MODULE_PARM_DESC(ato, "application tag ownership: 0=disk 1=host (def=1)");
2776 MODULE_PARM_DESC(delay, "# of jiffies to delay response(def=1)");
2777 MODULE_PARM_DESC(dev_size_mb, "size in MB of ram shared by devs(def=8)");
2778 MODULE_PARM_DESC(dif, "data integrity field type: 0-3 (def=0)");
2779 MODULE_PARM_DESC(dix, "data integrity extensions mask (def=0)");
2780 MODULE_PARM_DESC(dsense, "use descriptor sense format(def=0 -> fixed)");
2781 MODULE_PARM_DESC(every_nth, "timeout every nth command(def=0)");
2782 MODULE_PARM_DESC(fake_rw, "fake reads/writes instead of copying (def=0)");
2783 MODULE_PARM_DESC(guard, "protection checksum: 0=crc, 1=ip (def=0)");
2784 MODULE_PARM_DESC(lbpu, "enable LBP, support UNMAP command (def=0)");
2785 MODULE_PARM_DESC(lbpws, "enable LBP, support WRITE SAME(16) with UNMAP bit (def=0)");
2786 MODULE_PARM_DESC(lbpws10, "enable LBP, support WRITE SAME(10) with UNMAP bit (def=0)");
2787 MODULE_PARM_DESC(lbprz, "unmapped blocks return 0 on read (def=1)");
2788 MODULE_PARM_DESC(lowest_aligned, "lowest aligned lba (def=0)");
2789 MODULE_PARM_DESC(max_luns, "number of LUNs per target to simulate(def=1)");
2790 MODULE_PARM_DESC(max_queue, "max number of queued commands (1 to 255(def))");
2791 MODULE_PARM_DESC(no_lun_0, "no LU number 0 (def=0 -> have lun 0)");
2792 MODULE_PARM_DESC(no_uld, "stop ULD (e.g. sd driver) attaching (def=0))");
2793 MODULE_PARM_DESC(num_parts, "number of partitions(def=0)");
2794 MODULE_PARM_DESC(num_tgts, "number of targets per host to simulate(def=1)");
2795 MODULE_PARM_DESC(opt_blks, "optimal transfer length in block (def=64)");
2796 MODULE_PARM_DESC(opts, "1->noise, 2->medium_err, 4->timeout, 8->recovered_err... (def=0)");
2797 MODULE_PARM_DESC(physblk_exp, "physical block exponent (def=0)");
2798 MODULE_PARM_DESC(ptype, "SCSI peripheral type(def=0[disk])");
2799 MODULE_PARM_DESC(scsi_level, "SCSI level to simulate(def=5[SPC-3])");
2800 MODULE_PARM_DESC(sector_size, "logical block size in bytes (def=512)");
2801 MODULE_PARM_DESC(unmap_alignment, "lowest aligned thin provisioning lba (def=0)");
2802 MODULE_PARM_DESC(unmap_granularity, "thin provisioning granularity in blocks (def=1)");
2803 MODULE_PARM_DESC(unmap_max_blocks, "max # of blocks can be unmapped in one cmd (def=0xffffffff)");
2804 MODULE_PARM_DESC(unmap_max_desc, "max # of ranges that can be unmapped in one cmd (def=256)");
2805 MODULE_PARM_DESC(virtual_gb, "virtual gigabyte size (def=0 -> use dev_size_mb)");
2806 MODULE_PARM_DESC(vpd_use_hostno, "0 -> dev ids ignore hostno (def=1 -> unique dev ids)");
2807 MODULE_PARM_DESC(write_same_length, "Maximum blocks per WRITE SAME cmd (def=0xffff)");
2808
2809 static char sdebug_info[256];
2810
2811 static const char * scsi_debug_info(struct Scsi_Host * shp)
2812 {
2813         sprintf(sdebug_info, "scsi_debug, version %s [%s], "
2814                 "dev_size_mb=%d, opts=0x%x", SCSI_DEBUG_VERSION,
2815                 scsi_debug_version_date, scsi_debug_dev_size_mb,
2816                 scsi_debug_opts);
2817         return sdebug_info;
2818 }
2819
2820 /* scsi_debug_proc_info
2821  * Used if the driver currently has no own support for /proc/scsi
2822  */
2823 static int scsi_debug_proc_info(struct Scsi_Host *host, char *buffer, char **start, off_t offset,
2824                                 int length, int inout)
2825 {
2826         int len, pos, begin;
2827         int orig_length;
2828
2829         orig_length = length;
2830
2831         if (inout == 1) {
2832                 char arr[16];
2833                 int minLen = length > 15 ? 15 : length;
2834
2835                 if (!capable(CAP_SYS_ADMIN) || !capable(CAP_SYS_RAWIO))
2836                         return -EACCES;
2837                 memcpy(arr, buffer, minLen);
2838                 arr[minLen] = '\0';
2839                 if (1 != sscanf(arr, "%d", &pos))
2840                         return -EINVAL;
2841                 scsi_debug_opts = pos;
2842                 if (scsi_debug_every_nth != 0)
2843                         scsi_debug_cmnd_count = 0;
2844                 return length;
2845         }
2846         begin = 0;
2847         pos = len = sprintf(buffer, "scsi_debug adapter driver, version "
2848             "%s [%s]\n"
2849             "num_tgts=%d, shared (ram) size=%d MB, opts=0x%x, "
2850             "every_nth=%d(curr:%d)\n"
2851             "delay=%d, max_luns=%d, scsi_level=%d\n"
2852             "sector_size=%d bytes, cylinders=%d, heads=%d, sectors=%d\n"
2853             "number of aborts=%d, device_reset=%d, bus_resets=%d, "
2854             "host_resets=%d\ndix_reads=%d dix_writes=%d dif_errors=%d\n",
2855             SCSI_DEBUG_VERSION, scsi_debug_version_date, scsi_debug_num_tgts,
2856             scsi_debug_dev_size_mb, scsi_debug_opts, scsi_debug_every_nth,
2857             scsi_debug_cmnd_count, scsi_debug_delay,
2858             scsi_debug_max_luns, scsi_debug_scsi_level,
2859             scsi_debug_sector_size, sdebug_cylinders_per, sdebug_heads,
2860             sdebug_sectors_per, num_aborts, num_dev_resets, num_bus_resets,
2861             num_host_resets, dix_reads, dix_writes, dif_errors);
2862         if (pos < offset) {
2863                 len = 0;
2864                 begin = pos;
2865         }
2866         *start = buffer + (offset - begin);     /* Start of wanted data */
2867         len -= (offset - begin);
2868         if (len > length)
2869                 len = length;
2870         return len;
2871 }
2872
2873 static ssize_t sdebug_delay_show(struct device_driver * ddp, char * buf)
2874 {
2875         return scnprintf(buf, PAGE_SIZE, "%d\n", scsi_debug_delay);
2876 }
2877
2878 static ssize_t sdebug_delay_store(struct device_driver * ddp,
2879                                   const char * buf, size_t count)
2880 {
2881         int delay;
2882         char work[20];
2883
2884         if (1 == sscanf(buf, "%10s", work)) {
2885                 if ((1 == sscanf(work, "%d", &delay)) && (delay >= 0)) {
2886                         scsi_debug_delay = delay;
2887                         return count;
2888                 }
2889         }
2890         return -EINVAL;
2891 }
2892 DRIVER_ATTR(delay, S_IRUGO | S_IWUSR, sdebug_delay_show,
2893             sdebug_delay_store);
2894
2895 static ssize_t sdebug_opts_show(struct device_driver * ddp, char * buf)
2896 {
2897         return scnprintf(buf, PAGE_SIZE, "0x%x\n", scsi_debug_opts);
2898 }
2899
2900 static ssize_t sdebug_opts_store(struct device_driver * ddp,
2901                                  const char * buf, size_t count)
2902 {
2903         int opts;
2904         char work[20];
2905
2906         if (1 == sscanf(buf, "%10s", work)) {
2907                 if (0 == strnicmp(work,"0x", 2)) {
2908                         if (1 == sscanf(&work[2], "%x", &opts))
2909                                 goto opts_done;
2910                 } else {
2911                         if (1 == sscanf(work, "%d", &opts))
2912                                 goto opts_done;
2913                 }
2914         }
2915         return -EINVAL;
2916 opts_done:
2917         scsi_debug_opts = opts;
2918         scsi_debug_cmnd_count = 0;
2919         return count;
2920 }
2921 DRIVER_ATTR(opts, S_IRUGO | S_IWUSR, sdebug_opts_show,
2922             sdebug_opts_store);
2923
2924 static ssize_t sdebug_ptype_show(struct device_driver * ddp, char * buf)
2925 {
2926         return scnprintf(buf, PAGE_SIZE, "%d\n", scsi_debug_ptype);
2927 }
2928 static ssize_t sdebug_ptype_store(struct device_driver * ddp,
2929                                   const char * buf, size_t count)
2930 {
2931         int n;
2932
2933         if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
2934                 scsi_debug_ptype = n;
2935                 return count;
2936         }
2937         return -EINVAL;
2938 }
2939 DRIVER_ATTR(ptype, S_IRUGO | S_IWUSR, sdebug_ptype_show, sdebug_ptype_store);
2940
2941 static ssize_t sdebug_dsense_show(struct device_driver * ddp, char * buf)
2942 {
2943         return scnprintf(buf, PAGE_SIZE, "%d\n", scsi_debug_dsense);
2944 }
2945 static ssize_t sdebug_dsense_store(struct device_driver * ddp,
2946                                   const char * buf, size_t count)
2947 {
2948         int n;
2949
2950         if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
2951                 scsi_debug_dsense = n;
2952                 return count;
2953         }
2954         return -EINVAL;
2955 }
2956 DRIVER_ATTR(dsense, S_IRUGO | S_IWUSR, sdebug_dsense_show,
2957             sdebug_dsense_store);
2958
2959 static ssize_t sdebug_fake_rw_show(struct device_driver * ddp, char * buf)
2960 {
2961         return scnprintf(buf, PAGE_SIZE, "%d\n", scsi_debug_fake_rw);
2962 }
2963 static ssize_t sdebug_fake_rw_store(struct device_driver * ddp,
2964                                     const char * buf, size_t count)
2965 {
2966         int n;
2967
2968         if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
2969                 scsi_debug_fake_rw = n;
2970                 return count;
2971         }
2972         return -EINVAL;
2973 }
2974 DRIVER_ATTR(fake_rw, S_IRUGO | S_IWUSR, sdebug_fake_rw_show,
2975             sdebug_fake_rw_store);
2976
2977 static ssize_t sdebug_no_lun_0_show(struct device_driver * ddp, char * buf)
2978 {
2979         return scnprintf(buf, PAGE_SIZE, "%d\n", scsi_debug_no_lun_0);
2980 }
2981 static ssize_t sdebug_no_lun_0_store(struct device_driver * ddp,
2982                                      const char * buf, size_t count)
2983 {
2984         int n;
2985
2986         if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
2987                 scsi_debug_no_lun_0 = n;
2988                 return count;
2989         }
2990         return -EINVAL;
2991 }
2992 DRIVER_ATTR(no_lun_0, S_IRUGO | S_IWUSR, sdebug_no_lun_0_show,
2993             sdebug_no_lun_0_store);
2994
2995 static ssize_t sdebug_num_tgts_show(struct device_driver * ddp, char * buf)
2996 {
2997         return scnprintf(buf, PAGE_SIZE, "%d\n", scsi_debug_num_tgts);
2998 }
2999 static ssize_t sdebug_num_tgts_store(struct device_driver * ddp,
3000                                      const char * buf, size_t count)
3001 {
3002         int n;
3003
3004         if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
3005                 scsi_debug_num_tgts = n;
3006                 sdebug_max_tgts_luns();
3007                 return count;
3008         }
3009         return -EINVAL;
3010 }
3011 DRIVER_ATTR(num_tgts, S_IRUGO | S_IWUSR, sdebug_num_tgts_show,
3012             sdebug_num_tgts_store);
3013
3014 static ssize_t sdebug_dev_size_mb_show(struct device_driver * ddp, char * buf)
3015 {
3016         return scnprintf(buf, PAGE_SIZE, "%d\n", scsi_debug_dev_size_mb);
3017 }
3018 DRIVER_ATTR(dev_size_mb, S_IRUGO, sdebug_dev_size_mb_show, NULL);
3019
3020 static ssize_t sdebug_num_parts_show(struct device_driver * ddp, char * buf)
3021 {
3022         return scnprintf(buf, PAGE_SIZE, "%d\n", scsi_debug_num_parts);
3023 }
3024 DRIVER_ATTR(num_parts, S_IRUGO, sdebug_num_parts_show, NULL);
3025
3026 static ssize_t sdebug_every_nth_show(struct device_driver * ddp, char * buf)
3027 {
3028         return scnprintf(buf, PAGE_SIZE, "%d\n", scsi_debug_every_nth);
3029 }
3030 static ssize_t sdebug_every_nth_store(struct device_driver * ddp,
3031                                       const char * buf, size_t count)
3032 {
3033         int nth;
3034
3035         if ((count > 0) && (1 == sscanf(buf, "%d", &nth))) {
3036                 scsi_debug_every_nth = nth;
3037                 scsi_debug_cmnd_count = 0;
3038                 return count;
3039         }
3040         return -EINVAL;
3041 }
3042 DRIVER_ATTR(every_nth, S_IRUGO | S_IWUSR, sdebug_every_nth_show,
3043             sdebug_every_nth_store);
3044
3045 static ssize_t sdebug_max_luns_show(struct device_driver * ddp, char * buf)
3046 {
3047         return scnprintf(buf, PAGE_SIZE, "%d\n", scsi_debug_max_luns);
3048 }
3049 static ssize_t sdebug_max_luns_store(struct device_driver * ddp,
3050                                      const char * buf, size_t count)
3051 {
3052         int n;
3053
3054         if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
3055                 scsi_debug_max_luns = n;
3056                 sdebug_max_tgts_luns();
3057                 return count;
3058         }
3059         return -EINVAL;
3060 }
3061 DRIVER_ATTR(max_luns, S_IRUGO | S_IWUSR, sdebug_max_luns_show,
3062             sdebug_max_luns_store);
3063
3064 static ssize_t sdebug_max_queue_show(struct device_driver * ddp, char * buf)
3065 {
3066         return scnprintf(buf, PAGE_SIZE, "%d\n", scsi_debug_max_queue);
3067 }
3068 static ssize_t sdebug_max_queue_store(struct device_driver * ddp,
3069                                       const char * buf, size_t count)
3070 {
3071         int n;
3072
3073         if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n > 0) &&
3074             (n <= SCSI_DEBUG_CANQUEUE)) {
3075                 scsi_debug_max_queue = n;
3076                 return count;
3077         }
3078         return -EINVAL;
3079 }
3080 DRIVER_ATTR(max_queue, S_IRUGO | S_IWUSR, sdebug_max_queue_show,
3081             sdebug_max_queue_store);
3082
3083 static ssize_t sdebug_no_uld_show(struct device_driver * ddp, char * buf)
3084 {
3085         return scnprintf(buf, PAGE_SIZE, "%d\n", scsi_debug_no_uld);
3086 }
3087 DRIVER_ATTR(no_uld, S_IRUGO, sdebug_no_uld_show, NULL);
3088
3089 static ssize_t sdebug_scsi_level_show(struct device_driver * ddp, char * buf)
3090 {
3091         return scnprintf(buf, PAGE_SIZE, "%d\n", scsi_debug_scsi_level);
3092 }
3093 DRIVER_ATTR(scsi_level, S_IRUGO, sdebug_scsi_level_show, NULL);
3094
3095 static ssize_t sdebug_virtual_gb_show(struct device_driver * ddp, char * buf)
3096 {
3097         return scnprintf(buf, PAGE_SIZE, "%d\n", scsi_debug_virtual_gb);
3098 }
3099 static ssize_t sdebug_virtual_gb_store(struct device_driver * ddp,
3100                                        const char * buf, size_t count)
3101 {
3102         int n;
3103
3104         if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
3105                 scsi_debug_virtual_gb = n;
3106
3107                 sdebug_capacity = get_sdebug_capacity();
3108
3109                 return count;
3110         }
3111         return -EINVAL;
3112 }
3113 DRIVER_ATTR(virtual_gb, S_IRUGO | S_IWUSR, sdebug_virtual_gb_show,
3114             sdebug_virtual_gb_store);
3115
3116 static ssize_t sdebug_add_host_show(struct device_driver * ddp, char * buf)
3117 {
3118         return scnprintf(buf, PAGE_SIZE, "%d\n", scsi_debug_add_host);
3119 }
3120
3121 static ssize_t sdebug_add_host_store(struct device_driver * ddp,
3122                                      const char * buf, size_t count)
3123 {
3124         int delta_hosts;
3125
3126         if (sscanf(buf, "%d", &delta_hosts) != 1)
3127                 return -EINVAL;
3128         if (delta_hosts > 0) {
3129                 do {
3130                         sdebug_add_adapter();
3131                 } while (--delta_hosts);
3132         } else if (delta_hosts < 0) {
3133                 do {
3134                         sdebug_remove_adapter();
3135                 } while (++delta_hosts);
3136         }
3137         return count;
3138 }
3139 DRIVER_ATTR(add_host, S_IRUGO | S_IWUSR, sdebug_add_host_show,
3140             sdebug_add_host_store);
3141
3142 static ssize_t sdebug_vpd_use_hostno_show(struct device_driver * ddp,
3143                                           char * buf)
3144 {
3145         return scnprintf(buf, PAGE_SIZE, "%d\n", scsi_debug_vpd_use_hostno);
3146 }
3147 static ssize_t sdebug_vpd_use_hostno_store(struct device_driver * ddp,
3148                                            const char * buf, size_t count)
3149 {
3150         int n;
3151
3152         if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
3153                 scsi_debug_vpd_use_hostno = n;
3154                 return count;
3155         }
3156         return -EINVAL;
3157 }
3158 DRIVER_ATTR(vpd_use_hostno, S_IRUGO | S_IWUSR, sdebug_vpd_use_hostno_show,
3159             sdebug_vpd_use_hostno_store);
3160
3161 static ssize_t sdebug_sector_size_show(struct device_driver * ddp, char * buf)
3162 {
3163         return scnprintf(buf, PAGE_SIZE, "%u\n", scsi_debug_sector_size);
3164 }
3165 DRIVER_ATTR(sector_size, S_IRUGO, sdebug_sector_size_show, NULL);
3166
3167 static ssize_t sdebug_dix_show(struct device_driver *ddp, char *buf)
3168 {
3169         return scnprintf(buf, PAGE_SIZE, "%d\n", scsi_debug_dix);
3170 }
3171 DRIVER_ATTR(dix, S_IRUGO, sdebug_dix_show, NULL);
3172
3173 static ssize_t sdebug_dif_show(struct device_driver *ddp, char *buf)
3174 {
3175         return scnprintf(buf, PAGE_SIZE, "%d\n", scsi_debug_dif);
3176 }
3177 DRIVER_ATTR(dif, S_IRUGO, sdebug_dif_show, NULL);
3178
3179 static ssize_t sdebug_guard_show(struct device_driver *ddp, char *buf)
3180 {
3181         return scnprintf(buf, PAGE_SIZE, "%d\n", scsi_debug_guard);
3182 }
3183 DRIVER_ATTR(guard, S_IRUGO, sdebug_guard_show, NULL);
3184
3185 static ssize_t sdebug_ato_show(struct device_driver *ddp, char *buf)
3186 {
3187         return scnprintf(buf, PAGE_SIZE, "%d\n", scsi_debug_ato);
3188 }
3189 DRIVER_ATTR(ato, S_IRUGO, sdebug_ato_show, NULL);
3190
3191 static ssize_t sdebug_map_show(struct device_driver *ddp, char *buf)
3192 {
3193         ssize_t count;
3194
3195         if (!scsi_debug_lbp())
3196                 return scnprintf(buf, PAGE_SIZE, "0-%u\n",
3197                                  sdebug_store_sectors);
3198
3199         count = bitmap_scnlistprintf(buf, PAGE_SIZE, map_storep, map_size);
3200
3201         buf[count++] = '\n';
3202         buf[count++] = 0;
3203
3204         return count;
3205 }
3206 DRIVER_ATTR(map, S_IRUGO, sdebug_map_show, NULL);
3207
3208
3209 /* Note: The following function creates attribute files in the
3210    /sys/bus/pseudo/drivers/scsi_debug directory. The advantage of these
3211    files (over those found in the /sys/module/scsi_debug/parameters
3212    directory) is that auxiliary actions can be triggered when an attribute
3213    is changed. For example see: sdebug_add_host_store() above.
3214  */
3215 static int do_create_driverfs_files(void)
3216 {
3217         int ret;
3218
3219         ret = driver_create_file(&sdebug_driverfs_driver, &driver_attr_add_host);
3220         ret |= driver_create_file(&sdebug_driverfs_driver, &driver_attr_delay);
3221         ret |= driver_create_file(&sdebug_driverfs_driver, &driver_attr_dev_size_mb);
3222         ret |= driver_create_file(&sdebug_driverfs_driver, &driver_attr_dsense);
3223         ret |= driver_create_file(&sdebug_driverfs_driver, &driver_attr_every_nth);
3224         ret |= driver_create_file(&sdebug_driverfs_driver, &driver_attr_fake_rw);
3225         ret |= driver_create_file(&sdebug_driverfs_driver, &driver_attr_max_luns);
3226         ret |= driver_create_file(&sdebug_driverfs_driver, &driver_attr_max_queue);
3227         ret |= driver_create_file(&sdebug_driverfs_driver, &driver_attr_no_lun_0);
3228         ret |= driver_create_file(&sdebug_driverfs_driver, &driver_attr_no_uld);
3229         ret |= driver_create_file(&sdebug_driverfs_driver, &driver_attr_num_parts);
3230         ret |= driver_create_file(&sdebug_driverfs_driver, &driver_attr_num_tgts);
3231         ret |= driver_create_file(&sdebug_driverfs_driver, &driver_attr_ptype);
3232         ret |= driver_create_file(&sdebug_driverfs_driver, &driver_attr_opts);
3233         ret |= driver_create_file(&sdebug_driverfs_driver, &driver_attr_scsi_level);
3234         ret |= driver_create_file(&sdebug_driverfs_driver, &driver_attr_virtual_gb);
3235         ret |= driver_create_file(&sdebug_driverfs_driver, &driver_attr_vpd_use_hostno);
3236         ret |= driver_create_file(&sdebug_driverfs_driver, &driver_attr_sector_size);
3237         ret |= driver_create_file(&sdebug_driverfs_driver, &driver_attr_dix);
3238         ret |= driver_create_file(&sdebug_driverfs_driver, &driver_attr_dif);
3239         ret |= driver_create_file(&sdebug_driverfs_driver, &driver_attr_guard);
3240         ret |= driver_create_file(&sdebug_driverfs_driver, &driver_attr_ato);
3241         ret |= driver_create_file(&sdebug_driverfs_driver, &driver_attr_map);
3242         return ret;
3243 }
3244
3245 static void do_remove_driverfs_files(void)
3246 {
3247         driver_remove_file(&sdebug_driverfs_driver, &driver_attr_map);
3248         driver_remove_file(&sdebug_driverfs_driver, &driver_attr_ato);
3249         driver_remove_file(&sdebug_driverfs_driver, &driver_attr_guard);
3250         driver_remove_file(&sdebug_driverfs_driver, &driver_attr_dif);
3251         driver_remove_file(&sdebug_driverfs_driver, &driver_attr_dix);
3252         driver_remove_file(&sdebug_driverfs_driver, &driver_attr_sector_size);
3253         driver_remove_file(&sdebug_driverfs_driver, &driver_attr_vpd_use_hostno);
3254         driver_remove_file(&sdebug_driverfs_driver, &driver_attr_virtual_gb);
3255         driver_remove_file(&sdebug_driverfs_driver, &driver_attr_scsi_level);
3256         driver_remove_file(&sdebug_driverfs_driver, &driver_attr_opts);
3257         driver_remove_file(&sdebug_driverfs_driver, &driver_attr_ptype);
3258         driver_remove_file(&sdebug_driverfs_driver, &driver_attr_num_tgts);
3259         driver_remove_file(&sdebug_driverfs_driver, &driver_attr_num_parts);
3260         driver_remove_file(&sdebug_driverfs_driver, &driver_attr_no_uld);
3261         driver_remove_file(&sdebug_driverfs_driver, &driver_attr_no_lun_0);
3262         driver_remove_file(&sdebug_driverfs_driver, &driver_attr_max_queue);
3263         driver_remove_file(&sdebug_driverfs_driver, &driver_attr_max_luns);
3264         driver_remove_file(&sdebug_driverfs_driver, &driver_attr_fake_rw);
3265         driver_remove_file(&sdebug_driverfs_driver, &driver_attr_every_nth);
3266         driver_remove_file(&sdebug_driverfs_driver, &driver_attr_dsense);
3267         driver_remove_file(&sdebug_driverfs_driver, &driver_attr_dev_size_mb);
3268         driver_remove_file(&sdebug_driverfs_driver, &driver_attr_delay);
3269         driver_remove_file(&sdebug_driverfs_driver, &driver_attr_add_host);
3270 }
3271
3272 struct device *pseudo_primary;
3273
3274 static int __init scsi_debug_init(void)
3275 {
3276         unsigned long sz;
3277         int host_to_add;
3278         int k;
3279         int ret;
3280
3281         switch (scsi_debug_sector_size) {
3282         case  512:
3283         case 1024:
3284         case 2048:
3285         case 4096:
3286                 break;
3287         default:
3288                 printk(KERN_ERR "scsi_debug_init: invalid sector_size %d\n",
3289                        scsi_debug_sector_size);
3290                 return -EINVAL;
3291         }
3292
3293         switch (scsi_debug_dif) {
3294
3295         case SD_DIF_TYPE0_PROTECTION:
3296         case SD_DIF_TYPE1_PROTECTION:
3297         case SD_DIF_TYPE2_PROTECTION:
3298         case SD_DIF_TYPE3_PROTECTION:
3299                 break;
3300
3301         default:
3302                 printk(KERN_ERR "scsi_debug_init: dif must be 0, 1, 2 or 3\n");
3303                 return -EINVAL;
3304         }
3305
3306         if (scsi_debug_guard > 1) {
3307                 printk(KERN_ERR "scsi_debug_init: guard must be 0 or 1\n");
3308                 return -EINVAL;
3309         }
3310
3311         if (scsi_debug_ato > 1) {
3312                 printk(KERN_ERR "scsi_debug_init: ato must be 0 or 1\n");
3313                 return -EINVAL;
3314         }
3315
3316         if (scsi_debug_physblk_exp > 15) {
3317                 printk(KERN_ERR "scsi_debug_init: invalid physblk_exp %u\n",
3318                        scsi_debug_physblk_exp);
3319                 return -EINVAL;
3320         }
3321
3322         if (scsi_debug_lowest_aligned > 0x3fff) {
3323                 printk(KERN_ERR "scsi_debug_init: lowest_aligned too big: %u\n",
3324                        scsi_debug_lowest_aligned);
3325                 return -EINVAL;
3326         }
3327
3328         if (scsi_debug_dev_size_mb < 1)
3329                 scsi_debug_dev_size_mb = 1;  /* force minimum 1 MB ramdisk */
3330         sz = (unsigned long)scsi_debug_dev_size_mb * 1048576;
3331         sdebug_store_sectors = sz / scsi_debug_sector_size;
3332         sdebug_capacity = get_sdebug_capacity();
3333
3334         /* play around with geometry, don't waste too much on track 0 */
3335         sdebug_heads = 8;
3336         sdebug_sectors_per = 32;
3337         if (scsi_debug_dev_size_mb >= 16)
3338                 sdebug_heads = 32;
3339         else if (scsi_debug_dev_size_mb >= 256)
3340                 sdebug_heads = 64;
3341         sdebug_cylinders_per = (unsigned long)sdebug_capacity /
3342                                (sdebug_sectors_per * sdebug_heads);
3343         if (sdebug_cylinders_per >= 1024) {
3344                 /* other LLDs do this; implies >= 1GB ram disk ... */
3345                 sdebug_heads = 255;
3346                 sdebug_sectors_per = 63;
3347                 sdebug_cylinders_per = (unsigned long)sdebug_capacity /
3348                                (sdebug_sectors_per * sdebug_heads);
3349         }
3350
3351         fake_storep = vmalloc(sz);
3352         if (NULL == fake_storep) {
3353                 printk(KERN_ERR "scsi_debug_init: out of memory, 1\n");
3354                 return -ENOMEM;
3355         }
3356         memset(fake_storep, 0, sz);
3357         if (scsi_debug_num_parts > 0)
3358                 sdebug_build_parts(fake_storep, sz);
3359
3360         if (scsi_debug_dif) {
3361                 int dif_size;
3362
3363                 dif_size = sdebug_store_sectors * sizeof(struct sd_dif_tuple);
3364                 dif_storep = vmalloc(dif_size);
3365
3366                 printk(KERN_ERR "scsi_debug_init: dif_storep %u bytes @ %p\n",
3367                        dif_size, dif_storep);
3368
3369                 if (dif_storep == NULL) {
3370                         printk(KERN_ERR "scsi_debug_init: out of mem. (DIX)\n");
3371                         ret = -ENOMEM;
3372                         goto free_vm;
3373                 }
3374
3375                 memset(dif_storep, 0xff, dif_size);
3376         }
3377
3378         /* Logical Block Provisioning */
3379         if (scsi_debug_lbp()) {
3380                 unsigned int map_bytes;
3381
3382                 scsi_debug_unmap_max_blocks =
3383                         clamp(scsi_debug_unmap_max_blocks, 0U, 0xffffffffU);
3384
3385                 scsi_debug_unmap_max_desc =
3386                         clamp(scsi_debug_unmap_max_desc, 0U, 256U);
3387
3388                 scsi_debug_unmap_granularity =
3389                         clamp(scsi_debug_unmap_granularity, 1U, 0xffffffffU);
3390
3391                 if (scsi_debug_unmap_alignment &&
3392                     scsi_debug_unmap_granularity < scsi_debug_unmap_alignment) {
3393                         printk(KERN_ERR
3394                                "%s: ERR: unmap_granularity < unmap_alignment\n",
3395                                __func__);
3396                         return -EINVAL;
3397                 }
3398
3399                 map_size = (sdebug_store_sectors / scsi_debug_unmap_granularity);
3400                 map_bytes = map_size >> 3;
3401                 map_storep = vmalloc(map_bytes);
3402
3403                 printk(KERN_INFO "scsi_debug_init: %lu provisioning blocks\n",
3404                        map_size);
3405
3406                 if (map_storep == NULL) {
3407                         printk(KERN_ERR "scsi_debug_init: out of mem. (MAP)\n");
3408                         ret = -ENOMEM;
3409                         goto free_vm;
3410                 }
3411
3412                 memset(map_storep, 0x0, map_bytes);
3413
3414                 /* Map first 1KB for partition table */
3415                 if (scsi_debug_num_parts)
3416                         map_region(0, 2);
3417         }
3418
3419         pseudo_primary = root_device_register("pseudo_0");
3420         if (IS_ERR(pseudo_primary)) {
3421                 printk(KERN_WARNING "scsi_debug: root_device_register() error\n");
3422                 ret = PTR_ERR(pseudo_primary);
3423                 goto free_vm;
3424         }
3425         ret = bus_register(&pseudo_lld_bus);
3426         if (ret < 0) {
3427                 printk(KERN_WARNING "scsi_debug: bus_register error: %d\n",
3428                         ret);
3429                 goto dev_unreg;
3430         }
3431         ret = driver_register(&sdebug_driverfs_driver);
3432         if (ret < 0) {
3433                 printk(KERN_WARNING "scsi_debug: driver_register error: %d\n",
3434                         ret);
3435                 goto bus_unreg;
3436         }
3437         ret = do_create_driverfs_files();
3438         if (ret < 0) {
3439                 printk(KERN_WARNING "scsi_debug: driver_create_file error: %d\n",
3440                         ret);
3441                 goto del_files;
3442         }
3443
3444         init_all_queued();
3445
3446         host_to_add = scsi_debug_add_host;
3447         scsi_debug_add_host = 0;
3448
3449         for (k = 0; k < host_to_add; k++) {
3450                 if (sdebug_add_adapter()) {
3451                         printk(KERN_ERR "scsi_debug_init: "
3452                                "sdebug_add_adapter failed k=%d\n", k);
3453                         break;
3454                 }
3455         }
3456
3457         if (SCSI_DEBUG_OPT_NOISE & scsi_debug_opts) {
3458                 printk(KERN_INFO "scsi_debug_init: built %d host(s)\n",
3459                        scsi_debug_add_host);
3460         }
3461         return 0;
3462
3463 del_files:
3464         do_remove_driverfs_files();
3465         driver_unregister(&sdebug_driverfs_driver);
3466 bus_unreg:
3467         bus_unregister(&pseudo_lld_bus);
3468 dev_unreg:
3469         root_device_unregister(pseudo_primary);
3470 free_vm:
3471         if (map_storep)
3472                 vfree(map_storep);
3473         if (dif_storep)
3474                 vfree(dif_storep);
3475         vfree(fake_storep);
3476
3477         return ret;
3478 }
3479
3480 static void __exit scsi_debug_exit(void)
3481 {
3482         int k = scsi_debug_add_host;
3483
3484         stop_all_queued();
3485         for (; k; k--)
3486                 sdebug_remove_adapter();
3487         do_remove_driverfs_files();
3488         driver_unregister(&sdebug_driverfs_driver);
3489         bus_unregister(&pseudo_lld_bus);
3490         root_device_unregister(pseudo_primary);
3491
3492         if (dif_storep)
3493                 vfree(dif_storep);
3494
3495         vfree(fake_storep);
3496 }
3497
3498 device_initcall(scsi_debug_init);
3499 module_exit(scsi_debug_exit);
3500
3501 static void sdebug_release_adapter(struct device * dev)
3502 {
3503         struct sdebug_host_info *sdbg_host;
3504
3505         sdbg_host = to_sdebug_host(dev);
3506         kfree(sdbg_host);
3507 }
3508
3509 static int sdebug_add_adapter(void)
3510 {
3511         int k, devs_per_host;
3512         int error = 0;
3513         struct sdebug_host_info *sdbg_host;
3514         struct sdebug_dev_info *sdbg_devinfo, *tmp;
3515
3516         sdbg_host = kzalloc(sizeof(*sdbg_host),GFP_KERNEL);
3517         if (NULL == sdbg_host) {
3518                 printk(KERN_ERR "%s: out of memory at line %d\n",
3519                        __func__, __LINE__);
3520                 return -ENOMEM;
3521         }
3522
3523         INIT_LIST_HEAD(&sdbg_host->dev_info_list);
3524
3525         devs_per_host = scsi_debug_num_tgts * scsi_debug_max_luns;
3526         for (k = 0; k < devs_per_host; k++) {
3527                 sdbg_devinfo = sdebug_device_create(sdbg_host, GFP_KERNEL);
3528                 if (!sdbg_devinfo) {
3529                         printk(KERN_ERR "%s: out of memory at line %d\n",
3530                                __func__, __LINE__);
3531                         error = -ENOMEM;
3532                         goto clean;
3533                 }
3534         }
3535
3536         spin_lock(&sdebug_host_list_lock);
3537         list_add_tail(&sdbg_host->host_list, &sdebug_host_list);
3538         spin_unlock(&sdebug_host_list_lock);
3539
3540         sdbg_host->dev.bus = &pseudo_lld_bus;
3541         sdbg_host->dev.parent = pseudo_primary;
3542         sdbg_host->dev.release = &sdebug_release_adapter;
3543         dev_set_name(&sdbg_host->dev, "adapter%d", scsi_debug_add_host);
3544
3545         error = device_register(&sdbg_host->dev);
3546
3547         if (error)
3548                 goto clean;
3549
3550         ++scsi_debug_add_host;
3551         return error;
3552
3553 clean:
3554         list_for_each_entry_safe(sdbg_devinfo, tmp, &sdbg_host->dev_info_list,
3555                                  dev_list) {
3556                 list_del(&sdbg_devinfo->dev_list);
3557                 kfree(sdbg_devinfo);
3558         }
3559
3560         kfree(sdbg_host);
3561         return error;
3562 }
3563
3564 static void sdebug_remove_adapter(void)
3565 {
3566         struct sdebug_host_info * sdbg_host = NULL;
3567
3568         spin_lock(&sdebug_host_list_lock);
3569         if (!list_empty(&sdebug_host_list)) {
3570                 sdbg_host = list_entry(sdebug_host_list.prev,
3571                                        struct sdebug_host_info, host_list);
3572                 list_del(&sdbg_host->host_list);
3573         }
3574         spin_unlock(&sdebug_host_list_lock);
3575
3576         if (!sdbg_host)
3577                 return;
3578
3579         device_unregister(&sdbg_host->dev);
3580         --scsi_debug_add_host;
3581 }
3582
3583 static
3584 int scsi_debug_queuecommand_lck(struct scsi_cmnd *SCpnt, done_funct_t done)
3585 {
3586         unsigned char *cmd = (unsigned char *) SCpnt->cmnd;
3587         int len, k;
3588         unsigned int num;
3589         unsigned long long lba;
3590         u32 ei_lba;
3591         int errsts = 0;
3592         int target = SCpnt->device->id;
3593         struct sdebug_dev_info *devip = NULL;
3594         int inj_recovered = 0;
3595         int inj_transport = 0;
3596         int inj_dif = 0;
3597         int inj_dix = 0;
3598         int delay_override = 0;
3599         int unmap = 0;
3600
3601         scsi_set_resid(SCpnt, 0);
3602         if ((SCSI_DEBUG_OPT_NOISE & scsi_debug_opts) && cmd) {
3603                 printk(KERN_INFO "scsi_debug: cmd ");
3604                 for (k = 0, len = SCpnt->cmd_len; k < len; ++k)
3605                         printk("%02x ", (int)cmd[k]);
3606                 printk("\n");
3607         }
3608
3609         if (target == SCpnt->device->host->hostt->this_id) {
3610                 printk(KERN_INFO "scsi_debug: initiator's id used as "
3611                        "target!\n");
3612                 return schedule_resp(SCpnt, NULL, done,
3613                                      DID_NO_CONNECT << 16, 0);
3614         }
3615
3616         if ((SCpnt->device->lun >= scsi_debug_max_luns) &&
3617             (SCpnt->device->lun != SAM2_WLUN_REPORT_LUNS))
3618                 return schedule_resp(SCpnt, NULL, done,
3619                                      DID_NO_CONNECT << 16, 0);
3620         devip = devInfoReg(SCpnt->device);
3621         if (NULL == devip)
3622                 return schedule_resp(SCpnt, NULL, done,
3623                                      DID_NO_CONNECT << 16, 0);
3624
3625         if ((scsi_debug_every_nth != 0) &&
3626             (++scsi_debug_cmnd_count >= abs(scsi_debug_every_nth))) {
3627                 scsi_debug_cmnd_count = 0;
3628                 if (scsi_debug_every_nth < -1)
3629                         scsi_debug_every_nth = -1;
3630                 if (SCSI_DEBUG_OPT_TIMEOUT & scsi_debug_opts)
3631                         return 0; /* ignore command causing timeout */
3632                 else if (SCSI_DEBUG_OPT_MAC_TIMEOUT & scsi_debug_opts &&
3633                          scsi_medium_access_command(SCpnt))
3634                         return 0; /* time out reads and writes */
3635                 else if (SCSI_DEBUG_OPT_RECOVERED_ERR & scsi_debug_opts)
3636                         inj_recovered = 1; /* to reads and writes below */
3637                 else if (SCSI_DEBUG_OPT_TRANSPORT_ERR & scsi_debug_opts)
3638                         inj_transport = 1; /* to reads and writes below */
3639                 else if (SCSI_DEBUG_OPT_DIF_ERR & scsi_debug_opts)
3640                         inj_dif = 1; /* to reads and writes below */
3641                 else if (SCSI_DEBUG_OPT_DIX_ERR & scsi_debug_opts)
3642                         inj_dix = 1; /* to reads and writes below */
3643         }
3644
3645         if (devip->wlun) {
3646                 switch (*cmd) {
3647                 case INQUIRY:
3648                 case REQUEST_SENSE:
3649                 case TEST_UNIT_READY:
3650                 case REPORT_LUNS:
3651                         break;  /* only allowable wlun commands */
3652                 default:
3653                         if (SCSI_DEBUG_OPT_NOISE & scsi_debug_opts)
3654                                 printk(KERN_INFO "scsi_debug: Opcode: 0x%x "
3655                                        "not supported for wlun\n", *cmd);
3656                         mk_sense_buffer(devip, ILLEGAL_REQUEST,
3657                                         INVALID_OPCODE, 0);
3658                         errsts = check_condition_result;
3659                         return schedule_resp(SCpnt, devip, done, errsts,
3660                                              0);
3661                 }
3662         }
3663
3664         switch (*cmd) {
3665         case INQUIRY:     /* mandatory, ignore unit attention */
3666                 delay_override = 1;
3667                 errsts = resp_inquiry(SCpnt, target, devip);
3668                 break;
3669         case REQUEST_SENSE:     /* mandatory, ignore unit attention */
3670                 delay_override = 1;
3671                 errsts = resp_requests(SCpnt, devip);
3672                 break;
3673         case REZERO_UNIT:       /* actually this is REWIND for SSC */
3674         case START_STOP:
3675                 errsts = resp_start_stop(SCpnt, devip);
3676                 break;
3677         case ALLOW_MEDIUM_REMOVAL:
3678                 errsts = check_readiness(SCpnt, 1, devip);
3679                 if (errsts)
3680                         break;
3681                 if (SCSI_DEBUG_OPT_NOISE & scsi_debug_opts)
3682                         printk(KERN_INFO "scsi_debug: Medium removal %s\n",
3683                                cmd[4] ? "inhibited" : "enabled");
3684                 break;
3685         case SEND_DIAGNOSTIC:     /* mandatory */
3686                 errsts = check_readiness(SCpnt, 1, devip);
3687                 break;
3688         case TEST_UNIT_READY:     /* mandatory */
3689                 delay_override = 1;
3690                 errsts = check_readiness(SCpnt, 0, devip);
3691                 break;
3692         case RESERVE:
3693                 errsts = check_readiness(SCpnt, 1, devip);
3694                 break;
3695         case RESERVE_10:
3696                 errsts = check_readiness(SCpnt, 1, devip);
3697                 break;
3698         case RELEASE:
3699                 errsts = check_readiness(SCpnt, 1, devip);
3700                 break;
3701         case RELEASE_10:
3702                 errsts = check_readiness(SCpnt, 1, devip);
3703                 break;
3704         case READ_CAPACITY:
3705                 errsts = resp_readcap(SCpnt, devip);
3706                 break;
3707         case SERVICE_ACTION_IN:
3708                 if (cmd[1] == SAI_READ_CAPACITY_16)
3709                         errsts = resp_readcap16(SCpnt, devip);
3710                 else if (cmd[1] == SAI_GET_LBA_STATUS) {
3711
3712                         if (scsi_debug_lbp() == 0) {
3713                                 mk_sense_buffer(devip, ILLEGAL_REQUEST,
3714                                                 INVALID_COMMAND_OPCODE, 0);
3715                                 errsts = check_condition_result;
3716                         } else
3717                                 errsts = resp_get_lba_status(SCpnt, devip);
3718                 } else {
3719                         mk_sense_buffer(devip, ILLEGAL_REQUEST,
3720                                         INVALID_OPCODE, 0);
3721                         errsts = check_condition_result;
3722                 }
3723                 break;
3724         case MAINTENANCE_IN:
3725                 if (MI_REPORT_TARGET_PGS != cmd[1]) {
3726                         mk_sense_buffer(devip, ILLEGAL_REQUEST,
3727                                         INVALID_OPCODE, 0);
3728                         errsts = check_condition_result;
3729                         break;
3730                 }
3731                 errsts = resp_report_tgtpgs(SCpnt, devip);
3732                 break;
3733         case READ_16:
3734         case READ_12:
3735         case READ_10:
3736                 /* READ{10,12,16} and DIF Type 2 are natural enemies */
3737                 if (scsi_debug_dif == SD_DIF_TYPE2_PROTECTION &&
3738                     cmd[1] & 0xe0) {
3739                         mk_sense_buffer(devip, ILLEGAL_REQUEST,
3740                                         INVALID_COMMAND_OPCODE, 0);
3741                         errsts = check_condition_result;
3742                         break;
3743                 }
3744
3745                 if ((scsi_debug_dif == SD_DIF_TYPE1_PROTECTION ||
3746                      scsi_debug_dif == SD_DIF_TYPE3_PROTECTION) &&
3747                     (cmd[1] & 0xe0) == 0)
3748                         printk(KERN_ERR "Unprotected RD/WR to DIF device\n");
3749
3750                 /* fall through */
3751         case READ_6:
3752 read:
3753                 errsts = check_readiness(SCpnt, 0, devip);
3754                 if (errsts)
3755                         break;
3756                 if (scsi_debug_fake_rw)
3757                         break;
3758                 get_data_transfer_info(cmd, &lba, &num, &ei_lba);
3759                 errsts = resp_read(SCpnt, lba, num, devip, ei_lba);
3760                 if (inj_recovered && (0 == errsts)) {
3761                         mk_sense_buffer(devip, RECOVERED_ERROR,
3762                                         THRESHOLD_EXCEEDED, 0);
3763                         errsts = check_condition_result;
3764                 } else if (inj_transport && (0 == errsts)) {
3765                         mk_sense_buffer(devip, ABORTED_COMMAND,
3766                                         TRANSPORT_PROBLEM, ACK_NAK_TO);
3767                         errsts = check_condition_result;
3768                 } else if (inj_dif && (0 == errsts)) {
3769                         mk_sense_buffer(devip, ABORTED_COMMAND, 0x10, 1);
3770                         errsts = illegal_condition_result;
3771                 } else if (inj_dix && (0 == errsts)) {
3772                         mk_sense_buffer(devip, ILLEGAL_REQUEST, 0x10, 1);
3773                         errsts = illegal_condition_result;
3774                 }
3775                 break;
3776         case REPORT_LUNS:       /* mandatory, ignore unit attention */
3777                 delay_override = 1;
3778                 errsts = resp_report_luns(SCpnt, devip);
3779                 break;
3780         case VERIFY:            /* 10 byte SBC-2 command */
3781                 errsts = check_readiness(SCpnt, 0, devip);
3782                 break;
3783         case WRITE_16:
3784         case WRITE_12:
3785         case WRITE_10:
3786                 /* WRITE{10,12,16} and DIF Type 2 are natural enemies */
3787                 if (scsi_debug_dif == SD_DIF_TYPE2_PROTECTION &&
3788                     cmd[1] & 0xe0) {
3789                         mk_sense_buffer(devip, ILLEGAL_REQUEST,
3790                                         INVALID_COMMAND_OPCODE, 0);
3791                         errsts = check_condition_result;
3792                         break;
3793                 }
3794
3795                 if ((scsi_debug_dif == SD_DIF_TYPE1_PROTECTION ||
3796                      scsi_debug_dif == SD_DIF_TYPE3_PROTECTION) &&
3797                     (cmd[1] & 0xe0) == 0)
3798                         printk(KERN_ERR "Unprotected RD/WR to DIF device\n");
3799
3800                 /* fall through */
3801         case WRITE_6:
3802 write:
3803                 errsts = check_readiness(SCpnt, 0, devip);
3804                 if (errsts)
3805                         break;
3806                 if (scsi_debug_fake_rw)
3807                         break;
3808                 get_data_transfer_info(cmd, &lba, &num, &ei_lba);
3809                 errsts = resp_write(SCpnt, lba, num, devip, ei_lba);
3810                 if (inj_recovered && (0 == errsts)) {
3811                         mk_sense_buffer(devip, RECOVERED_ERROR,
3812                                         THRESHOLD_EXCEEDED, 0);
3813                         errsts = check_condition_result;
3814                 } else if (inj_dif && (0 == errsts)) {
3815                         mk_sense_buffer(devip, ABORTED_COMMAND, 0x10, 1);
3816                         errsts = illegal_condition_result;
3817                 } else if (inj_dix && (0 == errsts)) {
3818                         mk_sense_buffer(devip, ILLEGAL_REQUEST, 0x10, 1);
3819                         errsts = illegal_condition_result;
3820                 }
3821                 break;
3822         case WRITE_SAME_16:
3823         case WRITE_SAME:
3824                 if (cmd[1] & 0x8) {
3825                         if ((*cmd == WRITE_SAME_16 && scsi_debug_lbpws == 0) ||
3826                             (*cmd == WRITE_SAME && scsi_debug_lbpws10 == 0)) {
3827                                 mk_sense_buffer(devip, ILLEGAL_REQUEST,
3828                                                 INVALID_FIELD_IN_CDB, 0);
3829                                 errsts = check_condition_result;
3830                         } else
3831                                 unmap = 1;
3832                 }
3833                 if (errsts)
3834                         break;
3835                 errsts = check_readiness(SCpnt, 0, devip);
3836                 if (errsts)
3837                         break;
3838                 get_data_transfer_info(cmd, &lba, &num, &ei_lba);
3839                 errsts = resp_write_same(SCpnt, lba, num, devip, ei_lba, unmap);
3840                 break;
3841         case UNMAP:
3842                 errsts = check_readiness(SCpnt, 0, devip);
3843                 if (errsts)
3844                         break;
3845
3846                 if (scsi_debug_unmap_max_desc == 0 || scsi_debug_lbpu == 0) {
3847                         mk_sense_buffer(devip, ILLEGAL_REQUEST,
3848                                         INVALID_COMMAND_OPCODE, 0);
3849                         errsts = check_condition_result;
3850                 } else
3851                         errsts = resp_unmap(SCpnt, devip);
3852                 break;
3853         case MODE_SENSE:
3854         case MODE_SENSE_10:
3855                 errsts = resp_mode_sense(SCpnt, target, devip);
3856                 break;
3857         case MODE_SELECT:
3858                 errsts = resp_mode_select(SCpnt, 1, devip);
3859                 break;
3860         case MODE_SELECT_10:
3861                 errsts = resp_mode_select(SCpnt, 0, devip);
3862                 break;
3863         case LOG_SENSE:
3864                 errsts = resp_log_sense(SCpnt, devip);
3865                 break;
3866         case SYNCHRONIZE_CACHE:
3867                 delay_override = 1;
3868                 errsts = check_readiness(SCpnt, 0, devip);
3869                 break;
3870         case WRITE_BUFFER:
3871                 errsts = check_readiness(SCpnt, 1, devip);
3872                 break;
3873         case XDWRITEREAD_10:
3874                 if (!scsi_bidi_cmnd(SCpnt)) {
3875                         mk_sense_buffer(devip, ILLEGAL_REQUEST,
3876                                         INVALID_FIELD_IN_CDB, 0);
3877                         errsts = check_condition_result;
3878                         break;
3879                 }
3880
3881                 errsts = check_readiness(SCpnt, 0, devip);
3882                 if (errsts)
3883                         break;
3884                 if (scsi_debug_fake_rw)
3885                         break;
3886                 get_data_transfer_info(cmd, &lba, &num, &ei_lba);
3887                 errsts = resp_read(SCpnt, lba, num, devip, ei_lba);
3888                 if (errsts)
3889                         break;
3890                 errsts = resp_write(SCpnt, lba, num, devip, ei_lba);
3891                 if (errsts)
3892                         break;
3893                 errsts = resp_xdwriteread(SCpnt, lba, num, devip);
3894                 break;
3895         case VARIABLE_LENGTH_CMD:
3896                 if (scsi_debug_dif == SD_DIF_TYPE2_PROTECTION) {
3897
3898                         if ((cmd[10] & 0xe0) == 0)
3899                                 printk(KERN_ERR
3900                                        "Unprotected RD/WR to DIF device\n");
3901
3902                         if (cmd[9] == READ_32) {
3903                                 BUG_ON(SCpnt->cmd_len < 32);
3904                                 goto read;
3905                         }
3906
3907                         if (cmd[9] == WRITE_32) {
3908                                 BUG_ON(SCpnt->cmd_len < 32);
3909                                 goto write;
3910                         }
3911                 }
3912
3913                 mk_sense_buffer(devip, ILLEGAL_REQUEST,
3914                                 INVALID_FIELD_IN_CDB, 0);
3915                 errsts = check_condition_result;
3916                 break;
3917
3918         default:
3919                 if (SCSI_DEBUG_OPT_NOISE & scsi_debug_opts)
3920                         printk(KERN_INFO "scsi_debug: Opcode: 0x%x not "
3921                                "supported\n", *cmd);
3922                 errsts = check_readiness(SCpnt, 1, devip);
3923                 if (errsts)
3924                         break;  /* Unit attention takes precedence */
3925                 mk_sense_buffer(devip, ILLEGAL_REQUEST, INVALID_OPCODE, 0);
3926                 errsts = check_condition_result;
3927                 break;
3928         }
3929         return schedule_resp(SCpnt, devip, done, errsts,
3930                              (delay_override ? 0 : scsi_debug_delay));
3931 }
3932
3933 static DEF_SCSI_QCMD(scsi_debug_queuecommand)
3934
3935 static struct scsi_host_template sdebug_driver_template = {
3936         .proc_info =            scsi_debug_proc_info,
3937         .proc_name =            sdebug_proc_name,
3938         .name =                 "SCSI DEBUG",
3939         .info =                 scsi_debug_info,
3940         .slave_alloc =          scsi_debug_slave_alloc,
3941         .slave_configure =      scsi_debug_slave_configure,
3942         .slave_destroy =        scsi_debug_slave_destroy,
3943         .ioctl =                scsi_debug_ioctl,
3944         .queuecommand =         scsi_debug_queuecommand,
3945         .eh_abort_handler =     scsi_debug_abort,
3946         .eh_bus_reset_handler = scsi_debug_bus_reset,
3947         .eh_device_reset_handler = scsi_debug_device_reset,
3948         .eh_host_reset_handler = scsi_debug_host_reset,
3949         .bios_param =           scsi_debug_biosparam,
3950         .can_queue =            SCSI_DEBUG_CANQUEUE,
3951         .this_id =              7,
3952         .sg_tablesize =         256,
3953         .cmd_per_lun =          16,
3954         .max_sectors =          0xffff,
3955         .use_clustering =       DISABLE_CLUSTERING,
3956         .module =               THIS_MODULE,
3957 };
3958
3959 static int sdebug_driver_probe(struct device * dev)
3960 {
3961         int error = 0;
3962         struct sdebug_host_info *sdbg_host;
3963         struct Scsi_Host *hpnt;
3964         int host_prot;
3965
3966         sdbg_host = to_sdebug_host(dev);
3967
3968         sdebug_driver_template.can_queue = scsi_debug_max_queue;
3969         hpnt = scsi_host_alloc(&sdebug_driver_template, sizeof(sdbg_host));
3970         if (NULL == hpnt) {
3971                 printk(KERN_ERR "%s: scsi_register failed\n", __func__);
3972                 error = -ENODEV;
3973                 return error;
3974         }
3975
3976         sdbg_host->shost = hpnt;
3977         *((struct sdebug_host_info **)hpnt->hostdata) = sdbg_host;
3978         if ((hpnt->this_id >= 0) && (scsi_debug_num_tgts > hpnt->this_id))
3979                 hpnt->max_id = scsi_debug_num_tgts + 1;
3980         else
3981                 hpnt->max_id = scsi_debug_num_tgts;
3982         hpnt->max_lun = SAM2_WLUN_REPORT_LUNS;  /* = scsi_debug_max_luns; */
3983
3984         host_prot = 0;
3985
3986         switch (scsi_debug_dif) {
3987
3988         case SD_DIF_TYPE1_PROTECTION:
3989                 host_prot = SHOST_DIF_TYPE1_PROTECTION;
3990                 if (scsi_debug_dix)
3991                         host_prot |= SHOST_DIX_TYPE1_PROTECTION;
3992                 break;
3993
3994         case SD_DIF_TYPE2_PROTECTION:
3995                 host_prot = SHOST_DIF_TYPE2_PROTECTION;
3996                 if (scsi_debug_dix)
3997                         host_prot |= SHOST_DIX_TYPE2_PROTECTION;
3998                 break;
3999
4000         case SD_DIF_TYPE3_PROTECTION:
4001                 host_prot = SHOST_DIF_TYPE3_PROTECTION;
4002                 if (scsi_debug_dix)
4003                         host_prot |= SHOST_DIX_TYPE3_PROTECTION;
4004                 break;
4005
4006         default:
4007                 if (scsi_debug_dix)
4008                         host_prot |= SHOST_DIX_TYPE0_PROTECTION;
4009                 break;
4010         }
4011
4012         scsi_host_set_prot(hpnt, host_prot);
4013
4014         printk(KERN_INFO "scsi_debug: host protection%s%s%s%s%s%s%s\n",
4015                (host_prot & SHOST_DIF_TYPE1_PROTECTION) ? " DIF1" : "",
4016                (host_prot & SHOST_DIF_TYPE2_PROTECTION) ? " DIF2" : "",
4017                (host_prot & SHOST_DIF_TYPE3_PROTECTION) ? " DIF3" : "",
4018                (host_prot & SHOST_DIX_TYPE0_PROTECTION) ? " DIX0" : "",
4019                (host_prot & SHOST_DIX_TYPE1_PROTECTION) ? " DIX1" : "",
4020                (host_prot & SHOST_DIX_TYPE2_PROTECTION) ? " DIX2" : "",
4021                (host_prot & SHOST_DIX_TYPE3_PROTECTION) ? " DIX3" : "");
4022
4023         if (scsi_debug_guard == 1)
4024                 scsi_host_set_guard(hpnt, SHOST_DIX_GUARD_IP);
4025         else
4026                 scsi_host_set_guard(hpnt, SHOST_DIX_GUARD_CRC);
4027
4028         error = scsi_add_host(hpnt, &sdbg_host->dev);
4029         if (error) {
4030                 printk(KERN_ERR "%s: scsi_add_host failed\n", __func__);
4031                 error = -ENODEV;
4032                 scsi_host_put(hpnt);
4033         } else
4034                 scsi_scan_host(hpnt);
4035
4036
4037         return error;
4038 }
4039
4040 static int sdebug_driver_remove(struct device * dev)
4041 {
4042         struct sdebug_host_info *sdbg_host;
4043         struct sdebug_dev_info *sdbg_devinfo, *tmp;
4044
4045         sdbg_host = to_sdebug_host(dev);
4046
4047         if (!sdbg_host) {
4048                 printk(KERN_ERR "%s: Unable to locate host info\n",
4049                        __func__);
4050                 return -ENODEV;
4051         }
4052
4053         scsi_remove_host(sdbg_host->shost);
4054
4055         list_for_each_entry_safe(sdbg_devinfo, tmp, &sdbg_host->dev_info_list,
4056                                  dev_list) {
4057                 list_del(&sdbg_devinfo->dev_list);
4058                 kfree(sdbg_devinfo);
4059         }
4060
4061         scsi_host_put(sdbg_host->shost);
4062         return 0;
4063 }
4064
4065 static int pseudo_lld_bus_match(struct device *dev,
4066                                 struct device_driver *dev_driver)
4067 {
4068         return 1;
4069 }
4070
4071 static struct bus_type pseudo_lld_bus = {
4072         .name = "pseudo",
4073         .match = pseudo_lld_bus_match,
4074         .probe = sdebug_driver_probe,
4075         .remove = sdebug_driver_remove,
4076 };