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