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