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