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