xref: /linux/drivers/scsi/scsi_debug.c (revision 7f3edee81fbd49114c28057512906f169caa0bed)
1 /*
2  * vvvvvvvvvvvvvvvvvvvvvvv Original vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
3  *  Copyright (C) 1992  Eric Youngdale
4  *  Simulate a host adapter with 2 disks attached.  Do a lot of checking
5  *  to make sure that we are not getting blocks mixed up, and PANIC if
6  *  anything out of the ordinary is seen.
7  * ^^^^^^^^^^^^^^^^^^^^^^^ Original ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
8  *
9  *  This version is more generic, simulating a variable number of disk
10  *  (or disk like devices) sharing a common amount of RAM. To be more
11  *  realistic, the simulated devices have the transport attributes of
12  *  SAS disks.
13  *
14  *
15  *  For documentation see http://www.torque.net/sg/sdebug26.html
16  *
17  *   D. Gilbert (dpg) work for Magneto-Optical device test [20010421]
18  *   dpg: work for devfs large number of disks [20010809]
19  *        forked for lk 2.5 series [20011216, 20020101]
20  *        use vmalloc() more inquiry+mode_sense [20020302]
21  *        add timers for delayed responses [20020721]
22  *   Patrick Mansfield <patmans@us.ibm.com> max_luns+scsi_level [20021031]
23  *   Mike Anderson <andmike@us.ibm.com> sysfs work [20021118]
24  *   dpg: change style of boot options to "scsi_debug.num_tgts=2" and
25  *        module options to "modprobe scsi_debug num_tgts=2" [20021221]
26  */
27 
28 #include <linux/module.h>
29 
30 #include <linux/kernel.h>
31 #include <linux/errno.h>
32 #include <linux/timer.h>
33 #include <linux/types.h>
34 #include <linux/string.h>
35 #include <linux/genhd.h>
36 #include <linux/fs.h>
37 #include <linux/init.h>
38 #include <linux/proc_fs.h>
39 #include <linux/vmalloc.h>
40 #include <linux/moduleparam.h>
41 #include <linux/scatterlist.h>
42 
43 #include <linux/blkdev.h>
44 #include "scsi.h"
45 #include <scsi/scsi_host.h>
46 #include <scsi/scsicam.h>
47 
48 #include <linux/stat.h>
49 
50 #include "scsi_logging.h"
51 #include "scsi_debug.h"
52 
53 #define SCSI_DEBUG_VERSION "1.81"
54 static const char * scsi_debug_version_date = "20070104";
55 
56 /* Additional Sense Code (ASC) */
57 #define NO_ADDITIONAL_SENSE 0x0
58 #define LOGICAL_UNIT_NOT_READY 0x4
59 #define UNRECOVERED_READ_ERR 0x11
60 #define PARAMETER_LIST_LENGTH_ERR 0x1a
61 #define INVALID_OPCODE 0x20
62 #define ADDR_OUT_OF_RANGE 0x21
63 #define INVALID_FIELD_IN_CDB 0x24
64 #define INVALID_FIELD_IN_PARAM_LIST 0x26
65 #define POWERON_RESET 0x29
66 #define SAVING_PARAMS_UNSUP 0x39
67 #define TRANSPORT_PROBLEM 0x4b
68 #define THRESHOLD_EXCEEDED 0x5d
69 #define LOW_POWER_COND_ON 0x5e
70 
71 /* Additional Sense Code Qualifier (ASCQ) */
72 #define ACK_NAK_TO 0x3
73 
74 #define SDEBUG_TAGGED_QUEUING 0 /* 0 | MSG_SIMPLE_TAG | MSG_ORDERED_TAG */
75 
76 /* Default values for driver parameters */
77 #define DEF_NUM_HOST   1
78 #define DEF_NUM_TGTS   1
79 #define DEF_MAX_LUNS   1
80 /* With these defaults, this driver will make 1 host with 1 target
81  * (id 0) containing 1 logical unit (lun 0). That is 1 device.
82  */
83 #define DEF_DELAY   1
84 #define DEF_DEV_SIZE_MB   8
85 #define DEF_EVERY_NTH   0
86 #define DEF_NUM_PARTS   0
87 #define DEF_OPTS   0
88 #define DEF_SCSI_LEVEL   5    /* INQUIRY, byte2 [5->SPC-3] */
89 #define DEF_PTYPE   0
90 #define DEF_D_SENSE   0
91 #define DEF_NO_LUN_0   0
92 #define DEF_VIRTUAL_GB   0
93 #define DEF_FAKE_RW	0
94 #define DEF_VPD_USE_HOSTNO 1
95 
96 /* bit mask values for scsi_debug_opts */
97 #define SCSI_DEBUG_OPT_NOISE   1
98 #define SCSI_DEBUG_OPT_MEDIUM_ERR   2
99 #define SCSI_DEBUG_OPT_TIMEOUT   4
100 #define SCSI_DEBUG_OPT_RECOVERED_ERR   8
101 #define SCSI_DEBUG_OPT_TRANSPORT_ERR   16
102 /* When "every_nth" > 0 then modulo "every_nth" commands:
103  *   - a no response is simulated if SCSI_DEBUG_OPT_TIMEOUT is set
104  *   - a RECOVERED_ERROR is simulated on successful read and write
105  *     commands if SCSI_DEBUG_OPT_RECOVERED_ERR is set.
106  *   - a TRANSPORT_ERROR is simulated on successful read and write
107  *     commands if SCSI_DEBUG_OPT_TRANSPORT_ERR is set.
108  *
109  * When "every_nth" < 0 then after "- every_nth" commands:
110  *   - a no response is simulated if SCSI_DEBUG_OPT_TIMEOUT is set
111  *   - a RECOVERED_ERROR is simulated on successful read and write
112  *     commands if SCSI_DEBUG_OPT_RECOVERED_ERR is set.
113  *   - a TRANSPORT_ERROR is simulated on successful read and write
114  *     commands if SCSI_DEBUG_OPT_TRANSPORT_ERR is set.
115  * This will continue until some other action occurs (e.g. the user
116  * writing a new value (other than -1 or 1) to every_nth via sysfs).
117  */
118 
119 /* when 1==SCSI_DEBUG_OPT_MEDIUM_ERR, a medium error is simulated at this
120  * sector on read commands: */
121 #define OPT_MEDIUM_ERR_ADDR   0x1234 /* that's sector 4660 in decimal */
122 
123 /* If REPORT LUNS has luns >= 256 it can choose "flat space" (value 1)
124  * or "peripheral device" addressing (value 0) */
125 #define SAM2_LUN_ADDRESS_METHOD 0
126 #define SAM2_WLUN_REPORT_LUNS 0xc101
127 
128 static int scsi_debug_add_host = DEF_NUM_HOST;
129 static int scsi_debug_delay = DEF_DELAY;
130 static int scsi_debug_dev_size_mb = DEF_DEV_SIZE_MB;
131 static int scsi_debug_every_nth = DEF_EVERY_NTH;
132 static int scsi_debug_max_luns = DEF_MAX_LUNS;
133 static int scsi_debug_num_parts = DEF_NUM_PARTS;
134 static int scsi_debug_num_tgts = DEF_NUM_TGTS; /* targets per host */
135 static int scsi_debug_opts = DEF_OPTS;
136 static int scsi_debug_scsi_level = DEF_SCSI_LEVEL;
137 static int scsi_debug_ptype = DEF_PTYPE; /* SCSI peripheral type (0==disk) */
138 static int scsi_debug_dsense = DEF_D_SENSE;
139 static int scsi_debug_no_lun_0 = DEF_NO_LUN_0;
140 static int scsi_debug_virtual_gb = DEF_VIRTUAL_GB;
141 static int scsi_debug_fake_rw = DEF_FAKE_RW;
142 static int scsi_debug_vpd_use_hostno = DEF_VPD_USE_HOSTNO;
143 
144 static int scsi_debug_cmnd_count = 0;
145 
146 #define DEV_READONLY(TGT)      (0)
147 #define DEV_REMOVEABLE(TGT)    (0)
148 
149 static unsigned int sdebug_store_size;	/* in bytes */
150 static unsigned int sdebug_store_sectors;
151 static sector_t sdebug_capacity;	/* in sectors */
152 
153 /* old BIOS stuff, kernel may get rid of them but some mode sense pages
154    may still need them */
155 static int sdebug_heads;		/* heads per disk */
156 static int sdebug_cylinders_per;	/* cylinders per surface */
157 static int sdebug_sectors_per;		/* sectors per cylinder */
158 
159 /* default sector size is 512 bytes, 2**9 bytes */
160 #define POW2_SECT_SIZE 9
161 #define SECT_SIZE (1 << POW2_SECT_SIZE)
162 #define SECT_SIZE_PER(TGT) SECT_SIZE
163 
164 #define SDEBUG_MAX_PARTS 4
165 
166 #define SDEBUG_SENSE_LEN 32
167 
168 struct sdebug_dev_info {
169 	struct list_head dev_list;
170 	unsigned char sense_buff[SDEBUG_SENSE_LEN];	/* weak nexus */
171 	unsigned int channel;
172 	unsigned int target;
173 	unsigned int lun;
174 	struct sdebug_host_info *sdbg_host;
175 	unsigned int wlun;
176 	char reset;
177 	char stopped;
178 	char used;
179 };
180 
181 struct sdebug_host_info {
182 	struct list_head host_list;
183 	struct Scsi_Host *shost;
184 	struct device dev;
185 	struct list_head dev_info_list;
186 };
187 
188 #define to_sdebug_host(d)	\
189 	container_of(d, struct sdebug_host_info, dev)
190 
191 static LIST_HEAD(sdebug_host_list);
192 static DEFINE_SPINLOCK(sdebug_host_list_lock);
193 
194 typedef void (* done_funct_t) (struct scsi_cmnd *);
195 
196 struct sdebug_queued_cmd {
197 	int in_use;
198 	struct timer_list cmnd_timer;
199 	done_funct_t done_funct;
200 	struct scsi_cmnd * a_cmnd;
201 	int scsi_result;
202 };
203 static struct sdebug_queued_cmd queued_arr[SCSI_DEBUG_CANQUEUE];
204 
205 static struct scsi_host_template sdebug_driver_template = {
206 	.proc_info =		scsi_debug_proc_info,
207 	.name =			"SCSI DEBUG",
208 	.info =			scsi_debug_info,
209 	.slave_alloc =		scsi_debug_slave_alloc,
210 	.slave_configure =	scsi_debug_slave_configure,
211 	.slave_destroy =	scsi_debug_slave_destroy,
212 	.ioctl =		scsi_debug_ioctl,
213 	.queuecommand =		scsi_debug_queuecommand,
214 	.eh_abort_handler =	scsi_debug_abort,
215 	.eh_bus_reset_handler = scsi_debug_bus_reset,
216 	.eh_device_reset_handler = scsi_debug_device_reset,
217 	.eh_host_reset_handler = scsi_debug_host_reset,
218 	.bios_param =		scsi_debug_biosparam,
219 	.can_queue =		SCSI_DEBUG_CANQUEUE,
220 	.this_id =		7,
221 	.sg_tablesize =		256,
222 	.cmd_per_lun =		16,
223 	.max_sectors =		0xffff,
224 	.unchecked_isa_dma = 	0,
225 	.use_clustering = 	ENABLE_CLUSTERING,
226 	.module =		THIS_MODULE,
227 };
228 
229 static unsigned char * fake_storep;	/* ramdisk storage */
230 
231 static int num_aborts = 0;
232 static int num_dev_resets = 0;
233 static int num_bus_resets = 0;
234 static int num_host_resets = 0;
235 
236 static DEFINE_SPINLOCK(queued_arr_lock);
237 static DEFINE_RWLOCK(atomic_rw);
238 
239 static char sdebug_proc_name[] = "scsi_debug";
240 
241 static int sdebug_driver_probe(struct device *);
242 static int sdebug_driver_remove(struct device *);
243 static struct bus_type pseudo_lld_bus;
244 
245 static struct device_driver sdebug_driverfs_driver = {
246 	.name 		= sdebug_proc_name,
247 	.bus		= &pseudo_lld_bus,
248 };
249 
250 static const int check_condition_result =
251 		(DRIVER_SENSE << 24) | SAM_STAT_CHECK_CONDITION;
252 
253 static unsigned char ctrl_m_pg[] = {0xa, 10, 2, 0, 0, 0, 0, 0,
254 				    0, 0, 0x2, 0x4b};
255 static unsigned char iec_m_pg[] = {0x1c, 0xa, 0x08, 0, 0, 0, 0, 0,
256 			           0, 0, 0x0, 0x0};
257 
258 /* function declarations */
259 static int resp_inquiry(struct scsi_cmnd * SCpnt, int target,
260 			struct sdebug_dev_info * devip);
261 static int resp_requests(struct scsi_cmnd * SCpnt,
262 			 struct sdebug_dev_info * devip);
263 static int resp_start_stop(struct scsi_cmnd * scp,
264 			   struct sdebug_dev_info * devip);
265 static int resp_report_tgtpgs(struct scsi_cmnd * scp,
266 			      struct sdebug_dev_info * devip);
267 static int resp_readcap(struct scsi_cmnd * SCpnt,
268 			struct sdebug_dev_info * devip);
269 static int resp_readcap16(struct scsi_cmnd * SCpnt,
270 			  struct sdebug_dev_info * devip);
271 static int resp_mode_sense(struct scsi_cmnd * scp, int target,
272 			   struct sdebug_dev_info * devip);
273 static int resp_mode_select(struct scsi_cmnd * scp, int mselect6,
274 			    struct sdebug_dev_info * devip);
275 static int resp_log_sense(struct scsi_cmnd * scp,
276 			  struct sdebug_dev_info * devip);
277 static int resp_read(struct scsi_cmnd * SCpnt, unsigned long long lba,
278 		     unsigned int num, struct sdebug_dev_info * devip);
279 static int resp_write(struct scsi_cmnd * SCpnt, unsigned long long lba,
280 		      unsigned int num, struct sdebug_dev_info * devip);
281 static int resp_report_luns(struct scsi_cmnd * SCpnt,
282 			    struct sdebug_dev_info * devip);
283 static int fill_from_dev_buffer(struct scsi_cmnd * scp, unsigned char * arr,
284                                 int arr_len);
285 static int fetch_to_dev_buffer(struct scsi_cmnd * scp, unsigned char * arr,
286                                int max_arr_len);
287 static void timer_intr_handler(unsigned long);
288 static struct sdebug_dev_info * devInfoReg(struct scsi_device * sdev);
289 static void mk_sense_buffer(struct sdebug_dev_info * devip, int key,
290 			    int asc, int asq);
291 static int check_readiness(struct scsi_cmnd * SCpnt, int reset_only,
292 			   struct sdebug_dev_info * devip);
293 static int schedule_resp(struct scsi_cmnd * cmnd,
294 			 struct sdebug_dev_info * devip,
295 			 done_funct_t done, int scsi_result, int delta_jiff);
296 static void __init sdebug_build_parts(unsigned char * ramp);
297 static void __init init_all_queued(void);
298 static void stop_all_queued(void);
299 static int stop_queued_cmnd(struct scsi_cmnd * cmnd);
300 static int inquiry_evpd_83(unsigned char * arr, int port_group_id,
301 			   int target_dev_id, int dev_id_num,
302 			   const char * dev_id_str, int dev_id_str_len);
303 static int inquiry_evpd_88(unsigned char * arr, int target_dev_id);
304 static int do_create_driverfs_files(void);
305 static void do_remove_driverfs_files(void);
306 
307 static int sdebug_add_adapter(void);
308 static void sdebug_remove_adapter(void);
309 static void sdebug_max_tgts_luns(void);
310 
311 static struct device pseudo_primary;
312 static struct bus_type pseudo_lld_bus;
313 
314 
315 static
316 int scsi_debug_queuecommand(struct scsi_cmnd * SCpnt, done_funct_t done)
317 {
318 	unsigned char *cmd = (unsigned char *) SCpnt->cmnd;
319 	int len, k, j;
320 	unsigned int num;
321 	unsigned long long lba;
322 	int errsts = 0;
323 	int target = SCpnt->device->id;
324 	struct sdebug_dev_info * devip = NULL;
325 	int inj_recovered = 0;
326 	int inj_transport = 0;
327 	int delay_override = 0;
328 
329 	if (done == NULL)
330 		return 0;	/* assume mid level reprocessing command */
331 
332 	scsi_set_resid(SCpnt, 0);
333 	if ((SCSI_DEBUG_OPT_NOISE & scsi_debug_opts) && cmd) {
334 		printk(KERN_INFO "scsi_debug: cmd ");
335 		for (k = 0, len = SCpnt->cmd_len; k < len; ++k)
336 			printk("%02x ", (int)cmd[k]);
337 		printk("\n");
338 	}
339         if(target == sdebug_driver_template.this_id) {
340 		printk(KERN_INFO "scsi_debug: initiator's id used as "
341 		       "target!\n");
342 		return schedule_resp(SCpnt, NULL, done,
343 				     DID_NO_CONNECT << 16, 0);
344         }
345 
346 	if ((SCpnt->device->lun >= scsi_debug_max_luns) &&
347 	    (SCpnt->device->lun != SAM2_WLUN_REPORT_LUNS))
348 		return schedule_resp(SCpnt, NULL, done,
349 				     DID_NO_CONNECT << 16, 0);
350 	devip = devInfoReg(SCpnt->device);
351 	if (NULL == devip)
352 		return schedule_resp(SCpnt, NULL, done,
353 				     DID_NO_CONNECT << 16, 0);
354 
355         if ((scsi_debug_every_nth != 0) &&
356             (++scsi_debug_cmnd_count >= abs(scsi_debug_every_nth))) {
357                 scsi_debug_cmnd_count = 0;
358 		if (scsi_debug_every_nth < -1)
359 			scsi_debug_every_nth = -1;
360 		if (SCSI_DEBUG_OPT_TIMEOUT & scsi_debug_opts)
361 			return 0; /* ignore command causing timeout */
362 		else if (SCSI_DEBUG_OPT_RECOVERED_ERR & scsi_debug_opts)
363 			inj_recovered = 1; /* to reads and writes below */
364 		else if (SCSI_DEBUG_OPT_TRANSPORT_ERR & scsi_debug_opts)
365 			inj_transport = 1; /* to reads and writes below */
366         }
367 
368 	if (devip->wlun) {
369 		switch (*cmd) {
370 		case INQUIRY:
371 		case REQUEST_SENSE:
372 		case TEST_UNIT_READY:
373 		case REPORT_LUNS:
374 			break;  /* only allowable wlun commands */
375 		default:
376 			if (SCSI_DEBUG_OPT_NOISE & scsi_debug_opts)
377 				printk(KERN_INFO "scsi_debug: Opcode: 0x%x "
378 				       "not supported for wlun\n", *cmd);
379 			mk_sense_buffer(devip, ILLEGAL_REQUEST,
380 					INVALID_OPCODE, 0);
381 			errsts = check_condition_result;
382 			return schedule_resp(SCpnt, devip, done, errsts,
383 					     0);
384 		}
385 	}
386 
387 	switch (*cmd) {
388 	case INQUIRY:     /* mandatory, ignore unit attention */
389 		delay_override = 1;
390 		errsts = resp_inquiry(SCpnt, target, devip);
391 		break;
392 	case REQUEST_SENSE:	/* mandatory, ignore unit attention */
393 		delay_override = 1;
394 		errsts = resp_requests(SCpnt, devip);
395 		break;
396 	case REZERO_UNIT:	/* actually this is REWIND for SSC */
397 	case START_STOP:
398 		errsts = resp_start_stop(SCpnt, devip);
399 		break;
400 	case ALLOW_MEDIUM_REMOVAL:
401 		if ((errsts = check_readiness(SCpnt, 1, devip)))
402 			break;
403 		if (SCSI_DEBUG_OPT_NOISE & scsi_debug_opts)
404 			printk(KERN_INFO "scsi_debug: Medium removal %s\n",
405 			        cmd[4] ? "inhibited" : "enabled");
406 		break;
407 	case SEND_DIAGNOSTIC:     /* mandatory */
408 		errsts = check_readiness(SCpnt, 1, devip);
409 		break;
410 	case TEST_UNIT_READY:     /* mandatory */
411 		delay_override = 1;
412 		errsts = check_readiness(SCpnt, 0, devip);
413 		break;
414         case RESERVE:
415 		errsts = check_readiness(SCpnt, 1, devip);
416                 break;
417         case RESERVE_10:
418 		errsts = check_readiness(SCpnt, 1, devip);
419                 break;
420         case RELEASE:
421 		errsts = check_readiness(SCpnt, 1, devip);
422                 break;
423         case RELEASE_10:
424 		errsts = check_readiness(SCpnt, 1, devip);
425                 break;
426 	case READ_CAPACITY:
427 		errsts = resp_readcap(SCpnt, devip);
428 		break;
429 	case SERVICE_ACTION_IN:
430 		if (SAI_READ_CAPACITY_16 != cmd[1]) {
431 			mk_sense_buffer(devip, ILLEGAL_REQUEST,
432 					INVALID_OPCODE, 0);
433 			errsts = check_condition_result;
434 			break;
435 		}
436 		errsts = resp_readcap16(SCpnt, devip);
437 		break;
438 	case MAINTENANCE_IN:
439 		if (MI_REPORT_TARGET_PGS != cmd[1]) {
440 			mk_sense_buffer(devip, ILLEGAL_REQUEST,
441 					INVALID_OPCODE, 0);
442 			errsts = check_condition_result;
443 			break;
444 		}
445 		errsts = resp_report_tgtpgs(SCpnt, devip);
446 		break;
447 	case READ_16:
448 	case READ_12:
449 	case READ_10:
450 	case READ_6:
451 		if ((errsts = check_readiness(SCpnt, 0, devip)))
452 			break;
453 		if (scsi_debug_fake_rw)
454 			break;
455 		if ((*cmd) == READ_16) {
456 			for (lba = 0, j = 0; j < 8; ++j) {
457 				if (j > 0)
458 					lba <<= 8;
459 				lba += cmd[2 + j];
460 			}
461 			num = cmd[13] + (cmd[12] << 8) +
462 				(cmd[11] << 16) + (cmd[10] << 24);
463 		} else if ((*cmd) == READ_12) {
464 			lba = cmd[5] + (cmd[4] << 8) +
465 				(cmd[3] << 16) + (cmd[2] << 24);
466 			num = cmd[9] + (cmd[8] << 8) +
467 				(cmd[7] << 16) + (cmd[6] << 24);
468 		} else if ((*cmd) == READ_10) {
469 			lba = cmd[5] + (cmd[4] << 8) +
470 				(cmd[3] << 16) + (cmd[2] << 24);
471 			num = cmd[8] + (cmd[7] << 8);
472 		} else {	/* READ (6) */
473 			lba = cmd[3] + (cmd[2] << 8) +
474 				((cmd[1] & 0x1f) << 16);
475 			num = (0 == cmd[4]) ? 256 : cmd[4];
476 		}
477 		errsts = resp_read(SCpnt, lba, num, devip);
478 		if (inj_recovered && (0 == errsts)) {
479 			mk_sense_buffer(devip, RECOVERED_ERROR,
480 					THRESHOLD_EXCEEDED, 0);
481 			errsts = check_condition_result;
482 		} else if (inj_transport && (0 == errsts)) {
483                         mk_sense_buffer(devip, ABORTED_COMMAND,
484                                         TRANSPORT_PROBLEM, ACK_NAK_TO);
485                         errsts = check_condition_result;
486                 }
487 		break;
488 	case REPORT_LUNS:	/* mandatory, ignore unit attention */
489 		delay_override = 1;
490 		errsts = resp_report_luns(SCpnt, devip);
491 		break;
492 	case VERIFY:		/* 10 byte SBC-2 command */
493 		errsts = check_readiness(SCpnt, 0, devip);
494 		break;
495 	case WRITE_16:
496 	case WRITE_12:
497 	case WRITE_10:
498 	case WRITE_6:
499 		if ((errsts = check_readiness(SCpnt, 0, devip)))
500 			break;
501 		if (scsi_debug_fake_rw)
502 			break;
503 		if ((*cmd) == WRITE_16) {
504 			for (lba = 0, j = 0; j < 8; ++j) {
505 				if (j > 0)
506 					lba <<= 8;
507 				lba += cmd[2 + j];
508 			}
509 			num = cmd[13] + (cmd[12] << 8) +
510 				(cmd[11] << 16) + (cmd[10] << 24);
511 		} else if ((*cmd) == WRITE_12) {
512 			lba = cmd[5] + (cmd[4] << 8) +
513 				(cmd[3] << 16) + (cmd[2] << 24);
514 			num = cmd[9] + (cmd[8] << 8) +
515 				(cmd[7] << 16) + (cmd[6] << 24);
516 		} else if ((*cmd) == WRITE_10) {
517 			lba = cmd[5] + (cmd[4] << 8) +
518 				(cmd[3] << 16) + (cmd[2] << 24);
519 			num = cmd[8] + (cmd[7] << 8);
520 		} else {	/* WRITE (6) */
521 			lba = cmd[3] + (cmd[2] << 8) +
522 				((cmd[1] & 0x1f) << 16);
523 			num = (0 == cmd[4]) ? 256 : cmd[4];
524 		}
525 		errsts = resp_write(SCpnt, lba, num, devip);
526 		if (inj_recovered && (0 == errsts)) {
527 			mk_sense_buffer(devip, RECOVERED_ERROR,
528 					THRESHOLD_EXCEEDED, 0);
529 			errsts = check_condition_result;
530 		}
531 		break;
532 	case MODE_SENSE:
533 	case MODE_SENSE_10:
534 		errsts = resp_mode_sense(SCpnt, target, devip);
535 		break;
536 	case MODE_SELECT:
537 		errsts = resp_mode_select(SCpnt, 1, devip);
538 		break;
539 	case MODE_SELECT_10:
540 		errsts = resp_mode_select(SCpnt, 0, devip);
541 		break;
542 	case LOG_SENSE:
543 		errsts = resp_log_sense(SCpnt, devip);
544 		break;
545 	case SYNCHRONIZE_CACHE:
546 		delay_override = 1;
547 		errsts = check_readiness(SCpnt, 0, devip);
548 		break;
549 	case WRITE_BUFFER:
550 		errsts = check_readiness(SCpnt, 1, devip);
551 		break;
552 	default:
553 		if (SCSI_DEBUG_OPT_NOISE & scsi_debug_opts)
554 			printk(KERN_INFO "scsi_debug: Opcode: 0x%x not "
555 			       "supported\n", *cmd);
556 		if ((errsts = check_readiness(SCpnt, 1, devip)))
557 			break;	/* Unit attention takes precedence */
558 		mk_sense_buffer(devip, ILLEGAL_REQUEST, INVALID_OPCODE, 0);
559 		errsts = check_condition_result;
560 		break;
561 	}
562 	return schedule_resp(SCpnt, devip, done, errsts,
563 			     (delay_override ? 0 : scsi_debug_delay));
564 }
565 
566 static int scsi_debug_ioctl(struct scsi_device *dev, int cmd, void __user *arg)
567 {
568 	if (SCSI_DEBUG_OPT_NOISE & scsi_debug_opts) {
569 		printk(KERN_INFO "scsi_debug: ioctl: cmd=0x%x\n", cmd);
570 	}
571 	return -EINVAL;
572 	/* return -ENOTTY; // correct return but upsets fdisk */
573 }
574 
575 static int check_readiness(struct scsi_cmnd * SCpnt, int reset_only,
576 			   struct sdebug_dev_info * devip)
577 {
578 	if (devip->reset) {
579 		if (SCSI_DEBUG_OPT_NOISE & scsi_debug_opts)
580 			printk(KERN_INFO "scsi_debug: Reporting Unit "
581 			       "attention: power on reset\n");
582 		devip->reset = 0;
583 		mk_sense_buffer(devip, UNIT_ATTENTION, POWERON_RESET, 0);
584 		return check_condition_result;
585 	}
586 	if ((0 == reset_only) && devip->stopped) {
587 		if (SCSI_DEBUG_OPT_NOISE & scsi_debug_opts)
588 			printk(KERN_INFO "scsi_debug: Reporting Not "
589 			       "ready: initializing command required\n");
590 		mk_sense_buffer(devip, NOT_READY, LOGICAL_UNIT_NOT_READY,
591 				0x2);
592 		return check_condition_result;
593 	}
594 	return 0;
595 }
596 
597 /* Returns 0 if ok else (DID_ERROR << 16). Sets scp->resid . */
598 static int fill_from_dev_buffer(struct scsi_cmnd * scp, unsigned char * arr,
599 				int arr_len)
600 {
601 	int k, req_len, act_len, len, active;
602 	void * kaddr;
603 	void * kaddr_off;
604 	struct scatterlist * sg;
605 
606 	if (0 == scsi_bufflen(scp))
607 		return 0;
608 	if (NULL == scsi_sglist(scp))
609 		return (DID_ERROR << 16);
610 	if (! ((scp->sc_data_direction == DMA_BIDIRECTIONAL) ||
611 	      (scp->sc_data_direction == DMA_FROM_DEVICE)))
612 		return (DID_ERROR << 16);
613 	active = 1;
614 	req_len = act_len = 0;
615 	scsi_for_each_sg(scp, sg, scsi_sg_count(scp), k) {
616 		if (active) {
617 			kaddr = (unsigned char *)
618 				kmap_atomic(sg_page(sg), KM_USER0);
619 			if (NULL == kaddr)
620 				return (DID_ERROR << 16);
621 			kaddr_off = (unsigned char *)kaddr + sg->offset;
622 			len = sg->length;
623 			if ((req_len + len) > arr_len) {
624 				active = 0;
625 				len = arr_len - req_len;
626 			}
627 			memcpy(kaddr_off, arr + req_len, len);
628 			kunmap_atomic(kaddr, KM_USER0);
629 			act_len += len;
630 		}
631 		req_len += sg->length;
632 	}
633 	if (scsi_get_resid(scp))
634 		scsi_set_resid(scp, scsi_get_resid(scp) - act_len);
635 	else
636 		scsi_set_resid(scp, req_len - act_len);
637 	return 0;
638 }
639 
640 /* Returns number of bytes fetched into 'arr' or -1 if error. */
641 static int fetch_to_dev_buffer(struct scsi_cmnd * scp, unsigned char * arr,
642 			       int max_arr_len)
643 {
644 	int k, req_len, len, fin;
645 	void * kaddr;
646 	void * kaddr_off;
647 	struct scatterlist * sg;
648 
649 	if (0 == scsi_bufflen(scp))
650 		return 0;
651 	if (NULL == scsi_sglist(scp))
652 		return -1;
653 	if (! ((scp->sc_data_direction == DMA_BIDIRECTIONAL) ||
654 	      (scp->sc_data_direction == DMA_TO_DEVICE)))
655 		return -1;
656 	req_len = fin = 0;
657 	scsi_for_each_sg(scp, sg, scsi_sg_count(scp), k) {
658 		kaddr = (unsigned char *)kmap_atomic(sg_page(sg), KM_USER0);
659 		if (NULL == kaddr)
660 			return -1;
661 		kaddr_off = (unsigned char *)kaddr + sg->offset;
662 		len = sg->length;
663 		if ((req_len + len) > max_arr_len) {
664 			len = max_arr_len - req_len;
665 			fin = 1;
666 		}
667 		memcpy(arr + req_len, kaddr_off, len);
668 		kunmap_atomic(kaddr, KM_USER0);
669 		if (fin)
670 			return req_len + len;
671 		req_len += sg->length;
672 	}
673 	return req_len;
674 }
675 
676 
677 static const char * inq_vendor_id = "Linux   ";
678 static const char * inq_product_id = "scsi_debug      ";
679 static const char * inq_product_rev = "0004";
680 
681 static int inquiry_evpd_83(unsigned char * arr, int port_group_id,
682 			   int target_dev_id, int dev_id_num,
683 			   const char * dev_id_str,
684 			   int dev_id_str_len)
685 {
686 	int num, port_a;
687 	char b[32];
688 
689 	port_a = target_dev_id + 1;
690 	/* T10 vendor identifier field format (faked) */
691 	arr[0] = 0x2;	/* ASCII */
692 	arr[1] = 0x1;
693 	arr[2] = 0x0;
694 	memcpy(&arr[4], inq_vendor_id, 8);
695 	memcpy(&arr[12], inq_product_id, 16);
696 	memcpy(&arr[28], dev_id_str, dev_id_str_len);
697 	num = 8 + 16 + dev_id_str_len;
698 	arr[3] = num;
699 	num += 4;
700 	if (dev_id_num >= 0) {
701 		/* NAA-5, Logical unit identifier (binary) */
702 		arr[num++] = 0x1;	/* binary (not necessarily sas) */
703 		arr[num++] = 0x3;	/* PIV=0, lu, naa */
704 		arr[num++] = 0x0;
705 		arr[num++] = 0x8;
706 		arr[num++] = 0x53;  /* naa-5 ieee company id=0x333333 (fake) */
707 		arr[num++] = 0x33;
708 		arr[num++] = 0x33;
709 		arr[num++] = 0x30;
710 		arr[num++] = (dev_id_num >> 24);
711 		arr[num++] = (dev_id_num >> 16) & 0xff;
712 		arr[num++] = (dev_id_num >> 8) & 0xff;
713 		arr[num++] = dev_id_num & 0xff;
714 		/* Target relative port number */
715 		arr[num++] = 0x61;	/* proto=sas, binary */
716 		arr[num++] = 0x94;	/* PIV=1, target port, rel port */
717 		arr[num++] = 0x0;	/* reserved */
718 		arr[num++] = 0x4;	/* length */
719 		arr[num++] = 0x0;	/* reserved */
720 		arr[num++] = 0x0;	/* reserved */
721 		arr[num++] = 0x0;
722 		arr[num++] = 0x1;	/* relative port A */
723 	}
724 	/* NAA-5, Target port identifier */
725 	arr[num++] = 0x61;	/* proto=sas, binary */
726 	arr[num++] = 0x93;	/* piv=1, target port, naa */
727 	arr[num++] = 0x0;
728 	arr[num++] = 0x8;
729 	arr[num++] = 0x52;	/* naa-5, company id=0x222222 (fake) */
730 	arr[num++] = 0x22;
731 	arr[num++] = 0x22;
732 	arr[num++] = 0x20;
733 	arr[num++] = (port_a >> 24);
734 	arr[num++] = (port_a >> 16) & 0xff;
735 	arr[num++] = (port_a >> 8) & 0xff;
736 	arr[num++] = port_a & 0xff;
737 	/* NAA-5, Target port group identifier */
738 	arr[num++] = 0x61;	/* proto=sas, binary */
739 	arr[num++] = 0x95;	/* piv=1, target port group id */
740 	arr[num++] = 0x0;
741 	arr[num++] = 0x4;
742 	arr[num++] = 0;
743 	arr[num++] = 0;
744 	arr[num++] = (port_group_id >> 8) & 0xff;
745 	arr[num++] = port_group_id & 0xff;
746 	/* NAA-5, Target device identifier */
747 	arr[num++] = 0x61;	/* proto=sas, binary */
748 	arr[num++] = 0xa3;	/* piv=1, target device, naa */
749 	arr[num++] = 0x0;
750 	arr[num++] = 0x8;
751 	arr[num++] = 0x52;	/* naa-5, company id=0x222222 (fake) */
752 	arr[num++] = 0x22;
753 	arr[num++] = 0x22;
754 	arr[num++] = 0x20;
755 	arr[num++] = (target_dev_id >> 24);
756 	arr[num++] = (target_dev_id >> 16) & 0xff;
757 	arr[num++] = (target_dev_id >> 8) & 0xff;
758 	arr[num++] = target_dev_id & 0xff;
759 	/* SCSI name string: Target device identifier */
760 	arr[num++] = 0x63;	/* proto=sas, UTF-8 */
761 	arr[num++] = 0xa8;	/* piv=1, target device, SCSI name string */
762 	arr[num++] = 0x0;
763 	arr[num++] = 24;
764 	memcpy(arr + num, "naa.52222220", 12);
765 	num += 12;
766 	snprintf(b, sizeof(b), "%08X", target_dev_id);
767 	memcpy(arr + num, b, 8);
768 	num += 8;
769 	memset(arr + num, 0, 4);
770 	num += 4;
771 	return num;
772 }
773 
774 
775 static unsigned char vpd84_data[] = {
776 /* from 4th byte */ 0x22,0x22,0x22,0x0,0xbb,0x0,
777     0x22,0x22,0x22,0x0,0xbb,0x1,
778     0x22,0x22,0x22,0x0,0xbb,0x2,
779 };
780 
781 static int inquiry_evpd_84(unsigned char * arr)
782 {
783 	memcpy(arr, vpd84_data, sizeof(vpd84_data));
784 	return sizeof(vpd84_data);
785 }
786 
787 static int inquiry_evpd_85(unsigned char * arr)
788 {
789 	int num = 0;
790 	const char * na1 = "https://www.kernel.org/config";
791 	const char * na2 = "http://www.kernel.org/log";
792 	int plen, olen;
793 
794 	arr[num++] = 0x1;	/* lu, storage config */
795 	arr[num++] = 0x0;	/* reserved */
796 	arr[num++] = 0x0;
797 	olen = strlen(na1);
798 	plen = olen + 1;
799 	if (plen % 4)
800 		plen = ((plen / 4) + 1) * 4;
801 	arr[num++] = plen;	/* length, null termianted, padded */
802 	memcpy(arr + num, na1, olen);
803 	memset(arr + num + olen, 0, plen - olen);
804 	num += plen;
805 
806 	arr[num++] = 0x4;	/* lu, logging */
807 	arr[num++] = 0x0;	/* reserved */
808 	arr[num++] = 0x0;
809 	olen = strlen(na2);
810 	plen = olen + 1;
811 	if (plen % 4)
812 		plen = ((plen / 4) + 1) * 4;
813 	arr[num++] = plen;	/* length, null terminated, padded */
814 	memcpy(arr + num, na2, olen);
815 	memset(arr + num + olen, 0, plen - olen);
816 	num += plen;
817 
818 	return num;
819 }
820 
821 /* SCSI ports VPD page */
822 static int inquiry_evpd_88(unsigned char * arr, int target_dev_id)
823 {
824 	int num = 0;
825 	int port_a, port_b;
826 
827 	port_a = target_dev_id + 1;
828 	port_b = port_a + 1;
829 	arr[num++] = 0x0;	/* reserved */
830 	arr[num++] = 0x0;	/* reserved */
831 	arr[num++] = 0x0;
832 	arr[num++] = 0x1;	/* relative port 1 (primary) */
833 	memset(arr + num, 0, 6);
834 	num += 6;
835 	arr[num++] = 0x0;
836 	arr[num++] = 12;	/* length tp descriptor */
837 	/* naa-5 target port identifier (A) */
838 	arr[num++] = 0x61;	/* proto=sas, binary */
839 	arr[num++] = 0x93;	/* PIV=1, target port, NAA */
840 	arr[num++] = 0x0;	/* reserved */
841 	arr[num++] = 0x8;	/* length */
842 	arr[num++] = 0x52;	/* NAA-5, company_id=0x222222 (fake) */
843 	arr[num++] = 0x22;
844 	arr[num++] = 0x22;
845 	arr[num++] = 0x20;
846 	arr[num++] = (port_a >> 24);
847 	arr[num++] = (port_a >> 16) & 0xff;
848 	arr[num++] = (port_a >> 8) & 0xff;
849 	arr[num++] = port_a & 0xff;
850 
851 	arr[num++] = 0x0;	/* reserved */
852 	arr[num++] = 0x0;	/* reserved */
853 	arr[num++] = 0x0;
854 	arr[num++] = 0x2;	/* relative port 2 (secondary) */
855 	memset(arr + num, 0, 6);
856 	num += 6;
857 	arr[num++] = 0x0;
858 	arr[num++] = 12;	/* length tp descriptor */
859 	/* naa-5 target port identifier (B) */
860 	arr[num++] = 0x61;	/* proto=sas, binary */
861 	arr[num++] = 0x93;	/* PIV=1, target port, NAA */
862 	arr[num++] = 0x0;	/* reserved */
863 	arr[num++] = 0x8;	/* length */
864 	arr[num++] = 0x52;	/* NAA-5, company_id=0x222222 (fake) */
865 	arr[num++] = 0x22;
866 	arr[num++] = 0x22;
867 	arr[num++] = 0x20;
868 	arr[num++] = (port_b >> 24);
869 	arr[num++] = (port_b >> 16) & 0xff;
870 	arr[num++] = (port_b >> 8) & 0xff;
871 	arr[num++] = port_b & 0xff;
872 
873 	return num;
874 }
875 
876 
877 static unsigned char vpd89_data[] = {
878 /* from 4th byte */ 0,0,0,0,
879 'l','i','n','u','x',' ',' ',' ',
880 'S','A','T',' ','s','c','s','i','_','d','e','b','u','g',' ',' ',
881 '1','2','3','4',
882 0x34,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,
883 0xec,0,0,0,
884 0x5a,0xc,0xff,0x3f,0x37,0xc8,0x10,0,0,0,0,0,0x3f,0,0,0,
885 0,0,0,0,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x20,0x20,0x20,0x20,
886 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0,0,0,0x40,0x4,0,0x2e,0x33,
887 0x38,0x31,0x20,0x20,0x20,0x20,0x54,0x53,0x38,0x33,0x30,0x30,0x33,0x31,
888 0x53,0x41,
889 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
890 0x20,0x20,
891 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
892 0x10,0x80,
893 0,0,0,0x2f,0,0,0,0x2,0,0x2,0x7,0,0xff,0xff,0x1,0,
894 0x3f,0,0xc1,0xff,0x3e,0,0x10,0x1,0xb0,0xf8,0x50,0x9,0,0,0x7,0,
895 0x3,0,0x78,0,0x78,0,0xf0,0,0x78,0,0,0,0,0,0,0,
896 0,0,0,0,0,0,0,0,0x2,0,0,0,0,0,0,0,
897 0x7e,0,0x1b,0,0x6b,0x34,0x1,0x7d,0x3,0x40,0x69,0x34,0x1,0x3c,0x3,0x40,
898 0x7f,0x40,0,0,0,0,0xfe,0xfe,0,0,0,0,0,0xfe,0,0,
899 0,0,0,0,0,0,0,0,0xb0,0xf8,0x50,0x9,0,0,0,0,
900 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
901 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
902 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
903 0x1,0,0xb0,0xf8,0x50,0x9,0xb0,0xf8,0x50,0x9,0x20,0x20,0x2,0,0xb6,0x42,
904 0,0x80,0x8a,0,0x6,0x3c,0xa,0x3c,0xff,0xff,0xc6,0x7,0,0x1,0,0x8,
905 0xf0,0xf,0,0x10,0x2,0,0x30,0,0,0,0,0,0,0,0x6,0xfe,
906 0,0,0x2,0,0x50,0,0x8a,0,0x4f,0x95,0,0,0x21,0,0xb,0,
907 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
908 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
909 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
910 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
911 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
912 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
913 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
914 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
915 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
916 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
917 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
918 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xa5,0x51,
919 };
920 
921 static int inquiry_evpd_89(unsigned char * arr)
922 {
923 	memcpy(arr, vpd89_data, sizeof(vpd89_data));
924 	return sizeof(vpd89_data);
925 }
926 
927 
928 static unsigned char vpdb0_data[] = {
929 	/* from 4th byte */ 0,0,0,4,
930 	0,0,0x4,0,
931 	0,0,0,64,
932 };
933 
934 static int inquiry_evpd_b0(unsigned char * arr)
935 {
936 	memcpy(arr, vpdb0_data, sizeof(vpdb0_data));
937 	if (sdebug_store_sectors > 0x400) {
938 		arr[4] = (sdebug_store_sectors >> 24) & 0xff;
939 		arr[5] = (sdebug_store_sectors >> 16) & 0xff;
940 		arr[6] = (sdebug_store_sectors >> 8) & 0xff;
941 		arr[7] = sdebug_store_sectors & 0xff;
942 	}
943 	return sizeof(vpdb0_data);
944 }
945 
946 
947 #define SDEBUG_LONG_INQ_SZ 96
948 #define SDEBUG_MAX_INQ_ARR_SZ 584
949 
950 static int resp_inquiry(struct scsi_cmnd * scp, int target,
951 			struct sdebug_dev_info * devip)
952 {
953 	unsigned char pq_pdt;
954 	unsigned char * arr;
955 	unsigned char *cmd = (unsigned char *)scp->cmnd;
956 	int alloc_len, n, ret;
957 
958 	alloc_len = (cmd[3] << 8) + cmd[4];
959 	arr = kzalloc(SDEBUG_MAX_INQ_ARR_SZ, GFP_ATOMIC);
960 	if (! arr)
961 		return DID_REQUEUE << 16;
962 	if (devip->wlun)
963 		pq_pdt = 0x1e;	/* present, wlun */
964 	else if (scsi_debug_no_lun_0 && (0 == devip->lun))
965 		pq_pdt = 0x7f;	/* not present, no device type */
966 	else
967 		pq_pdt = (scsi_debug_ptype & 0x1f);
968 	arr[0] = pq_pdt;
969 	if (0x2 & cmd[1]) {  /* CMDDT bit set */
970 		mk_sense_buffer(devip, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB,
971 			       	0);
972 		kfree(arr);
973 		return check_condition_result;
974 	} else if (0x1 & cmd[1]) {  /* EVPD bit set */
975 		int lu_id_num, port_group_id, target_dev_id, len;
976 		char lu_id_str[6];
977 		int host_no = devip->sdbg_host->shost->host_no;
978 
979 		port_group_id = (((host_no + 1) & 0x7f) << 8) +
980 		    (devip->channel & 0x7f);
981 		if (0 == scsi_debug_vpd_use_hostno)
982 			host_no = 0;
983 		lu_id_num = devip->wlun ? -1 : (((host_no + 1) * 2000) +
984 			    (devip->target * 1000) + devip->lun);
985 		target_dev_id = ((host_no + 1) * 2000) +
986 				 (devip->target * 1000) - 3;
987 		len = scnprintf(lu_id_str, 6, "%d", lu_id_num);
988 		if (0 == cmd[2]) { /* supported vital product data pages */
989 			arr[1] = cmd[2];	/*sanity */
990 			n = 4;
991 			arr[n++] = 0x0;   /* this page */
992 			arr[n++] = 0x80;  /* unit serial number */
993 			arr[n++] = 0x83;  /* device identification */
994 			arr[n++] = 0x84;  /* software interface ident. */
995 			arr[n++] = 0x85;  /* management network addresses */
996 			arr[n++] = 0x86;  /* extended inquiry */
997 			arr[n++] = 0x87;  /* mode page policy */
998 			arr[n++] = 0x88;  /* SCSI ports */
999 			arr[n++] = 0x89;  /* ATA information */
1000 			arr[n++] = 0xb0;  /* Block limits (SBC) */
1001 			arr[3] = n - 4;	  /* number of supported VPD pages */
1002 		} else if (0x80 == cmd[2]) { /* unit serial number */
1003 			arr[1] = cmd[2];	/*sanity */
1004 			arr[3] = len;
1005 			memcpy(&arr[4], lu_id_str, len);
1006 		} else if (0x83 == cmd[2]) { /* device identification */
1007 			arr[1] = cmd[2];	/*sanity */
1008 			arr[3] = inquiry_evpd_83(&arr[4], port_group_id,
1009 						 target_dev_id, lu_id_num,
1010 						 lu_id_str, len);
1011 		} else if (0x84 == cmd[2]) { /* Software interface ident. */
1012 			arr[1] = cmd[2];	/*sanity */
1013 			arr[3] = inquiry_evpd_84(&arr[4]);
1014 		} else if (0x85 == cmd[2]) { /* Management network addresses */
1015 			arr[1] = cmd[2];	/*sanity */
1016 			arr[3] = inquiry_evpd_85(&arr[4]);
1017 		} else if (0x86 == cmd[2]) { /* extended inquiry */
1018 			arr[1] = cmd[2];	/*sanity */
1019 			arr[3] = 0x3c;	/* number of following entries */
1020 			arr[4] = 0x0;   /* no protection stuff */
1021 			arr[5] = 0x7;   /* head of q, ordered + simple q's */
1022 		} else if (0x87 == cmd[2]) { /* mode page policy */
1023 			arr[1] = cmd[2];	/*sanity */
1024 			arr[3] = 0x8;	/* number of following entries */
1025 			arr[4] = 0x2;	/* disconnect-reconnect mp */
1026 			arr[6] = 0x80;	/* mlus, shared */
1027 			arr[8] = 0x18;	 /* protocol specific lu */
1028 			arr[10] = 0x82;	 /* mlus, per initiator port */
1029 		} else if (0x88 == cmd[2]) { /* SCSI Ports */
1030 			arr[1] = cmd[2];	/*sanity */
1031 			arr[3] = inquiry_evpd_88(&arr[4], target_dev_id);
1032 		} else if (0x89 == cmd[2]) { /* ATA information */
1033 			arr[1] = cmd[2];        /*sanity */
1034 			n = inquiry_evpd_89(&arr[4]);
1035 			arr[2] = (n >> 8);
1036 			arr[3] = (n & 0xff);
1037 		} else if (0xb0 == cmd[2]) { /* Block limits (SBC) */
1038 			arr[1] = cmd[2];        /*sanity */
1039 			arr[3] = inquiry_evpd_b0(&arr[4]);
1040 		} else {
1041 			/* Illegal request, invalid field in cdb */
1042 			mk_sense_buffer(devip, ILLEGAL_REQUEST,
1043 					INVALID_FIELD_IN_CDB, 0);
1044 			kfree(arr);
1045 			return check_condition_result;
1046 		}
1047 		len = min(((arr[2] << 8) + arr[3]) + 4, alloc_len);
1048 		ret = fill_from_dev_buffer(scp, arr,
1049 			    min(len, SDEBUG_MAX_INQ_ARR_SZ));
1050 		kfree(arr);
1051 		return ret;
1052 	}
1053 	/* drops through here for a standard inquiry */
1054 	arr[1] = DEV_REMOVEABLE(target) ? 0x80 : 0;	/* Removable disk */
1055 	arr[2] = scsi_debug_scsi_level;
1056 	arr[3] = 2;    /* response_data_format==2 */
1057 	arr[4] = SDEBUG_LONG_INQ_SZ - 5;
1058 	if (0 == scsi_debug_vpd_use_hostno)
1059 		arr[5] = 0x10; /* claim: implicit TGPS */
1060 	arr[6] = 0x10; /* claim: MultiP */
1061 	/* arr[6] |= 0x40; ... claim: EncServ (enclosure services) */
1062 	arr[7] = 0xa; /* claim: LINKED + CMDQUE */
1063 	memcpy(&arr[8], inq_vendor_id, 8);
1064 	memcpy(&arr[16], inq_product_id, 16);
1065 	memcpy(&arr[32], inq_product_rev, 4);
1066 	/* version descriptors (2 bytes each) follow */
1067 	arr[58] = 0x0; arr[59] = 0x77; /* SAM-3 ANSI */
1068 	arr[60] = 0x3; arr[61] = 0x14;  /* SPC-3 ANSI */
1069 	n = 62;
1070 	if (scsi_debug_ptype == 0) {
1071 		arr[n++] = 0x3; arr[n++] = 0x3d; /* SBC-2 ANSI */
1072 	} else if (scsi_debug_ptype == 1) {
1073 		arr[n++] = 0x3; arr[n++] = 0x60; /* SSC-2 no version */
1074 	}
1075 	arr[n++] = 0xc; arr[n++] = 0xf;  /* SAS-1.1 rev 10 */
1076 	ret = fill_from_dev_buffer(scp, arr,
1077 			    min(alloc_len, SDEBUG_LONG_INQ_SZ));
1078 	kfree(arr);
1079 	return ret;
1080 }
1081 
1082 static int resp_requests(struct scsi_cmnd * scp,
1083 			 struct sdebug_dev_info * devip)
1084 {
1085 	unsigned char * sbuff;
1086 	unsigned char *cmd = (unsigned char *)scp->cmnd;
1087 	unsigned char arr[SDEBUG_SENSE_LEN];
1088 	int want_dsense;
1089 	int len = 18;
1090 
1091 	memset(arr, 0, sizeof(arr));
1092 	if (devip->reset == 1)
1093 		mk_sense_buffer(devip, 0, NO_ADDITIONAL_SENSE, 0);
1094 	want_dsense = !!(cmd[1] & 1) || scsi_debug_dsense;
1095 	sbuff = devip->sense_buff;
1096 	if ((iec_m_pg[2] & 0x4) && (6 == (iec_m_pg[3] & 0xf))) {
1097 		if (want_dsense) {
1098 			arr[0] = 0x72;
1099 			arr[1] = 0x0;		/* NO_SENSE in sense_key */
1100 			arr[2] = THRESHOLD_EXCEEDED;
1101 			arr[3] = 0xff;		/* TEST set and MRIE==6 */
1102 		} else {
1103 			arr[0] = 0x70;
1104 			arr[2] = 0x0;		/* NO_SENSE in sense_key */
1105 			arr[7] = 0xa;   	/* 18 byte sense buffer */
1106 			arr[12] = THRESHOLD_EXCEEDED;
1107 			arr[13] = 0xff;		/* TEST set and MRIE==6 */
1108 		}
1109 	} else {
1110 		memcpy(arr, sbuff, SDEBUG_SENSE_LEN);
1111 		if ((cmd[1] & 1) && (! scsi_debug_dsense)) {
1112 			/* DESC bit set and sense_buff in fixed format */
1113 			memset(arr, 0, sizeof(arr));
1114 			arr[0] = 0x72;
1115 			arr[1] = sbuff[2];     /* sense key */
1116 			arr[2] = sbuff[12];    /* asc */
1117 			arr[3] = sbuff[13];    /* ascq */
1118 			len = 8;
1119 		}
1120 	}
1121 	mk_sense_buffer(devip, 0, NO_ADDITIONAL_SENSE, 0);
1122 	return fill_from_dev_buffer(scp, arr, len);
1123 }
1124 
1125 static int resp_start_stop(struct scsi_cmnd * scp,
1126 			   struct sdebug_dev_info * devip)
1127 {
1128 	unsigned char *cmd = (unsigned char *)scp->cmnd;
1129 	int power_cond, errsts, start;
1130 
1131 	if ((errsts = check_readiness(scp, 1, devip)))
1132 		return errsts;
1133 	power_cond = (cmd[4] & 0xf0) >> 4;
1134 	if (power_cond) {
1135 		mk_sense_buffer(devip, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB,
1136 			       	0);
1137 		return check_condition_result;
1138 	}
1139 	start = cmd[4] & 1;
1140 	if (start == devip->stopped)
1141 		devip->stopped = !start;
1142 	return 0;
1143 }
1144 
1145 #define SDEBUG_READCAP_ARR_SZ 8
1146 static int resp_readcap(struct scsi_cmnd * scp,
1147 			struct sdebug_dev_info * devip)
1148 {
1149 	unsigned char arr[SDEBUG_READCAP_ARR_SZ];
1150 	unsigned int capac;
1151 	int errsts;
1152 
1153 	if ((errsts = check_readiness(scp, 1, devip)))
1154 		return errsts;
1155 	/* following just in case virtual_gb changed */
1156 	if (scsi_debug_virtual_gb > 0) {
1157 		sdebug_capacity = 2048 * 1024;
1158 		sdebug_capacity *= scsi_debug_virtual_gb;
1159 	} else
1160 		sdebug_capacity = sdebug_store_sectors;
1161 	memset(arr, 0, SDEBUG_READCAP_ARR_SZ);
1162 	if (sdebug_capacity < 0xffffffff) {
1163 		capac = (unsigned int)sdebug_capacity - 1;
1164 		arr[0] = (capac >> 24);
1165 		arr[1] = (capac >> 16) & 0xff;
1166 		arr[2] = (capac >> 8) & 0xff;
1167 		arr[3] = capac & 0xff;
1168 	} else {
1169 		arr[0] = 0xff;
1170 		arr[1] = 0xff;
1171 		arr[2] = 0xff;
1172 		arr[3] = 0xff;
1173 	}
1174 	arr[6] = (SECT_SIZE_PER(target) >> 8) & 0xff;
1175 	arr[7] = SECT_SIZE_PER(target) & 0xff;
1176 	return fill_from_dev_buffer(scp, arr, SDEBUG_READCAP_ARR_SZ);
1177 }
1178 
1179 #define SDEBUG_READCAP16_ARR_SZ 32
1180 static int resp_readcap16(struct scsi_cmnd * scp,
1181 			  struct sdebug_dev_info * devip)
1182 {
1183 	unsigned char *cmd = (unsigned char *)scp->cmnd;
1184 	unsigned char arr[SDEBUG_READCAP16_ARR_SZ];
1185 	unsigned long long capac;
1186 	int errsts, k, alloc_len;
1187 
1188 	if ((errsts = check_readiness(scp, 1, devip)))
1189 		return errsts;
1190 	alloc_len = ((cmd[10] << 24) + (cmd[11] << 16) + (cmd[12] << 8)
1191 		     + cmd[13]);
1192 	/* following just in case virtual_gb changed */
1193 	if (scsi_debug_virtual_gb > 0) {
1194 		sdebug_capacity = 2048 * 1024;
1195 		sdebug_capacity *= scsi_debug_virtual_gb;
1196 	} else
1197 		sdebug_capacity = sdebug_store_sectors;
1198 	memset(arr, 0, SDEBUG_READCAP16_ARR_SZ);
1199 	capac = sdebug_capacity - 1;
1200 	for (k = 0; k < 8; ++k, capac >>= 8)
1201 		arr[7 - k] = capac & 0xff;
1202 	arr[8] = (SECT_SIZE_PER(target) >> 24) & 0xff;
1203 	arr[9] = (SECT_SIZE_PER(target) >> 16) & 0xff;
1204 	arr[10] = (SECT_SIZE_PER(target) >> 8) & 0xff;
1205 	arr[11] = SECT_SIZE_PER(target) & 0xff;
1206 	return fill_from_dev_buffer(scp, arr,
1207 				    min(alloc_len, SDEBUG_READCAP16_ARR_SZ));
1208 }
1209 
1210 #define SDEBUG_MAX_TGTPGS_ARR_SZ 1412
1211 
1212 static int resp_report_tgtpgs(struct scsi_cmnd * scp,
1213 			      struct sdebug_dev_info * devip)
1214 {
1215 	unsigned char *cmd = (unsigned char *)scp->cmnd;
1216 	unsigned char * arr;
1217 	int host_no = devip->sdbg_host->shost->host_no;
1218 	int n, ret, alen, rlen;
1219 	int port_group_a, port_group_b, port_a, port_b;
1220 
1221 	alen = ((cmd[6] << 24) + (cmd[7] << 16) + (cmd[8] << 8)
1222 		+ cmd[9]);
1223 
1224 	arr = kzalloc(SDEBUG_MAX_TGTPGS_ARR_SZ, GFP_ATOMIC);
1225 	if (! arr)
1226 		return DID_REQUEUE << 16;
1227 	/*
1228 	 * EVPD page 0x88 states we have two ports, one
1229 	 * real and a fake port with no device connected.
1230 	 * So we create two port groups with one port each
1231 	 * and set the group with port B to unavailable.
1232 	 */
1233 	port_a = 0x1; /* relative port A */
1234 	port_b = 0x2; /* relative port B */
1235 	port_group_a = (((host_no + 1) & 0x7f) << 8) +
1236 	    (devip->channel & 0x7f);
1237 	port_group_b = (((host_no + 1) & 0x7f) << 8) +
1238 	    (devip->channel & 0x7f) + 0x80;
1239 
1240 	/*
1241 	 * The asymmetric access state is cycled according to the host_id.
1242 	 */
1243 	n = 4;
1244 	if (0 == scsi_debug_vpd_use_hostno) {
1245 	    arr[n++] = host_no % 3; /* Asymm access state */
1246 	    arr[n++] = 0x0F; /* claim: all states are supported */
1247 	} else {
1248 	    arr[n++] = 0x0; /* Active/Optimized path */
1249 	    arr[n++] = 0x01; /* claim: only support active/optimized paths */
1250 	}
1251 	arr[n++] = (port_group_a >> 8) & 0xff;
1252 	arr[n++] = port_group_a & 0xff;
1253 	arr[n++] = 0;    /* Reserved */
1254 	arr[n++] = 0;    /* Status code */
1255 	arr[n++] = 0;    /* Vendor unique */
1256 	arr[n++] = 0x1;  /* One port per group */
1257 	arr[n++] = 0;    /* Reserved */
1258 	arr[n++] = 0;    /* Reserved */
1259 	arr[n++] = (port_a >> 8) & 0xff;
1260 	arr[n++] = port_a & 0xff;
1261 	arr[n++] = 3;    /* Port unavailable */
1262 	arr[n++] = 0x08; /* claim: only unavailalbe paths are supported */
1263 	arr[n++] = (port_group_b >> 8) & 0xff;
1264 	arr[n++] = port_group_b & 0xff;
1265 	arr[n++] = 0;    /* Reserved */
1266 	arr[n++] = 0;    /* Status code */
1267 	arr[n++] = 0;    /* Vendor unique */
1268 	arr[n++] = 0x1;  /* One port per group */
1269 	arr[n++] = 0;    /* Reserved */
1270 	arr[n++] = 0;    /* Reserved */
1271 	arr[n++] = (port_b >> 8) & 0xff;
1272 	arr[n++] = port_b & 0xff;
1273 
1274 	rlen = n - 4;
1275 	arr[0] = (rlen >> 24) & 0xff;
1276 	arr[1] = (rlen >> 16) & 0xff;
1277 	arr[2] = (rlen >> 8) & 0xff;
1278 	arr[3] = rlen & 0xff;
1279 
1280 	/*
1281 	 * Return the smallest value of either
1282 	 * - The allocated length
1283 	 * - The constructed command length
1284 	 * - The maximum array size
1285 	 */
1286 	rlen = min(alen,n);
1287 	ret = fill_from_dev_buffer(scp, arr,
1288 				   min(rlen, SDEBUG_MAX_TGTPGS_ARR_SZ));
1289 	kfree(arr);
1290 	return ret;
1291 }
1292 
1293 /* <<Following mode page info copied from ST318451LW>> */
1294 
1295 static int resp_err_recov_pg(unsigned char * p, int pcontrol, int target)
1296 {	/* Read-Write Error Recovery page for mode_sense */
1297 	unsigned char err_recov_pg[] = {0x1, 0xa, 0xc0, 11, 240, 0, 0, 0,
1298 					5, 0, 0xff, 0xff};
1299 
1300 	memcpy(p, err_recov_pg, sizeof(err_recov_pg));
1301 	if (1 == pcontrol)
1302 		memset(p + 2, 0, sizeof(err_recov_pg) - 2);
1303 	return sizeof(err_recov_pg);
1304 }
1305 
1306 static int resp_disconnect_pg(unsigned char * p, int pcontrol, int target)
1307 { 	/* Disconnect-Reconnect page for mode_sense */
1308 	unsigned char disconnect_pg[] = {0x2, 0xe, 128, 128, 0, 10, 0, 0,
1309 					 0, 0, 0, 0, 0, 0, 0, 0};
1310 
1311 	memcpy(p, disconnect_pg, sizeof(disconnect_pg));
1312 	if (1 == pcontrol)
1313 		memset(p + 2, 0, sizeof(disconnect_pg) - 2);
1314 	return sizeof(disconnect_pg);
1315 }
1316 
1317 static int resp_format_pg(unsigned char * p, int pcontrol, int target)
1318 {       /* Format device page for mode_sense */
1319         unsigned char format_pg[] = {0x3, 0x16, 0, 0, 0, 0, 0, 0,
1320                                      0, 0, 0, 0, 0, 0, 0, 0,
1321                                      0, 0, 0, 0, 0x40, 0, 0, 0};
1322 
1323         memcpy(p, format_pg, sizeof(format_pg));
1324         p[10] = (sdebug_sectors_per >> 8) & 0xff;
1325         p[11] = sdebug_sectors_per & 0xff;
1326         p[12] = (SECT_SIZE >> 8) & 0xff;
1327         p[13] = SECT_SIZE & 0xff;
1328         if (DEV_REMOVEABLE(target))
1329                 p[20] |= 0x20; /* should agree with INQUIRY */
1330         if (1 == pcontrol)
1331                 memset(p + 2, 0, sizeof(format_pg) - 2);
1332         return sizeof(format_pg);
1333 }
1334 
1335 static int resp_caching_pg(unsigned char * p, int pcontrol, int target)
1336 { 	/* Caching page for mode_sense */
1337 	unsigned char caching_pg[] = {0x8, 18, 0x14, 0, 0xff, 0xff, 0, 0,
1338 		0xff, 0xff, 0xff, 0xff, 0x80, 0x14, 0, 0,     0, 0, 0, 0};
1339 
1340 	memcpy(p, caching_pg, sizeof(caching_pg));
1341 	if (1 == pcontrol)
1342 		memset(p + 2, 0, sizeof(caching_pg) - 2);
1343 	return sizeof(caching_pg);
1344 }
1345 
1346 static int resp_ctrl_m_pg(unsigned char * p, int pcontrol, int target)
1347 { 	/* Control mode page for mode_sense */
1348 	unsigned char ch_ctrl_m_pg[] = {/* 0xa, 10, */ 0x6, 0, 0, 0, 0, 0,
1349 				        0, 0, 0, 0};
1350 	unsigned char d_ctrl_m_pg[] = {0xa, 10, 2, 0, 0, 0, 0, 0,
1351 				     0, 0, 0x2, 0x4b};
1352 
1353 	if (scsi_debug_dsense)
1354 		ctrl_m_pg[2] |= 0x4;
1355 	else
1356 		ctrl_m_pg[2] &= ~0x4;
1357 	memcpy(p, ctrl_m_pg, sizeof(ctrl_m_pg));
1358 	if (1 == pcontrol)
1359 		memcpy(p + 2, ch_ctrl_m_pg, sizeof(ch_ctrl_m_pg));
1360 	else if (2 == pcontrol)
1361 		memcpy(p, d_ctrl_m_pg, sizeof(d_ctrl_m_pg));
1362 	return sizeof(ctrl_m_pg);
1363 }
1364 
1365 
1366 static int resp_iec_m_pg(unsigned char * p, int pcontrol, int target)
1367 {	/* Informational Exceptions control mode page for mode_sense */
1368 	unsigned char ch_iec_m_pg[] = {/* 0x1c, 0xa, */ 0x4, 0xf, 0, 0, 0, 0,
1369 				       0, 0, 0x0, 0x0};
1370 	unsigned char d_iec_m_pg[] = {0x1c, 0xa, 0x08, 0, 0, 0, 0, 0,
1371 				      0, 0, 0x0, 0x0};
1372 
1373 	memcpy(p, iec_m_pg, sizeof(iec_m_pg));
1374 	if (1 == pcontrol)
1375 		memcpy(p + 2, ch_iec_m_pg, sizeof(ch_iec_m_pg));
1376 	else if (2 == pcontrol)
1377 		memcpy(p, d_iec_m_pg, sizeof(d_iec_m_pg));
1378 	return sizeof(iec_m_pg);
1379 }
1380 
1381 static int resp_sas_sf_m_pg(unsigned char * p, int pcontrol, int target)
1382 {	/* SAS SSP mode page - short format for mode_sense */
1383 	unsigned char sas_sf_m_pg[] = {0x19, 0x6,
1384 		0x6, 0x0, 0x7, 0xd0, 0x0, 0x0};
1385 
1386 	memcpy(p, sas_sf_m_pg, sizeof(sas_sf_m_pg));
1387 	if (1 == pcontrol)
1388 		memset(p + 2, 0, sizeof(sas_sf_m_pg) - 2);
1389 	return sizeof(sas_sf_m_pg);
1390 }
1391 
1392 
1393 static int resp_sas_pcd_m_spg(unsigned char * p, int pcontrol, int target,
1394 			      int target_dev_id)
1395 {	/* SAS phy control and discover mode page for mode_sense */
1396 	unsigned char sas_pcd_m_pg[] = {0x59, 0x1, 0, 0x64, 0, 0x6, 0, 2,
1397 		    0, 0, 0, 0, 0x10, 0x9, 0x8, 0x0,
1398 		    0x52, 0x22, 0x22, 0x20, 0x0, 0x0, 0x0, 0x0,
1399 		    0x51, 0x11, 0x11, 0x10, 0x0, 0x0, 0x0, 0x1,
1400 		    0x2, 0, 0, 0, 0, 0, 0, 0,
1401 		    0x88, 0x99, 0, 0, 0, 0, 0, 0,
1402 		    0, 0, 0, 0, 0, 0, 0, 0,
1403 		    0, 1, 0, 0, 0x10, 0x9, 0x8, 0x0,
1404 		    0x52, 0x22, 0x22, 0x20, 0x0, 0x0, 0x0, 0x0,
1405 		    0x51, 0x11, 0x11, 0x10, 0x0, 0x0, 0x0, 0x1,
1406 		    0x3, 0, 0, 0, 0, 0, 0, 0,
1407 		    0x88, 0x99, 0, 0, 0, 0, 0, 0,
1408 		    0, 0, 0, 0, 0, 0, 0, 0,
1409 		};
1410 	int port_a, port_b;
1411 
1412 	port_a = target_dev_id + 1;
1413 	port_b = port_a + 1;
1414 	memcpy(p, sas_pcd_m_pg, sizeof(sas_pcd_m_pg));
1415 	p[20] = (port_a >> 24);
1416 	p[21] = (port_a >> 16) & 0xff;
1417 	p[22] = (port_a >> 8) & 0xff;
1418 	p[23] = port_a & 0xff;
1419 	p[48 + 20] = (port_b >> 24);
1420 	p[48 + 21] = (port_b >> 16) & 0xff;
1421 	p[48 + 22] = (port_b >> 8) & 0xff;
1422 	p[48 + 23] = port_b & 0xff;
1423 	if (1 == pcontrol)
1424 		memset(p + 4, 0, sizeof(sas_pcd_m_pg) - 4);
1425 	return sizeof(sas_pcd_m_pg);
1426 }
1427 
1428 static int resp_sas_sha_m_spg(unsigned char * p, int pcontrol)
1429 {	/* SAS SSP shared protocol specific port mode subpage */
1430 	unsigned char sas_sha_m_pg[] = {0x59, 0x2, 0, 0xc, 0, 0x6, 0x10, 0,
1431 		    0, 0, 0, 0, 0, 0, 0, 0,
1432 		};
1433 
1434 	memcpy(p, sas_sha_m_pg, sizeof(sas_sha_m_pg));
1435 	if (1 == pcontrol)
1436 		memset(p + 4, 0, sizeof(sas_sha_m_pg) - 4);
1437 	return sizeof(sas_sha_m_pg);
1438 }
1439 
1440 #define SDEBUG_MAX_MSENSE_SZ 256
1441 
1442 static int resp_mode_sense(struct scsi_cmnd * scp, int target,
1443 			   struct sdebug_dev_info * devip)
1444 {
1445 	unsigned char dbd, llbaa;
1446 	int pcontrol, pcode, subpcode, bd_len;
1447 	unsigned char dev_spec;
1448 	int k, alloc_len, msense_6, offset, len, errsts, target_dev_id;
1449 	unsigned char * ap;
1450 	unsigned char arr[SDEBUG_MAX_MSENSE_SZ];
1451 	unsigned char *cmd = (unsigned char *)scp->cmnd;
1452 
1453 	if ((errsts = check_readiness(scp, 1, devip)))
1454 		return errsts;
1455 	dbd = !!(cmd[1] & 0x8);
1456 	pcontrol = (cmd[2] & 0xc0) >> 6;
1457 	pcode = cmd[2] & 0x3f;
1458 	subpcode = cmd[3];
1459 	msense_6 = (MODE_SENSE == cmd[0]);
1460 	llbaa = msense_6 ? 0 : !!(cmd[1] & 0x10);
1461 	if ((0 == scsi_debug_ptype) && (0 == dbd))
1462 		bd_len = llbaa ? 16 : 8;
1463 	else
1464 		bd_len = 0;
1465 	alloc_len = msense_6 ? cmd[4] : ((cmd[7] << 8) | cmd[8]);
1466 	memset(arr, 0, SDEBUG_MAX_MSENSE_SZ);
1467 	if (0x3 == pcontrol) {  /* Saving values not supported */
1468 		mk_sense_buffer(devip, ILLEGAL_REQUEST, SAVING_PARAMS_UNSUP,
1469 			       	0);
1470 		return check_condition_result;
1471 	}
1472 	target_dev_id = ((devip->sdbg_host->shost->host_no + 1) * 2000) +
1473 			(devip->target * 1000) - 3;
1474 	/* set DPOFUA bit for disks */
1475 	if (0 == scsi_debug_ptype)
1476 		dev_spec = (DEV_READONLY(target) ? 0x80 : 0x0) | 0x10;
1477 	else
1478 		dev_spec = 0x0;
1479 	if (msense_6) {
1480 		arr[2] = dev_spec;
1481 		arr[3] = bd_len;
1482 		offset = 4;
1483 	} else {
1484 		arr[3] = dev_spec;
1485 		if (16 == bd_len)
1486 			arr[4] = 0x1;	/* set LONGLBA bit */
1487 		arr[7] = bd_len;	/* assume 255 or less */
1488 		offset = 8;
1489 	}
1490 	ap = arr + offset;
1491 	if ((bd_len > 0) && (0 == sdebug_capacity)) {
1492 		if (scsi_debug_virtual_gb > 0) {
1493 			sdebug_capacity = 2048 * 1024;
1494 			sdebug_capacity *= scsi_debug_virtual_gb;
1495 		} else
1496 			sdebug_capacity = sdebug_store_sectors;
1497 	}
1498 	if (8 == bd_len) {
1499 		if (sdebug_capacity > 0xfffffffe) {
1500 			ap[0] = 0xff;
1501 			ap[1] = 0xff;
1502 			ap[2] = 0xff;
1503 			ap[3] = 0xff;
1504 		} else {
1505 			ap[0] = (sdebug_capacity >> 24) & 0xff;
1506 			ap[1] = (sdebug_capacity >> 16) & 0xff;
1507 			ap[2] = (sdebug_capacity >> 8) & 0xff;
1508 			ap[3] = sdebug_capacity & 0xff;
1509 		}
1510         	ap[6] = (SECT_SIZE_PER(target) >> 8) & 0xff;
1511         	ap[7] = SECT_SIZE_PER(target) & 0xff;
1512 		offset += bd_len;
1513 		ap = arr + offset;
1514 	} else if (16 == bd_len) {
1515 		unsigned long long capac = sdebug_capacity;
1516 
1517         	for (k = 0; k < 8; ++k, capac >>= 8)
1518                 	ap[7 - k] = capac & 0xff;
1519         	ap[12] = (SECT_SIZE_PER(target) >> 24) & 0xff;
1520         	ap[13] = (SECT_SIZE_PER(target) >> 16) & 0xff;
1521         	ap[14] = (SECT_SIZE_PER(target) >> 8) & 0xff;
1522         	ap[15] = SECT_SIZE_PER(target) & 0xff;
1523 		offset += bd_len;
1524 		ap = arr + offset;
1525 	}
1526 
1527 	if ((subpcode > 0x0) && (subpcode < 0xff) && (0x19 != pcode)) {
1528 		/* TODO: Control Extension page */
1529 		mk_sense_buffer(devip, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB,
1530 			       	0);
1531 		return check_condition_result;
1532 	}
1533 	switch (pcode) {
1534 	case 0x1:	/* Read-Write error recovery page, direct access */
1535 		len = resp_err_recov_pg(ap, pcontrol, target);
1536 		offset += len;
1537 		break;
1538 	case 0x2:	/* Disconnect-Reconnect page, all devices */
1539 		len = resp_disconnect_pg(ap, pcontrol, target);
1540 		offset += len;
1541 		break;
1542         case 0x3:       /* Format device page, direct access */
1543                 len = resp_format_pg(ap, pcontrol, target);
1544                 offset += len;
1545                 break;
1546 	case 0x8:	/* Caching page, direct access */
1547 		len = resp_caching_pg(ap, pcontrol, target);
1548 		offset += len;
1549 		break;
1550 	case 0xa:	/* Control Mode page, all devices */
1551 		len = resp_ctrl_m_pg(ap, pcontrol, target);
1552 		offset += len;
1553 		break;
1554 	case 0x19:	/* if spc==1 then sas phy, control+discover */
1555 		if ((subpcode > 0x2) && (subpcode < 0xff)) {
1556 		        mk_sense_buffer(devip, ILLEGAL_REQUEST,
1557 					INVALID_FIELD_IN_CDB, 0);
1558 			return check_condition_result;
1559 	        }
1560 		len = 0;
1561 		if ((0x0 == subpcode) || (0xff == subpcode))
1562 			len += resp_sas_sf_m_pg(ap + len, pcontrol, target);
1563 		if ((0x1 == subpcode) || (0xff == subpcode))
1564 			len += resp_sas_pcd_m_spg(ap + len, pcontrol, target,
1565 						  target_dev_id);
1566 		if ((0x2 == subpcode) || (0xff == subpcode))
1567 			len += resp_sas_sha_m_spg(ap + len, pcontrol);
1568 		offset += len;
1569 		break;
1570 	case 0x1c:	/* Informational Exceptions Mode page, all devices */
1571 		len = resp_iec_m_pg(ap, pcontrol, target);
1572 		offset += len;
1573 		break;
1574 	case 0x3f:	/* Read all Mode pages */
1575 		if ((0 == subpcode) || (0xff == subpcode)) {
1576 			len = resp_err_recov_pg(ap, pcontrol, target);
1577 			len += resp_disconnect_pg(ap + len, pcontrol, target);
1578 			len += resp_format_pg(ap + len, pcontrol, target);
1579 			len += resp_caching_pg(ap + len, pcontrol, target);
1580 			len += resp_ctrl_m_pg(ap + len, pcontrol, target);
1581 			len += resp_sas_sf_m_pg(ap + len, pcontrol, target);
1582 			if (0xff == subpcode) {
1583 				len += resp_sas_pcd_m_spg(ap + len, pcontrol,
1584 						  target, target_dev_id);
1585 				len += resp_sas_sha_m_spg(ap + len, pcontrol);
1586 			}
1587 			len += resp_iec_m_pg(ap + len, pcontrol, target);
1588 		} else {
1589 			mk_sense_buffer(devip, ILLEGAL_REQUEST,
1590 					INVALID_FIELD_IN_CDB, 0);
1591 			return check_condition_result;
1592                 }
1593 		offset += len;
1594 		break;
1595 	default:
1596 		mk_sense_buffer(devip, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB,
1597 			       	0);
1598 		return check_condition_result;
1599 	}
1600 	if (msense_6)
1601 		arr[0] = offset - 1;
1602 	else {
1603 		arr[0] = ((offset - 2) >> 8) & 0xff;
1604 		arr[1] = (offset - 2) & 0xff;
1605 	}
1606 	return fill_from_dev_buffer(scp, arr, min(alloc_len, offset));
1607 }
1608 
1609 #define SDEBUG_MAX_MSELECT_SZ 512
1610 
1611 static int resp_mode_select(struct scsi_cmnd * scp, int mselect6,
1612 			    struct sdebug_dev_info * devip)
1613 {
1614 	int pf, sp, ps, md_len, bd_len, off, spf, pg_len;
1615 	int param_len, res, errsts, mpage;
1616 	unsigned char arr[SDEBUG_MAX_MSELECT_SZ];
1617 	unsigned char *cmd = (unsigned char *)scp->cmnd;
1618 
1619 	if ((errsts = check_readiness(scp, 1, devip)))
1620 		return errsts;
1621 	memset(arr, 0, sizeof(arr));
1622 	pf = cmd[1] & 0x10;
1623 	sp = cmd[1] & 0x1;
1624 	param_len = mselect6 ? cmd[4] : ((cmd[7] << 8) + cmd[8]);
1625 	if ((0 == pf) || sp || (param_len > SDEBUG_MAX_MSELECT_SZ)) {
1626 		mk_sense_buffer(devip, ILLEGAL_REQUEST,
1627 				INVALID_FIELD_IN_CDB, 0);
1628 		return check_condition_result;
1629 	}
1630         res = fetch_to_dev_buffer(scp, arr, param_len);
1631         if (-1 == res)
1632                 return (DID_ERROR << 16);
1633         else if ((res < param_len) &&
1634                  (SCSI_DEBUG_OPT_NOISE & scsi_debug_opts))
1635                 printk(KERN_INFO "scsi_debug: mode_select: cdb indicated=%d, "
1636                        " IO sent=%d bytes\n", param_len, res);
1637 	md_len = mselect6 ? (arr[0] + 1) : ((arr[0] << 8) + arr[1] + 2);
1638 	bd_len = mselect6 ? arr[3] : ((arr[6] << 8) + arr[7]);
1639 	if (md_len > 2) {
1640 		mk_sense_buffer(devip, ILLEGAL_REQUEST,
1641 				INVALID_FIELD_IN_PARAM_LIST, 0);
1642 		return check_condition_result;
1643 	}
1644 	off = bd_len + (mselect6 ? 4 : 8);
1645 	mpage = arr[off] & 0x3f;
1646 	ps = !!(arr[off] & 0x80);
1647 	if (ps) {
1648 		mk_sense_buffer(devip, ILLEGAL_REQUEST,
1649 				INVALID_FIELD_IN_PARAM_LIST, 0);
1650 		return check_condition_result;
1651 	}
1652 	spf = !!(arr[off] & 0x40);
1653 	pg_len = spf ? ((arr[off + 2] << 8) + arr[off + 3] + 4) :
1654 		       (arr[off + 1] + 2);
1655 	if ((pg_len + off) > param_len) {
1656 		mk_sense_buffer(devip, ILLEGAL_REQUEST,
1657 				PARAMETER_LIST_LENGTH_ERR, 0);
1658 		return check_condition_result;
1659 	}
1660 	switch (mpage) {
1661 	case 0xa:      /* Control Mode page */
1662 		if (ctrl_m_pg[1] == arr[off + 1]) {
1663 			memcpy(ctrl_m_pg + 2, arr + off + 2,
1664 			       sizeof(ctrl_m_pg) - 2);
1665 			scsi_debug_dsense = !!(ctrl_m_pg[2] & 0x4);
1666 			return 0;
1667 		}
1668 		break;
1669 	case 0x1c:      /* Informational Exceptions Mode page */
1670 		if (iec_m_pg[1] == arr[off + 1]) {
1671 			memcpy(iec_m_pg + 2, arr + off + 2,
1672 			       sizeof(iec_m_pg) - 2);
1673 			return 0;
1674 		}
1675 		break;
1676 	default:
1677 		break;
1678 	}
1679 	mk_sense_buffer(devip, ILLEGAL_REQUEST,
1680 			INVALID_FIELD_IN_PARAM_LIST, 0);
1681 	return check_condition_result;
1682 }
1683 
1684 static int resp_temp_l_pg(unsigned char * arr)
1685 {
1686 	unsigned char temp_l_pg[] = {0x0, 0x0, 0x3, 0x2, 0x0, 38,
1687 				     0x0, 0x1, 0x3, 0x2, 0x0, 65,
1688 		};
1689 
1690         memcpy(arr, temp_l_pg, sizeof(temp_l_pg));
1691         return sizeof(temp_l_pg);
1692 }
1693 
1694 static int resp_ie_l_pg(unsigned char * arr)
1695 {
1696 	unsigned char ie_l_pg[] = {0x0, 0x0, 0x3, 0x3, 0x0, 0x0, 38,
1697 		};
1698 
1699         memcpy(arr, ie_l_pg, sizeof(ie_l_pg));
1700 	if (iec_m_pg[2] & 0x4) {	/* TEST bit set */
1701 		arr[4] = THRESHOLD_EXCEEDED;
1702 		arr[5] = 0xff;
1703 	}
1704         return sizeof(ie_l_pg);
1705 }
1706 
1707 #define SDEBUG_MAX_LSENSE_SZ 512
1708 
1709 static int resp_log_sense(struct scsi_cmnd * scp,
1710                           struct sdebug_dev_info * devip)
1711 {
1712 	int ppc, sp, pcontrol, pcode, subpcode, alloc_len, errsts, len, n;
1713 	unsigned char arr[SDEBUG_MAX_LSENSE_SZ];
1714 	unsigned char *cmd = (unsigned char *)scp->cmnd;
1715 
1716 	if ((errsts = check_readiness(scp, 1, devip)))
1717 		return errsts;
1718 	memset(arr, 0, sizeof(arr));
1719 	ppc = cmd[1] & 0x2;
1720 	sp = cmd[1] & 0x1;
1721 	if (ppc || sp) {
1722 		mk_sense_buffer(devip, ILLEGAL_REQUEST,
1723 				INVALID_FIELD_IN_CDB, 0);
1724 		return check_condition_result;
1725 	}
1726 	pcontrol = (cmd[2] & 0xc0) >> 6;
1727 	pcode = cmd[2] & 0x3f;
1728 	subpcode = cmd[3] & 0xff;
1729 	alloc_len = (cmd[7] << 8) + cmd[8];
1730 	arr[0] = pcode;
1731 	if (0 == subpcode) {
1732 		switch (pcode) {
1733 		case 0x0:	/* Supported log pages log page */
1734 			n = 4;
1735 			arr[n++] = 0x0;		/* this page */
1736 			arr[n++] = 0xd;		/* Temperature */
1737 			arr[n++] = 0x2f;	/* Informational exceptions */
1738 			arr[3] = n - 4;
1739 			break;
1740 		case 0xd:	/* Temperature log page */
1741 			arr[3] = resp_temp_l_pg(arr + 4);
1742 			break;
1743 		case 0x2f:	/* Informational exceptions log page */
1744 			arr[3] = resp_ie_l_pg(arr + 4);
1745 			break;
1746 		default:
1747 			mk_sense_buffer(devip, ILLEGAL_REQUEST,
1748 					INVALID_FIELD_IN_CDB, 0);
1749 			return check_condition_result;
1750 		}
1751 	} else if (0xff == subpcode) {
1752 		arr[0] |= 0x40;
1753 		arr[1] = subpcode;
1754 		switch (pcode) {
1755 		case 0x0:	/* Supported log pages and subpages log page */
1756 			n = 4;
1757 			arr[n++] = 0x0;
1758 			arr[n++] = 0x0;		/* 0,0 page */
1759 			arr[n++] = 0x0;
1760 			arr[n++] = 0xff;	/* this page */
1761 			arr[n++] = 0xd;
1762 			arr[n++] = 0x0;		/* Temperature */
1763 			arr[n++] = 0x2f;
1764 			arr[n++] = 0x0;	/* Informational exceptions */
1765 			arr[3] = n - 4;
1766 			break;
1767 		case 0xd:	/* Temperature subpages */
1768 			n = 4;
1769 			arr[n++] = 0xd;
1770 			arr[n++] = 0x0;		/* Temperature */
1771 			arr[3] = n - 4;
1772 			break;
1773 		case 0x2f:	/* Informational exceptions subpages */
1774 			n = 4;
1775 			arr[n++] = 0x2f;
1776 			arr[n++] = 0x0;		/* Informational exceptions */
1777 			arr[3] = n - 4;
1778 			break;
1779 		default:
1780 			mk_sense_buffer(devip, ILLEGAL_REQUEST,
1781 					INVALID_FIELD_IN_CDB, 0);
1782 			return check_condition_result;
1783 		}
1784 	} else {
1785 		mk_sense_buffer(devip, ILLEGAL_REQUEST,
1786 				INVALID_FIELD_IN_CDB, 0);
1787 		return check_condition_result;
1788 	}
1789 	len = min(((arr[2] << 8) + arr[3]) + 4, alloc_len);
1790 	return fill_from_dev_buffer(scp, arr,
1791 		    min(len, SDEBUG_MAX_INQ_ARR_SZ));
1792 }
1793 
1794 static int resp_read(struct scsi_cmnd * SCpnt, unsigned long long lba,
1795 		     unsigned int num, struct sdebug_dev_info * devip)
1796 {
1797 	unsigned long iflags;
1798 	unsigned int block, from_bottom;
1799 	unsigned long long u;
1800 	int ret;
1801 
1802 	if (lba + num > sdebug_capacity) {
1803 		mk_sense_buffer(devip, ILLEGAL_REQUEST, ADDR_OUT_OF_RANGE,
1804 				0);
1805 		return check_condition_result;
1806 	}
1807 	/* transfer length excessive (tie in to block limits VPD page) */
1808 	if (num > sdebug_store_sectors) {
1809 		mk_sense_buffer(devip, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB,
1810 				0);
1811 		return check_condition_result;
1812 	}
1813 	if ((SCSI_DEBUG_OPT_MEDIUM_ERR & scsi_debug_opts) &&
1814 	    (lba <= OPT_MEDIUM_ERR_ADDR) &&
1815 	    ((lba + num) > OPT_MEDIUM_ERR_ADDR)) {
1816 		/* claim unrecoverable read error */
1817 		mk_sense_buffer(devip, MEDIUM_ERROR, UNRECOVERED_READ_ERR,
1818 				0);
1819 		/* set info field and valid bit for fixed descriptor */
1820 		if (0x70 == (devip->sense_buff[0] & 0x7f)) {
1821 			devip->sense_buff[0] |= 0x80;	/* Valid bit */
1822 			ret = OPT_MEDIUM_ERR_ADDR;
1823 			devip->sense_buff[3] = (ret >> 24) & 0xff;
1824 			devip->sense_buff[4] = (ret >> 16) & 0xff;
1825 			devip->sense_buff[5] = (ret >> 8) & 0xff;
1826 			devip->sense_buff[6] = ret & 0xff;
1827 		}
1828 		return check_condition_result;
1829 	}
1830 	read_lock_irqsave(&atomic_rw, iflags);
1831 	if ((lba + num) <= sdebug_store_sectors)
1832 		ret = fill_from_dev_buffer(SCpnt,
1833 					   fake_storep + (lba * SECT_SIZE),
1834 			   		   num * SECT_SIZE);
1835 	else {
1836 		/* modulo when one arg is 64 bits needs do_div() */
1837 		u = lba;
1838 		block = do_div(u, sdebug_store_sectors);
1839 		from_bottom = 0;
1840 		if ((block + num) > sdebug_store_sectors)
1841 			from_bottom = (block + num) - sdebug_store_sectors;
1842 		ret = fill_from_dev_buffer(SCpnt,
1843 					   fake_storep + (block * SECT_SIZE),
1844 			   		   (num - from_bottom) * SECT_SIZE);
1845 		if ((0 == ret) && (from_bottom > 0))
1846 			ret = fill_from_dev_buffer(SCpnt, fake_storep,
1847 						   from_bottom * SECT_SIZE);
1848 	}
1849 	read_unlock_irqrestore(&atomic_rw, iflags);
1850 	return ret;
1851 }
1852 
1853 static int resp_write(struct scsi_cmnd * SCpnt, unsigned long long lba,
1854 		      unsigned int num, struct sdebug_dev_info * devip)
1855 {
1856 	unsigned long iflags;
1857 	unsigned int block, to_bottom;
1858 	unsigned long long u;
1859 	int res;
1860 
1861 	if (lba + num > sdebug_capacity) {
1862 		mk_sense_buffer(devip, ILLEGAL_REQUEST, ADDR_OUT_OF_RANGE,
1863 			       	0);
1864 		return check_condition_result;
1865 	}
1866 	/* transfer length excessive (tie in to block limits VPD page) */
1867 	if (num > sdebug_store_sectors) {
1868 		mk_sense_buffer(devip, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB,
1869 				0);
1870 		return check_condition_result;
1871 	}
1872 
1873 	write_lock_irqsave(&atomic_rw, iflags);
1874 	if ((lba + num) <= sdebug_store_sectors)
1875 		res = fetch_to_dev_buffer(SCpnt,
1876 					  fake_storep + (lba * SECT_SIZE),
1877 			   		  num * SECT_SIZE);
1878 	else {
1879 		/* modulo when one arg is 64 bits needs do_div() */
1880 		u = lba;
1881 		block = do_div(u, sdebug_store_sectors);
1882 		to_bottom = 0;
1883 		if ((block + num) > sdebug_store_sectors)
1884 			to_bottom = (block + num) - sdebug_store_sectors;
1885 		res = fetch_to_dev_buffer(SCpnt,
1886 					  fake_storep + (block * SECT_SIZE),
1887 			   		  (num - to_bottom) * SECT_SIZE);
1888 		if ((0 == res) && (to_bottom > 0))
1889 			res = fetch_to_dev_buffer(SCpnt, fake_storep,
1890 						  to_bottom * SECT_SIZE);
1891 	}
1892 	write_unlock_irqrestore(&atomic_rw, iflags);
1893 	if (-1 == res)
1894 		return (DID_ERROR << 16);
1895 	else if ((res < (num * SECT_SIZE)) &&
1896 		 (SCSI_DEBUG_OPT_NOISE & scsi_debug_opts))
1897 		printk(KERN_INFO "scsi_debug: write: cdb indicated=%u, "
1898 		       " IO sent=%d bytes\n", num * SECT_SIZE, res);
1899 	return 0;
1900 }
1901 
1902 #define SDEBUG_RLUN_ARR_SZ 256
1903 
1904 static int resp_report_luns(struct scsi_cmnd * scp,
1905 			    struct sdebug_dev_info * devip)
1906 {
1907 	unsigned int alloc_len;
1908 	int lun_cnt, i, upper, num, n, wlun, lun;
1909 	unsigned char *cmd = (unsigned char *)scp->cmnd;
1910 	int select_report = (int)cmd[2];
1911 	struct scsi_lun *one_lun;
1912 	unsigned char arr[SDEBUG_RLUN_ARR_SZ];
1913 	unsigned char * max_addr;
1914 
1915 	alloc_len = cmd[9] + (cmd[8] << 8) + (cmd[7] << 16) + (cmd[6] << 24);
1916 	if ((alloc_len < 4) || (select_report > 2)) {
1917 		mk_sense_buffer(devip, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB,
1918 			       	0);
1919 		return check_condition_result;
1920 	}
1921 	/* can produce response with up to 16k luns (lun 0 to lun 16383) */
1922 	memset(arr, 0, SDEBUG_RLUN_ARR_SZ);
1923 	lun_cnt = scsi_debug_max_luns;
1924 	if (1 == select_report)
1925 		lun_cnt = 0;
1926 	else if (scsi_debug_no_lun_0 && (lun_cnt > 0))
1927 		--lun_cnt;
1928 	wlun = (select_report > 0) ? 1 : 0;
1929 	num = lun_cnt + wlun;
1930 	arr[2] = ((sizeof(struct scsi_lun) * num) >> 8) & 0xff;
1931 	arr[3] = (sizeof(struct scsi_lun) * num) & 0xff;
1932 	n = min((int)((SDEBUG_RLUN_ARR_SZ - 8) /
1933 			    sizeof(struct scsi_lun)), num);
1934 	if (n < num) {
1935 		wlun = 0;
1936 		lun_cnt = n;
1937 	}
1938 	one_lun = (struct scsi_lun *) &arr[8];
1939 	max_addr = arr + SDEBUG_RLUN_ARR_SZ;
1940 	for (i = 0, lun = (scsi_debug_no_lun_0 ? 1 : 0);
1941              ((i < lun_cnt) && ((unsigned char *)(one_lun + i) < max_addr));
1942 	     i++, lun++) {
1943 		upper = (lun >> 8) & 0x3f;
1944 		if (upper)
1945 			one_lun[i].scsi_lun[0] =
1946 			    (upper | (SAM2_LUN_ADDRESS_METHOD << 6));
1947 		one_lun[i].scsi_lun[1] = lun & 0xff;
1948 	}
1949 	if (wlun) {
1950 		one_lun[i].scsi_lun[0] = (SAM2_WLUN_REPORT_LUNS >> 8) & 0xff;
1951 		one_lun[i].scsi_lun[1] = SAM2_WLUN_REPORT_LUNS & 0xff;
1952 		i++;
1953 	}
1954 	alloc_len = (unsigned char *)(one_lun + i) - arr;
1955 	return fill_from_dev_buffer(scp, arr,
1956 				    min((int)alloc_len, SDEBUG_RLUN_ARR_SZ));
1957 }
1958 
1959 /* When timer goes off this function is called. */
1960 static void timer_intr_handler(unsigned long indx)
1961 {
1962 	struct sdebug_queued_cmd * sqcp;
1963 	unsigned long iflags;
1964 
1965 	if (indx >= SCSI_DEBUG_CANQUEUE) {
1966 		printk(KERN_ERR "scsi_debug:timer_intr_handler: indx too "
1967 		       "large\n");
1968 		return;
1969 	}
1970 	spin_lock_irqsave(&queued_arr_lock, iflags);
1971 	sqcp = &queued_arr[(int)indx];
1972 	if (! sqcp->in_use) {
1973 		printk(KERN_ERR "scsi_debug:timer_intr_handler: Unexpected "
1974 		       "interrupt\n");
1975 		spin_unlock_irqrestore(&queued_arr_lock, iflags);
1976 		return;
1977 	}
1978 	sqcp->in_use = 0;
1979 	if (sqcp->done_funct) {
1980 		sqcp->a_cmnd->result = sqcp->scsi_result;
1981 		sqcp->done_funct(sqcp->a_cmnd); /* callback to mid level */
1982 	}
1983 	sqcp->done_funct = NULL;
1984 	spin_unlock_irqrestore(&queued_arr_lock, iflags);
1985 }
1986 
1987 static int scsi_debug_slave_alloc(struct scsi_device * sdp)
1988 {
1989 	if (SCSI_DEBUG_OPT_NOISE & scsi_debug_opts)
1990 		printk(KERN_INFO "scsi_debug: slave_alloc <%u %u %u %u>\n",
1991 		       sdp->host->host_no, sdp->channel, sdp->id, sdp->lun);
1992 	return 0;
1993 }
1994 
1995 static int scsi_debug_slave_configure(struct scsi_device * sdp)
1996 {
1997 	struct sdebug_dev_info * devip;
1998 
1999 	if (SCSI_DEBUG_OPT_NOISE & scsi_debug_opts)
2000 		printk(KERN_INFO "scsi_debug: slave_configure <%u %u %u %u>\n",
2001 		       sdp->host->host_no, sdp->channel, sdp->id, sdp->lun);
2002 	if (sdp->host->max_cmd_len != SCSI_DEBUG_MAX_CMD_LEN)
2003 		sdp->host->max_cmd_len = SCSI_DEBUG_MAX_CMD_LEN;
2004 	devip = devInfoReg(sdp);
2005 	if (NULL == devip)
2006 		return 1;	/* no resources, will be marked offline */
2007 	sdp->hostdata = devip;
2008 	if (sdp->host->cmd_per_lun)
2009 		scsi_adjust_queue_depth(sdp, SDEBUG_TAGGED_QUEUING,
2010 					sdp->host->cmd_per_lun);
2011 	blk_queue_max_segment_size(sdp->request_queue, 256 * 1024);
2012 	return 0;
2013 }
2014 
2015 static void scsi_debug_slave_destroy(struct scsi_device * sdp)
2016 {
2017 	struct sdebug_dev_info * devip =
2018 				(struct sdebug_dev_info *)sdp->hostdata;
2019 
2020 	if (SCSI_DEBUG_OPT_NOISE & scsi_debug_opts)
2021 		printk(KERN_INFO "scsi_debug: slave_destroy <%u %u %u %u>\n",
2022 		       sdp->host->host_no, sdp->channel, sdp->id, sdp->lun);
2023 	if (devip) {
2024 		/* make this slot avaliable for re-use */
2025 		devip->used = 0;
2026 		sdp->hostdata = NULL;
2027 	}
2028 }
2029 
2030 static struct sdebug_dev_info * devInfoReg(struct scsi_device * sdev)
2031 {
2032 	struct sdebug_host_info * sdbg_host;
2033 	struct sdebug_dev_info * open_devip = NULL;
2034 	struct sdebug_dev_info * devip =
2035 			(struct sdebug_dev_info *)sdev->hostdata;
2036 
2037 	if (devip)
2038 		return devip;
2039 	sdbg_host = *(struct sdebug_host_info **) sdev->host->hostdata;
2040         if(! sdbg_host) {
2041                 printk(KERN_ERR "Host info NULL\n");
2042 		return NULL;
2043         }
2044 	list_for_each_entry(devip, &sdbg_host->dev_info_list, dev_list) {
2045 		if ((devip->used) && (devip->channel == sdev->channel) &&
2046                     (devip->target == sdev->id) &&
2047                     (devip->lun == sdev->lun))
2048                         return devip;
2049 		else {
2050 			if ((!devip->used) && (!open_devip))
2051 				open_devip = devip;
2052 		}
2053 	}
2054 	if (NULL == open_devip) { /* try and make a new one */
2055 		open_devip = kzalloc(sizeof(*open_devip),GFP_ATOMIC);
2056 		if (NULL == open_devip) {
2057 			printk(KERN_ERR "%s: out of memory at line %d\n",
2058 				__FUNCTION__, __LINE__);
2059 			return NULL;
2060 		}
2061 		open_devip->sdbg_host = sdbg_host;
2062 		list_add_tail(&open_devip->dev_list,
2063 		&sdbg_host->dev_info_list);
2064 	}
2065         if (open_devip) {
2066 		open_devip->channel = sdev->channel;
2067 		open_devip->target = sdev->id;
2068 		open_devip->lun = sdev->lun;
2069 		open_devip->sdbg_host = sdbg_host;
2070 		open_devip->reset = 1;
2071 		open_devip->used = 1;
2072 		memset(open_devip->sense_buff, 0, SDEBUG_SENSE_LEN);
2073 		if (scsi_debug_dsense)
2074 			open_devip->sense_buff[0] = 0x72;
2075 		else {
2076 			open_devip->sense_buff[0] = 0x70;
2077 			open_devip->sense_buff[7] = 0xa;
2078 		}
2079 		if (sdev->lun == SAM2_WLUN_REPORT_LUNS)
2080 			open_devip->wlun = SAM2_WLUN_REPORT_LUNS & 0xff;
2081 		return open_devip;
2082         }
2083         return NULL;
2084 }
2085 
2086 static void mk_sense_buffer(struct sdebug_dev_info * devip, int key,
2087 			    int asc, int asq)
2088 {
2089 	unsigned char * sbuff;
2090 
2091 	sbuff = devip->sense_buff;
2092 	memset(sbuff, 0, SDEBUG_SENSE_LEN);
2093 	if (scsi_debug_dsense) {
2094 		sbuff[0] = 0x72;  /* descriptor, current */
2095 		sbuff[1] = key;
2096 		sbuff[2] = asc;
2097 		sbuff[3] = asq;
2098 	} else {
2099 		sbuff[0] = 0x70;  /* fixed, current */
2100 		sbuff[2] = key;
2101 		sbuff[7] = 0xa;	  /* implies 18 byte sense buffer */
2102 		sbuff[12] = asc;
2103 		sbuff[13] = asq;
2104 	}
2105 	if (SCSI_DEBUG_OPT_NOISE & scsi_debug_opts)
2106 		printk(KERN_INFO "scsi_debug:    [sense_key,asc,ascq]: "
2107 		      "[0x%x,0x%x,0x%x]\n", key, asc, asq);
2108 }
2109 
2110 static int scsi_debug_abort(struct scsi_cmnd * SCpnt)
2111 {
2112 	if (SCSI_DEBUG_OPT_NOISE & scsi_debug_opts)
2113 		printk(KERN_INFO "scsi_debug: abort\n");
2114 	++num_aborts;
2115 	stop_queued_cmnd(SCpnt);
2116 	return SUCCESS;
2117 }
2118 
2119 static int scsi_debug_biosparam(struct scsi_device *sdev,
2120 		struct block_device * bdev, sector_t capacity, int *info)
2121 {
2122 	int res;
2123 	unsigned char *buf;
2124 
2125 	if (SCSI_DEBUG_OPT_NOISE & scsi_debug_opts)
2126 		printk(KERN_INFO "scsi_debug: biosparam\n");
2127 	buf = scsi_bios_ptable(bdev);
2128 	if (buf) {
2129 		res = scsi_partsize(buf, capacity,
2130 				    &info[2], &info[0], &info[1]);
2131 		kfree(buf);
2132 		if (! res)
2133 			return res;
2134 	}
2135 	info[0] = sdebug_heads;
2136 	info[1] = sdebug_sectors_per;
2137 	info[2] = sdebug_cylinders_per;
2138 	return 0;
2139 }
2140 
2141 static int scsi_debug_device_reset(struct scsi_cmnd * SCpnt)
2142 {
2143 	struct sdebug_dev_info * devip;
2144 
2145 	if (SCSI_DEBUG_OPT_NOISE & scsi_debug_opts)
2146 		printk(KERN_INFO "scsi_debug: device_reset\n");
2147 	++num_dev_resets;
2148 	if (SCpnt) {
2149 		devip = devInfoReg(SCpnt->device);
2150 		if (devip)
2151 			devip->reset = 1;
2152 	}
2153 	return SUCCESS;
2154 }
2155 
2156 static int scsi_debug_bus_reset(struct scsi_cmnd * SCpnt)
2157 {
2158 	struct sdebug_host_info *sdbg_host;
2159         struct sdebug_dev_info * dev_info;
2160         struct scsi_device * sdp;
2161         struct Scsi_Host * hp;
2162 
2163 	if (SCSI_DEBUG_OPT_NOISE & scsi_debug_opts)
2164 		printk(KERN_INFO "scsi_debug: bus_reset\n");
2165 	++num_bus_resets;
2166 	if (SCpnt && ((sdp = SCpnt->device)) && ((hp = sdp->host))) {
2167 		sdbg_host = *(struct sdebug_host_info **) hp->hostdata;
2168 		if (sdbg_host) {
2169 			list_for_each_entry(dev_info,
2170                                             &sdbg_host->dev_info_list,
2171                                             dev_list)
2172 				dev_info->reset = 1;
2173 		}
2174 	}
2175 	return SUCCESS;
2176 }
2177 
2178 static int scsi_debug_host_reset(struct scsi_cmnd * SCpnt)
2179 {
2180 	struct sdebug_host_info * sdbg_host;
2181         struct sdebug_dev_info * dev_info;
2182 
2183 	if (SCSI_DEBUG_OPT_NOISE & scsi_debug_opts)
2184 		printk(KERN_INFO "scsi_debug: host_reset\n");
2185 	++num_host_resets;
2186         spin_lock(&sdebug_host_list_lock);
2187         list_for_each_entry(sdbg_host, &sdebug_host_list, host_list) {
2188                 list_for_each_entry(dev_info, &sdbg_host->dev_info_list,
2189                                     dev_list)
2190                         dev_info->reset = 1;
2191         }
2192         spin_unlock(&sdebug_host_list_lock);
2193 	stop_all_queued();
2194 	return SUCCESS;
2195 }
2196 
2197 /* Returns 1 if found 'cmnd' and deleted its timer. else returns 0 */
2198 static int stop_queued_cmnd(struct scsi_cmnd * cmnd)
2199 {
2200 	unsigned long iflags;
2201 	int k;
2202 	struct sdebug_queued_cmd * sqcp;
2203 
2204 	spin_lock_irqsave(&queued_arr_lock, iflags);
2205 	for (k = 0; k < SCSI_DEBUG_CANQUEUE; ++k) {
2206 		sqcp = &queued_arr[k];
2207 		if (sqcp->in_use && (cmnd == sqcp->a_cmnd)) {
2208 			del_timer_sync(&sqcp->cmnd_timer);
2209 			sqcp->in_use = 0;
2210 			sqcp->a_cmnd = NULL;
2211 			break;
2212 		}
2213 	}
2214 	spin_unlock_irqrestore(&queued_arr_lock, iflags);
2215 	return (k < SCSI_DEBUG_CANQUEUE) ? 1 : 0;
2216 }
2217 
2218 /* Deletes (stops) timers of all queued commands */
2219 static void stop_all_queued(void)
2220 {
2221 	unsigned long iflags;
2222 	int k;
2223 	struct sdebug_queued_cmd * sqcp;
2224 
2225 	spin_lock_irqsave(&queued_arr_lock, iflags);
2226 	for (k = 0; k < SCSI_DEBUG_CANQUEUE; ++k) {
2227 		sqcp = &queued_arr[k];
2228 		if (sqcp->in_use && sqcp->a_cmnd) {
2229 			del_timer_sync(&sqcp->cmnd_timer);
2230 			sqcp->in_use = 0;
2231 			sqcp->a_cmnd = NULL;
2232 		}
2233 	}
2234 	spin_unlock_irqrestore(&queued_arr_lock, iflags);
2235 }
2236 
2237 /* Initializes timers in queued array */
2238 static void __init init_all_queued(void)
2239 {
2240 	unsigned long iflags;
2241 	int k;
2242 	struct sdebug_queued_cmd * sqcp;
2243 
2244 	spin_lock_irqsave(&queued_arr_lock, iflags);
2245 	for (k = 0; k < SCSI_DEBUG_CANQUEUE; ++k) {
2246 		sqcp = &queued_arr[k];
2247 		init_timer(&sqcp->cmnd_timer);
2248 		sqcp->in_use = 0;
2249 		sqcp->a_cmnd = NULL;
2250 	}
2251 	spin_unlock_irqrestore(&queued_arr_lock, iflags);
2252 }
2253 
2254 static void __init sdebug_build_parts(unsigned char * ramp)
2255 {
2256 	struct partition * pp;
2257 	int starts[SDEBUG_MAX_PARTS + 2];
2258 	int sectors_per_part, num_sectors, k;
2259 	int heads_by_sects, start_sec, end_sec;
2260 
2261 	/* assume partition table already zeroed */
2262 	if ((scsi_debug_num_parts < 1) || (sdebug_store_size < 1048576))
2263 		return;
2264 	if (scsi_debug_num_parts > SDEBUG_MAX_PARTS) {
2265 		scsi_debug_num_parts = SDEBUG_MAX_PARTS;
2266 		printk(KERN_WARNING "scsi_debug:build_parts: reducing "
2267 				    "partitions to %d\n", SDEBUG_MAX_PARTS);
2268 	}
2269 	num_sectors = (int)sdebug_store_sectors;
2270 	sectors_per_part = (num_sectors - sdebug_sectors_per)
2271 			   / scsi_debug_num_parts;
2272 	heads_by_sects = sdebug_heads * sdebug_sectors_per;
2273         starts[0] = sdebug_sectors_per;
2274 	for (k = 1; k < scsi_debug_num_parts; ++k)
2275 		starts[k] = ((k * sectors_per_part) / heads_by_sects)
2276 			    * heads_by_sects;
2277 	starts[scsi_debug_num_parts] = num_sectors;
2278 	starts[scsi_debug_num_parts + 1] = 0;
2279 
2280 	ramp[510] = 0x55;	/* magic partition markings */
2281 	ramp[511] = 0xAA;
2282 	pp = (struct partition *)(ramp + 0x1be);
2283 	for (k = 0; starts[k + 1]; ++k, ++pp) {
2284 		start_sec = starts[k];
2285 		end_sec = starts[k + 1] - 1;
2286 		pp->boot_ind = 0;
2287 
2288 		pp->cyl = start_sec / heads_by_sects;
2289 		pp->head = (start_sec - (pp->cyl * heads_by_sects))
2290 			   / sdebug_sectors_per;
2291 		pp->sector = (start_sec % sdebug_sectors_per) + 1;
2292 
2293 		pp->end_cyl = end_sec / heads_by_sects;
2294 		pp->end_head = (end_sec - (pp->end_cyl * heads_by_sects))
2295 			       / sdebug_sectors_per;
2296 		pp->end_sector = (end_sec % sdebug_sectors_per) + 1;
2297 
2298 		pp->start_sect = start_sec;
2299 		pp->nr_sects = end_sec - start_sec + 1;
2300 		pp->sys_ind = 0x83;	/* plain Linux partition */
2301 	}
2302 }
2303 
2304 static int schedule_resp(struct scsi_cmnd * cmnd,
2305 			 struct sdebug_dev_info * devip,
2306 			 done_funct_t done, int scsi_result, int delta_jiff)
2307 {
2308 	if ((SCSI_DEBUG_OPT_NOISE & scsi_debug_opts) && cmnd) {
2309 		if (scsi_result) {
2310 			struct scsi_device * sdp = cmnd->device;
2311 
2312 			printk(KERN_INFO "scsi_debug:    <%u %u %u %u> "
2313 			       "non-zero result=0x%x\n", sdp->host->host_no,
2314 			       sdp->channel, sdp->id, sdp->lun, scsi_result);
2315 		}
2316 	}
2317 	if (cmnd && devip) {
2318 		/* simulate autosense by this driver */
2319 		if (SAM_STAT_CHECK_CONDITION == (scsi_result & 0xff))
2320 			memcpy(cmnd->sense_buffer, devip->sense_buff,
2321 			       (SCSI_SENSE_BUFFERSIZE > SDEBUG_SENSE_LEN) ?
2322 			       SDEBUG_SENSE_LEN : SCSI_SENSE_BUFFERSIZE);
2323 	}
2324 	if (delta_jiff <= 0) {
2325 		if (cmnd)
2326 			cmnd->result = scsi_result;
2327 		if (done)
2328 			done(cmnd);
2329 		return 0;
2330 	} else {
2331 		unsigned long iflags;
2332 		int k;
2333 		struct sdebug_queued_cmd * sqcp = NULL;
2334 
2335 		spin_lock_irqsave(&queued_arr_lock, iflags);
2336 		for (k = 0; k < SCSI_DEBUG_CANQUEUE; ++k) {
2337 			sqcp = &queued_arr[k];
2338 			if (! sqcp->in_use)
2339 				break;
2340 		}
2341 		if (k >= SCSI_DEBUG_CANQUEUE) {
2342 			spin_unlock_irqrestore(&queued_arr_lock, iflags);
2343 			printk(KERN_WARNING "scsi_debug: can_queue exceeded\n");
2344 			return 1;	/* report busy to mid level */
2345 		}
2346 		sqcp->in_use = 1;
2347 		sqcp->a_cmnd = cmnd;
2348 		sqcp->scsi_result = scsi_result;
2349 		sqcp->done_funct = done;
2350 		sqcp->cmnd_timer.function = timer_intr_handler;
2351 		sqcp->cmnd_timer.data = k;
2352 		sqcp->cmnd_timer.expires = jiffies + delta_jiff;
2353 		add_timer(&sqcp->cmnd_timer);
2354 		spin_unlock_irqrestore(&queued_arr_lock, iflags);
2355 		if (cmnd)
2356 			cmnd->result = 0;
2357 		return 0;
2358 	}
2359 }
2360 
2361 /* Note: The following macros create attribute files in the
2362    /sys/module/scsi_debug/parameters directory. Unfortunately this
2363    driver is unaware of a change and cannot trigger auxiliary actions
2364    as it can when the corresponding attribute in the
2365    /sys/bus/pseudo/drivers/scsi_debug directory is changed.
2366  */
2367 module_param_named(add_host, scsi_debug_add_host, int, S_IRUGO | S_IWUSR);
2368 module_param_named(delay, scsi_debug_delay, int, S_IRUGO | S_IWUSR);
2369 module_param_named(dev_size_mb, scsi_debug_dev_size_mb, int, S_IRUGO);
2370 module_param_named(dsense, scsi_debug_dsense, int, S_IRUGO | S_IWUSR);
2371 module_param_named(every_nth, scsi_debug_every_nth, int, S_IRUGO | S_IWUSR);
2372 module_param_named(fake_rw, scsi_debug_fake_rw, int, S_IRUGO | S_IWUSR);
2373 module_param_named(max_luns, scsi_debug_max_luns, int, S_IRUGO | S_IWUSR);
2374 module_param_named(no_lun_0, scsi_debug_no_lun_0, int, S_IRUGO | S_IWUSR);
2375 module_param_named(num_parts, scsi_debug_num_parts, int, S_IRUGO);
2376 module_param_named(num_tgts, scsi_debug_num_tgts, int, S_IRUGO | S_IWUSR);
2377 module_param_named(opts, scsi_debug_opts, int, S_IRUGO | S_IWUSR);
2378 module_param_named(ptype, scsi_debug_ptype, int, S_IRUGO | S_IWUSR);
2379 module_param_named(scsi_level, scsi_debug_scsi_level, int, S_IRUGO);
2380 module_param_named(virtual_gb, scsi_debug_virtual_gb, int, S_IRUGO | S_IWUSR);
2381 module_param_named(vpd_use_hostno, scsi_debug_vpd_use_hostno, int,
2382 		   S_IRUGO | S_IWUSR);
2383 
2384 MODULE_AUTHOR("Eric Youngdale + Douglas Gilbert");
2385 MODULE_DESCRIPTION("SCSI debug adapter driver");
2386 MODULE_LICENSE("GPL");
2387 MODULE_VERSION(SCSI_DEBUG_VERSION);
2388 
2389 MODULE_PARM_DESC(add_host, "0..127 hosts allowed(def=1)");
2390 MODULE_PARM_DESC(delay, "# of jiffies to delay response(def=1)");
2391 MODULE_PARM_DESC(dev_size_mb, "size in MB of ram shared by devs(def=8)");
2392 MODULE_PARM_DESC(dsense, "use descriptor sense format(def=0 -> fixed)");
2393 MODULE_PARM_DESC(every_nth, "timeout every nth command(def=0)");
2394 MODULE_PARM_DESC(fake_rw, "fake reads/writes instead of copying (def=0)");
2395 MODULE_PARM_DESC(max_luns, "number of LUNs per target to simulate(def=1)");
2396 MODULE_PARM_DESC(no_lun_0, "no LU number 0 (def=0 -> have lun 0)");
2397 MODULE_PARM_DESC(num_parts, "number of partitions(def=0)");
2398 MODULE_PARM_DESC(num_tgts, "number of targets per host to simulate(def=1)");
2399 MODULE_PARM_DESC(opts, "1->noise, 2->medium_err, 4->timeout, 8->recovered_err... (def=0)");
2400 MODULE_PARM_DESC(ptype, "SCSI peripheral type(def=0[disk])");
2401 MODULE_PARM_DESC(scsi_level, "SCSI level to simulate(def=5[SPC-3])");
2402 MODULE_PARM_DESC(virtual_gb, "virtual gigabyte size (def=0 -> use dev_size_mb)");
2403 MODULE_PARM_DESC(vpd_use_hostno, "0 -> dev ids ignore hostno (def=1 -> unique dev ids)");
2404 
2405 
2406 static char sdebug_info[256];
2407 
2408 static const char * scsi_debug_info(struct Scsi_Host * shp)
2409 {
2410 	sprintf(sdebug_info, "scsi_debug, version %s [%s], "
2411 		"dev_size_mb=%d, opts=0x%x", SCSI_DEBUG_VERSION,
2412 		scsi_debug_version_date, scsi_debug_dev_size_mb,
2413 		scsi_debug_opts);
2414 	return sdebug_info;
2415 }
2416 
2417 /* scsi_debug_proc_info
2418  * Used if the driver currently has no own support for /proc/scsi
2419  */
2420 static int scsi_debug_proc_info(struct Scsi_Host *host, char *buffer, char **start, off_t offset,
2421 				int length, int inout)
2422 {
2423 	int len, pos, begin;
2424 	int orig_length;
2425 
2426 	orig_length = length;
2427 
2428 	if (inout == 1) {
2429 		char arr[16];
2430 		int minLen = length > 15 ? 15 : length;
2431 
2432 		if (!capable(CAP_SYS_ADMIN) || !capable(CAP_SYS_RAWIO))
2433 			return -EACCES;
2434 		memcpy(arr, buffer, minLen);
2435 		arr[minLen] = '\0';
2436 		if (1 != sscanf(arr, "%d", &pos))
2437 			return -EINVAL;
2438 		scsi_debug_opts = pos;
2439 		if (scsi_debug_every_nth != 0)
2440                         scsi_debug_cmnd_count = 0;
2441 		return length;
2442 	}
2443 	begin = 0;
2444 	pos = len = sprintf(buffer, "scsi_debug adapter driver, version "
2445 	    "%s [%s]\n"
2446 	    "num_tgts=%d, shared (ram) size=%d MB, opts=0x%x, "
2447 	    "every_nth=%d(curr:%d)\n"
2448 	    "delay=%d, max_luns=%d, scsi_level=%d\n"
2449 	    "sector_size=%d bytes, cylinders=%d, heads=%d, sectors=%d\n"
2450 	    "number of aborts=%d, device_reset=%d, bus_resets=%d, "
2451 	    "host_resets=%d\n",
2452 	    SCSI_DEBUG_VERSION, scsi_debug_version_date, scsi_debug_num_tgts,
2453 	    scsi_debug_dev_size_mb, scsi_debug_opts, scsi_debug_every_nth,
2454 	    scsi_debug_cmnd_count, scsi_debug_delay,
2455 	    scsi_debug_max_luns, scsi_debug_scsi_level,
2456 	    SECT_SIZE, sdebug_cylinders_per, sdebug_heads, sdebug_sectors_per,
2457 	    num_aborts, num_dev_resets, num_bus_resets, num_host_resets);
2458 	if (pos < offset) {
2459 		len = 0;
2460 		begin = pos;
2461 	}
2462 	*start = buffer + (offset - begin);	/* Start of wanted data */
2463 	len -= (offset - begin);
2464 	if (len > length)
2465 		len = length;
2466 	return len;
2467 }
2468 
2469 static ssize_t sdebug_delay_show(struct device_driver * ddp, char * buf)
2470 {
2471         return scnprintf(buf, PAGE_SIZE, "%d\n", scsi_debug_delay);
2472 }
2473 
2474 static ssize_t sdebug_delay_store(struct device_driver * ddp,
2475 				  const char * buf, size_t count)
2476 {
2477         int delay;
2478 	char work[20];
2479 
2480         if (1 == sscanf(buf, "%10s", work)) {
2481 		if ((1 == sscanf(work, "%d", &delay)) && (delay >= 0)) {
2482 			scsi_debug_delay = delay;
2483 			return count;
2484 		}
2485 	}
2486 	return -EINVAL;
2487 }
2488 DRIVER_ATTR(delay, S_IRUGO | S_IWUSR, sdebug_delay_show,
2489 	    sdebug_delay_store);
2490 
2491 static ssize_t sdebug_opts_show(struct device_driver * ddp, char * buf)
2492 {
2493         return scnprintf(buf, PAGE_SIZE, "0x%x\n", scsi_debug_opts);
2494 }
2495 
2496 static ssize_t sdebug_opts_store(struct device_driver * ddp,
2497 				 const char * buf, size_t count)
2498 {
2499         int opts;
2500 	char work[20];
2501 
2502         if (1 == sscanf(buf, "%10s", work)) {
2503 		if (0 == strnicmp(work,"0x", 2)) {
2504 			if (1 == sscanf(&work[2], "%x", &opts))
2505 				goto opts_done;
2506 		} else {
2507 			if (1 == sscanf(work, "%d", &opts))
2508 				goto opts_done;
2509 		}
2510 	}
2511 	return -EINVAL;
2512 opts_done:
2513 	scsi_debug_opts = opts;
2514 	scsi_debug_cmnd_count = 0;
2515 	return count;
2516 }
2517 DRIVER_ATTR(opts, S_IRUGO | S_IWUSR, sdebug_opts_show,
2518 	    sdebug_opts_store);
2519 
2520 static ssize_t sdebug_ptype_show(struct device_driver * ddp, char * buf)
2521 {
2522         return scnprintf(buf, PAGE_SIZE, "%d\n", scsi_debug_ptype);
2523 }
2524 static ssize_t sdebug_ptype_store(struct device_driver * ddp,
2525 				  const char * buf, size_t count)
2526 {
2527         int n;
2528 
2529 	if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
2530 		scsi_debug_ptype = n;
2531 		return count;
2532 	}
2533 	return -EINVAL;
2534 }
2535 DRIVER_ATTR(ptype, S_IRUGO | S_IWUSR, sdebug_ptype_show, sdebug_ptype_store);
2536 
2537 static ssize_t sdebug_dsense_show(struct device_driver * ddp, char * buf)
2538 {
2539         return scnprintf(buf, PAGE_SIZE, "%d\n", scsi_debug_dsense);
2540 }
2541 static ssize_t sdebug_dsense_store(struct device_driver * ddp,
2542 				  const char * buf, size_t count)
2543 {
2544         int n;
2545 
2546 	if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
2547 		scsi_debug_dsense = n;
2548 		return count;
2549 	}
2550 	return -EINVAL;
2551 }
2552 DRIVER_ATTR(dsense, S_IRUGO | S_IWUSR, sdebug_dsense_show,
2553 	    sdebug_dsense_store);
2554 
2555 static ssize_t sdebug_fake_rw_show(struct device_driver * ddp, char * buf)
2556 {
2557         return scnprintf(buf, PAGE_SIZE, "%d\n", scsi_debug_fake_rw);
2558 }
2559 static ssize_t sdebug_fake_rw_store(struct device_driver * ddp,
2560 				    const char * buf, size_t count)
2561 {
2562         int n;
2563 
2564 	if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
2565 		scsi_debug_fake_rw = n;
2566 		return count;
2567 	}
2568 	return -EINVAL;
2569 }
2570 DRIVER_ATTR(fake_rw, S_IRUGO | S_IWUSR, sdebug_fake_rw_show,
2571 	    sdebug_fake_rw_store);
2572 
2573 static ssize_t sdebug_no_lun_0_show(struct device_driver * ddp, char * buf)
2574 {
2575         return scnprintf(buf, PAGE_SIZE, "%d\n", scsi_debug_no_lun_0);
2576 }
2577 static ssize_t sdebug_no_lun_0_store(struct device_driver * ddp,
2578 				     const char * buf, size_t count)
2579 {
2580         int n;
2581 
2582 	if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
2583 		scsi_debug_no_lun_0 = n;
2584 		return count;
2585 	}
2586 	return -EINVAL;
2587 }
2588 DRIVER_ATTR(no_lun_0, S_IRUGO | S_IWUSR, sdebug_no_lun_0_show,
2589 	    sdebug_no_lun_0_store);
2590 
2591 static ssize_t sdebug_num_tgts_show(struct device_driver * ddp, char * buf)
2592 {
2593         return scnprintf(buf, PAGE_SIZE, "%d\n", scsi_debug_num_tgts);
2594 }
2595 static ssize_t sdebug_num_tgts_store(struct device_driver * ddp,
2596 				     const char * buf, size_t count)
2597 {
2598         int n;
2599 
2600 	if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
2601 		scsi_debug_num_tgts = n;
2602 		sdebug_max_tgts_luns();
2603 		return count;
2604 	}
2605 	return -EINVAL;
2606 }
2607 DRIVER_ATTR(num_tgts, S_IRUGO | S_IWUSR, sdebug_num_tgts_show,
2608 	    sdebug_num_tgts_store);
2609 
2610 static ssize_t sdebug_dev_size_mb_show(struct device_driver * ddp, char * buf)
2611 {
2612         return scnprintf(buf, PAGE_SIZE, "%d\n", scsi_debug_dev_size_mb);
2613 }
2614 DRIVER_ATTR(dev_size_mb, S_IRUGO, sdebug_dev_size_mb_show, NULL);
2615 
2616 static ssize_t sdebug_num_parts_show(struct device_driver * ddp, char * buf)
2617 {
2618         return scnprintf(buf, PAGE_SIZE, "%d\n", scsi_debug_num_parts);
2619 }
2620 DRIVER_ATTR(num_parts, S_IRUGO, sdebug_num_parts_show, NULL);
2621 
2622 static ssize_t sdebug_every_nth_show(struct device_driver * ddp, char * buf)
2623 {
2624         return scnprintf(buf, PAGE_SIZE, "%d\n", scsi_debug_every_nth);
2625 }
2626 static ssize_t sdebug_every_nth_store(struct device_driver * ddp,
2627 				      const char * buf, size_t count)
2628 {
2629         int nth;
2630 
2631 	if ((count > 0) && (1 == sscanf(buf, "%d", &nth))) {
2632 		scsi_debug_every_nth = nth;
2633 		scsi_debug_cmnd_count = 0;
2634 		return count;
2635 	}
2636 	return -EINVAL;
2637 }
2638 DRIVER_ATTR(every_nth, S_IRUGO | S_IWUSR, sdebug_every_nth_show,
2639 	    sdebug_every_nth_store);
2640 
2641 static ssize_t sdebug_max_luns_show(struct device_driver * ddp, char * buf)
2642 {
2643         return scnprintf(buf, PAGE_SIZE, "%d\n", scsi_debug_max_luns);
2644 }
2645 static ssize_t sdebug_max_luns_store(struct device_driver * ddp,
2646 				     const char * buf, size_t count)
2647 {
2648         int n;
2649 
2650 	if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
2651 		scsi_debug_max_luns = n;
2652 		sdebug_max_tgts_luns();
2653 		return count;
2654 	}
2655 	return -EINVAL;
2656 }
2657 DRIVER_ATTR(max_luns, S_IRUGO | S_IWUSR, sdebug_max_luns_show,
2658 	    sdebug_max_luns_store);
2659 
2660 static ssize_t sdebug_scsi_level_show(struct device_driver * ddp, char * buf)
2661 {
2662         return scnprintf(buf, PAGE_SIZE, "%d\n", scsi_debug_scsi_level);
2663 }
2664 DRIVER_ATTR(scsi_level, S_IRUGO, sdebug_scsi_level_show, NULL);
2665 
2666 static ssize_t sdebug_virtual_gb_show(struct device_driver * ddp, char * buf)
2667 {
2668         return scnprintf(buf, PAGE_SIZE, "%d\n", scsi_debug_virtual_gb);
2669 }
2670 static ssize_t sdebug_virtual_gb_store(struct device_driver * ddp,
2671 				       const char * buf, size_t count)
2672 {
2673         int n;
2674 
2675 	if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
2676 		scsi_debug_virtual_gb = n;
2677 		if (scsi_debug_virtual_gb > 0) {
2678 			sdebug_capacity = 2048 * 1024;
2679 			sdebug_capacity *= scsi_debug_virtual_gb;
2680 		} else
2681 			sdebug_capacity = sdebug_store_sectors;
2682 		return count;
2683 	}
2684 	return -EINVAL;
2685 }
2686 DRIVER_ATTR(virtual_gb, S_IRUGO | S_IWUSR, sdebug_virtual_gb_show,
2687 	    sdebug_virtual_gb_store);
2688 
2689 static ssize_t sdebug_add_host_show(struct device_driver * ddp, char * buf)
2690 {
2691         return scnprintf(buf, PAGE_SIZE, "%d\n", scsi_debug_add_host);
2692 }
2693 
2694 static ssize_t sdebug_add_host_store(struct device_driver * ddp,
2695 				     const char * buf, size_t count)
2696 {
2697         int delta_hosts;
2698 	char work[20];
2699 
2700         if (1 != sscanf(buf, "%10s", work))
2701 		return -EINVAL;
2702 	{	/* temporary hack around sscanf() problem with -ve nums */
2703 		int neg = 0;
2704 
2705 		if ('-' == *work)
2706 			neg = 1;
2707 		if (1 != sscanf(work + neg, "%d", &delta_hosts))
2708 			return -EINVAL;
2709 		if (neg)
2710 			delta_hosts = -delta_hosts;
2711 	}
2712 	if (delta_hosts > 0) {
2713 		do {
2714 			sdebug_add_adapter();
2715 		} while (--delta_hosts);
2716 	} else if (delta_hosts < 0) {
2717 		do {
2718 			sdebug_remove_adapter();
2719 		} while (++delta_hosts);
2720 	}
2721 	return count;
2722 }
2723 DRIVER_ATTR(add_host, S_IRUGO | S_IWUSR, sdebug_add_host_show,
2724 	    sdebug_add_host_store);
2725 
2726 static ssize_t sdebug_vpd_use_hostno_show(struct device_driver * ddp,
2727 					  char * buf)
2728 {
2729 	return scnprintf(buf, PAGE_SIZE, "%d\n", scsi_debug_vpd_use_hostno);
2730 }
2731 static ssize_t sdebug_vpd_use_hostno_store(struct device_driver * ddp,
2732 					   const char * buf, size_t count)
2733 {
2734 	int n;
2735 
2736 	if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
2737 		scsi_debug_vpd_use_hostno = n;
2738 		return count;
2739 	}
2740 	return -EINVAL;
2741 }
2742 DRIVER_ATTR(vpd_use_hostno, S_IRUGO | S_IWUSR, sdebug_vpd_use_hostno_show,
2743 	    sdebug_vpd_use_hostno_store);
2744 
2745 /* Note: The following function creates attribute files in the
2746    /sys/bus/pseudo/drivers/scsi_debug directory. The advantage of these
2747    files (over those found in the /sys/module/scsi_debug/parameters
2748    directory) is that auxiliary actions can be triggered when an attribute
2749    is changed. For example see: sdebug_add_host_store() above.
2750  */
2751 static int do_create_driverfs_files(void)
2752 {
2753 	int ret;
2754 
2755 	ret = driver_create_file(&sdebug_driverfs_driver, &driver_attr_add_host);
2756 	ret |= driver_create_file(&sdebug_driverfs_driver, &driver_attr_delay);
2757 	ret |= driver_create_file(&sdebug_driverfs_driver, &driver_attr_dev_size_mb);
2758 	ret |= driver_create_file(&sdebug_driverfs_driver, &driver_attr_dsense);
2759 	ret |= driver_create_file(&sdebug_driverfs_driver, &driver_attr_every_nth);
2760 	ret |= driver_create_file(&sdebug_driverfs_driver, &driver_attr_fake_rw);
2761 	ret |= driver_create_file(&sdebug_driverfs_driver, &driver_attr_max_luns);
2762 	ret |= driver_create_file(&sdebug_driverfs_driver, &driver_attr_no_lun_0);
2763 	ret |= driver_create_file(&sdebug_driverfs_driver, &driver_attr_num_parts);
2764 	ret |= driver_create_file(&sdebug_driverfs_driver, &driver_attr_num_tgts);
2765 	ret |= driver_create_file(&sdebug_driverfs_driver, &driver_attr_ptype);
2766 	ret |= driver_create_file(&sdebug_driverfs_driver, &driver_attr_opts);
2767 	ret |= driver_create_file(&sdebug_driverfs_driver, &driver_attr_scsi_level);
2768 	ret |= driver_create_file(&sdebug_driverfs_driver, &driver_attr_virtual_gb);
2769 	ret |= driver_create_file(&sdebug_driverfs_driver, &driver_attr_vpd_use_hostno);
2770 	return ret;
2771 }
2772 
2773 static void do_remove_driverfs_files(void)
2774 {
2775 	driver_remove_file(&sdebug_driverfs_driver, &driver_attr_vpd_use_hostno);
2776 	driver_remove_file(&sdebug_driverfs_driver, &driver_attr_virtual_gb);
2777 	driver_remove_file(&sdebug_driverfs_driver, &driver_attr_scsi_level);
2778 	driver_remove_file(&sdebug_driverfs_driver, &driver_attr_opts);
2779 	driver_remove_file(&sdebug_driverfs_driver, &driver_attr_ptype);
2780 	driver_remove_file(&sdebug_driverfs_driver, &driver_attr_num_tgts);
2781 	driver_remove_file(&sdebug_driverfs_driver, &driver_attr_num_parts);
2782 	driver_remove_file(&sdebug_driverfs_driver, &driver_attr_no_lun_0);
2783 	driver_remove_file(&sdebug_driverfs_driver, &driver_attr_max_luns);
2784 	driver_remove_file(&sdebug_driverfs_driver, &driver_attr_fake_rw);
2785 	driver_remove_file(&sdebug_driverfs_driver, &driver_attr_every_nth);
2786 	driver_remove_file(&sdebug_driverfs_driver, &driver_attr_dsense);
2787 	driver_remove_file(&sdebug_driverfs_driver, &driver_attr_dev_size_mb);
2788 	driver_remove_file(&sdebug_driverfs_driver, &driver_attr_delay);
2789 	driver_remove_file(&sdebug_driverfs_driver, &driver_attr_add_host);
2790 }
2791 
2792 static int __init scsi_debug_init(void)
2793 {
2794 	unsigned int sz;
2795 	int host_to_add;
2796 	int k;
2797 	int ret;
2798 
2799 	if (scsi_debug_dev_size_mb < 1)
2800 		scsi_debug_dev_size_mb = 1;  /* force minimum 1 MB ramdisk */
2801 	sdebug_store_size = (unsigned int)scsi_debug_dev_size_mb * 1048576;
2802 	sdebug_store_sectors = sdebug_store_size / SECT_SIZE;
2803 	if (scsi_debug_virtual_gb > 0) {
2804 		sdebug_capacity = 2048 * 1024;
2805 		sdebug_capacity *= scsi_debug_virtual_gb;
2806 	} else
2807 		sdebug_capacity = sdebug_store_sectors;
2808 
2809 	/* play around with geometry, don't waste too much on track 0 */
2810 	sdebug_heads = 8;
2811 	sdebug_sectors_per = 32;
2812 	if (scsi_debug_dev_size_mb >= 16)
2813 		sdebug_heads = 32;
2814 	else if (scsi_debug_dev_size_mb >= 256)
2815 		sdebug_heads = 64;
2816 	sdebug_cylinders_per = (unsigned long)sdebug_capacity /
2817 			       (sdebug_sectors_per * sdebug_heads);
2818 	if (sdebug_cylinders_per >= 1024) {
2819 		/* other LLDs do this; implies >= 1GB ram disk ... */
2820 		sdebug_heads = 255;
2821 		sdebug_sectors_per = 63;
2822 		sdebug_cylinders_per = (unsigned long)sdebug_capacity /
2823 			       (sdebug_sectors_per * sdebug_heads);
2824 	}
2825 
2826 	sz = sdebug_store_size;
2827 	fake_storep = vmalloc(sz);
2828 	if (NULL == fake_storep) {
2829 		printk(KERN_ERR "scsi_debug_init: out of memory, 1\n");
2830 		return -ENOMEM;
2831 	}
2832 	memset(fake_storep, 0, sz);
2833 	if (scsi_debug_num_parts > 0)
2834 		sdebug_build_parts(fake_storep);
2835 
2836 	ret = device_register(&pseudo_primary);
2837 	if (ret < 0) {
2838 		printk(KERN_WARNING "scsi_debug: device_register error: %d\n",
2839 			ret);
2840 		goto free_vm;
2841 	}
2842 	ret = bus_register(&pseudo_lld_bus);
2843 	if (ret < 0) {
2844 		printk(KERN_WARNING "scsi_debug: bus_register error: %d\n",
2845 			ret);
2846 		goto dev_unreg;
2847 	}
2848 	ret = driver_register(&sdebug_driverfs_driver);
2849 	if (ret < 0) {
2850 		printk(KERN_WARNING "scsi_debug: driver_register error: %d\n",
2851 			ret);
2852 		goto bus_unreg;
2853 	}
2854 	ret = do_create_driverfs_files();
2855 	if (ret < 0) {
2856 		printk(KERN_WARNING "scsi_debug: driver_create_file error: %d\n",
2857 			ret);
2858 		goto del_files;
2859 	}
2860 
2861 	init_all_queued();
2862 
2863 	sdebug_driver_template.proc_name = sdebug_proc_name;
2864 
2865 	host_to_add = scsi_debug_add_host;
2866         scsi_debug_add_host = 0;
2867 
2868         for (k = 0; k < host_to_add; k++) {
2869                 if (sdebug_add_adapter()) {
2870                         printk(KERN_ERR "scsi_debug_init: "
2871                                "sdebug_add_adapter failed k=%d\n", k);
2872                         break;
2873                 }
2874         }
2875 
2876 	if (SCSI_DEBUG_OPT_NOISE & scsi_debug_opts) {
2877 		printk(KERN_INFO "scsi_debug_init: built %d host(s)\n",
2878 		       scsi_debug_add_host);
2879 	}
2880 	return 0;
2881 
2882 del_files:
2883 	do_remove_driverfs_files();
2884 	driver_unregister(&sdebug_driverfs_driver);
2885 bus_unreg:
2886 	bus_unregister(&pseudo_lld_bus);
2887 dev_unreg:
2888 	device_unregister(&pseudo_primary);
2889 free_vm:
2890 	vfree(fake_storep);
2891 
2892 	return ret;
2893 }
2894 
2895 static void __exit scsi_debug_exit(void)
2896 {
2897 	int k = scsi_debug_add_host;
2898 
2899 	stop_all_queued();
2900 	for (; k; k--)
2901 		sdebug_remove_adapter();
2902 	do_remove_driverfs_files();
2903 	driver_unregister(&sdebug_driverfs_driver);
2904 	bus_unregister(&pseudo_lld_bus);
2905 	device_unregister(&pseudo_primary);
2906 
2907 	vfree(fake_storep);
2908 }
2909 
2910 device_initcall(scsi_debug_init);
2911 module_exit(scsi_debug_exit);
2912 
2913 static void pseudo_0_release(struct device * dev)
2914 {
2915 	if (SCSI_DEBUG_OPT_NOISE & scsi_debug_opts)
2916 		printk(KERN_INFO "scsi_debug: pseudo_0_release() called\n");
2917 }
2918 
2919 static struct device pseudo_primary = {
2920 	.bus_id		= "pseudo_0",
2921 	.release	= pseudo_0_release,
2922 };
2923 
2924 static int pseudo_lld_bus_match(struct device *dev,
2925                           struct device_driver *dev_driver)
2926 {
2927         return 1;
2928 }
2929 
2930 static struct bus_type pseudo_lld_bus = {
2931         .name = "pseudo",
2932         .match = pseudo_lld_bus_match,
2933 	.probe = sdebug_driver_probe,
2934 	.remove = sdebug_driver_remove,
2935 };
2936 
2937 static void sdebug_release_adapter(struct device * dev)
2938 {
2939         struct sdebug_host_info *sdbg_host;
2940 
2941 	sdbg_host = to_sdebug_host(dev);
2942         kfree(sdbg_host);
2943 }
2944 
2945 static int sdebug_add_adapter(void)
2946 {
2947 	int k, devs_per_host;
2948         int error = 0;
2949         struct sdebug_host_info *sdbg_host;
2950         struct sdebug_dev_info *sdbg_devinfo;
2951         struct list_head *lh, *lh_sf;
2952 
2953         sdbg_host = kzalloc(sizeof(*sdbg_host),GFP_KERNEL);
2954         if (NULL == sdbg_host) {
2955                 printk(KERN_ERR "%s: out of memory at line %d\n",
2956                        __FUNCTION__, __LINE__);
2957                 return -ENOMEM;
2958         }
2959 
2960         INIT_LIST_HEAD(&sdbg_host->dev_info_list);
2961 
2962 	devs_per_host = scsi_debug_num_tgts * scsi_debug_max_luns;
2963         for (k = 0; k < devs_per_host; k++) {
2964                 sdbg_devinfo = kzalloc(sizeof(*sdbg_devinfo),GFP_KERNEL);
2965                 if (NULL == sdbg_devinfo) {
2966                         printk(KERN_ERR "%s: out of memory at line %d\n",
2967                                __FUNCTION__, __LINE__);
2968                         error = -ENOMEM;
2969 			goto clean;
2970                 }
2971                 sdbg_devinfo->sdbg_host = sdbg_host;
2972                 list_add_tail(&sdbg_devinfo->dev_list,
2973                               &sdbg_host->dev_info_list);
2974         }
2975 
2976         spin_lock(&sdebug_host_list_lock);
2977         list_add_tail(&sdbg_host->host_list, &sdebug_host_list);
2978         spin_unlock(&sdebug_host_list_lock);
2979 
2980         sdbg_host->dev.bus = &pseudo_lld_bus;
2981         sdbg_host->dev.parent = &pseudo_primary;
2982         sdbg_host->dev.release = &sdebug_release_adapter;
2983         sprintf(sdbg_host->dev.bus_id, "adapter%d", scsi_debug_add_host);
2984 
2985         error = device_register(&sdbg_host->dev);
2986 
2987         if (error)
2988 		goto clean;
2989 
2990 	++scsi_debug_add_host;
2991         return error;
2992 
2993 clean:
2994 	list_for_each_safe(lh, lh_sf, &sdbg_host->dev_info_list) {
2995 		sdbg_devinfo = list_entry(lh, struct sdebug_dev_info,
2996 					  dev_list);
2997 		list_del(&sdbg_devinfo->dev_list);
2998 		kfree(sdbg_devinfo);
2999 	}
3000 
3001 	kfree(sdbg_host);
3002         return error;
3003 }
3004 
3005 static void sdebug_remove_adapter(void)
3006 {
3007         struct sdebug_host_info * sdbg_host = NULL;
3008 
3009         spin_lock(&sdebug_host_list_lock);
3010         if (!list_empty(&sdebug_host_list)) {
3011                 sdbg_host = list_entry(sdebug_host_list.prev,
3012                                        struct sdebug_host_info, host_list);
3013 		list_del(&sdbg_host->host_list);
3014 	}
3015         spin_unlock(&sdebug_host_list_lock);
3016 
3017 	if (!sdbg_host)
3018 		return;
3019 
3020         device_unregister(&sdbg_host->dev);
3021         --scsi_debug_add_host;
3022 }
3023 
3024 static int sdebug_driver_probe(struct device * dev)
3025 {
3026         int error = 0;
3027         struct sdebug_host_info *sdbg_host;
3028         struct Scsi_Host *hpnt;
3029 
3030 	sdbg_host = to_sdebug_host(dev);
3031 
3032         hpnt = scsi_host_alloc(&sdebug_driver_template, sizeof(sdbg_host));
3033         if (NULL == hpnt) {
3034                 printk(KERN_ERR "%s: scsi_register failed\n", __FUNCTION__);
3035                 error = -ENODEV;
3036 		return error;
3037         }
3038 
3039         sdbg_host->shost = hpnt;
3040 	*((struct sdebug_host_info **)hpnt->hostdata) = sdbg_host;
3041 	if ((hpnt->this_id >= 0) && (scsi_debug_num_tgts > hpnt->this_id))
3042 		hpnt->max_id = scsi_debug_num_tgts + 1;
3043 	else
3044 		hpnt->max_id = scsi_debug_num_tgts;
3045 	hpnt->max_lun = SAM2_WLUN_REPORT_LUNS;	/* = scsi_debug_max_luns; */
3046 
3047         error = scsi_add_host(hpnt, &sdbg_host->dev);
3048         if (error) {
3049                 printk(KERN_ERR "%s: scsi_add_host failed\n", __FUNCTION__);
3050                 error = -ENODEV;
3051 		scsi_host_put(hpnt);
3052         } else
3053 		scsi_scan_host(hpnt);
3054 
3055 
3056         return error;
3057 }
3058 
3059 static int sdebug_driver_remove(struct device * dev)
3060 {
3061         struct list_head *lh, *lh_sf;
3062         struct sdebug_host_info *sdbg_host;
3063         struct sdebug_dev_info *sdbg_devinfo;
3064 
3065 	sdbg_host = to_sdebug_host(dev);
3066 
3067 	if (!sdbg_host) {
3068 		printk(KERN_ERR "%s: Unable to locate host info\n",
3069 		       __FUNCTION__);
3070 		return -ENODEV;
3071 	}
3072 
3073         scsi_remove_host(sdbg_host->shost);
3074 
3075         list_for_each_safe(lh, lh_sf, &sdbg_host->dev_info_list) {
3076                 sdbg_devinfo = list_entry(lh, struct sdebug_dev_info,
3077                                           dev_list);
3078                 list_del(&sdbg_devinfo->dev_list);
3079                 kfree(sdbg_devinfo);
3080         }
3081 
3082         scsi_host_put(sdbg_host->shost);
3083         return 0;
3084 }
3085 
3086 static void sdebug_max_tgts_luns(void)
3087 {
3088 	struct sdebug_host_info * sdbg_host;
3089 	struct Scsi_Host *hpnt;
3090 
3091 	spin_lock(&sdebug_host_list_lock);
3092 	list_for_each_entry(sdbg_host, &sdebug_host_list, host_list) {
3093 		hpnt = sdbg_host->shost;
3094 		if ((hpnt->this_id >= 0) &&
3095 		    (scsi_debug_num_tgts > hpnt->this_id))
3096 			hpnt->max_id = scsi_debug_num_tgts + 1;
3097 		else
3098 			hpnt->max_id = scsi_debug_num_tgts;
3099 		hpnt->max_lun = SAM2_WLUN_REPORT_LUNS; /* scsi_debug_max_luns; */
3100 	}
3101 	spin_unlock(&sdebug_host_list_lock);
3102 }
3103