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