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