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