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