1/*
2 * vvvvvvvvvvvvvvvvvvvvvvv Original vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
3 *  Copyright (C) 1992  Eric Youngdale
4 *  Simulate a host adapter with 2 disks attached.  Do a lot of checking
5 *  to make sure that we are not getting blocks mixed up, and PANIC if
6 *  anything out of the ordinary is seen.
7 * ^^^^^^^^^^^^^^^^^^^^^^^ Original ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
8 *
9 *  This version is more generic, simulating a variable number of disk
10 *  (or disk like devices) sharing a common amount of RAM. To be more
11 *  realistic, the simulated devices have the transport attributes of
12 *  SAS disks.
13 *
14 *
15 *  For documentation see http://sg.danny.cz/sg/sdebug26.html
16 *
17 *   D. Gilbert (dpg) work for Magneto-Optical device test [20010421]
18 *   dpg: work for devfs large number of disks [20010809]
19 *        forked for lk 2.5 series [20011216, 20020101]
20 *        use vmalloc() more inquiry+mode_sense [20020302]
21 *        add timers for delayed responses [20020721]
22 *   Patrick Mansfield <patmans@us.ibm.com> max_luns+scsi_level [20021031]
23 *   Mike Anderson <andmike@us.ibm.com> sysfs work [20021118]
24 *   dpg: change style of boot options to "scsi_debug.num_tgts=2" and
25 *        module options to "modprobe scsi_debug num_tgts=2" [20021221]
26 */
27
28#include <linux/module.h>
29
30#include <linux/kernel.h>
31#include <linux/errno.h>
32#include <linux/timer.h>
33#include <linux/slab.h>
34#include <linux/types.h>
35#include <linux/string.h>
36#include <linux/genhd.h>
37#include <linux/fs.h>
38#include <linux/init.h>
39#include <linux/proc_fs.h>
40#include <linux/vmalloc.h>
41#include <linux/moduleparam.h>
42#include <linux/scatterlist.h>
43#include <linux/blkdev.h>
44#include <linux/crc-t10dif.h>
45#include <linux/spinlock.h>
46#include <linux/interrupt.h>
47#include <linux/atomic.h>
48#include <linux/hrtimer.h>
49
50#include <net/checksum.h>
51
52#include <asm/unaligned.h>
53
54#include <scsi/scsi.h>
55#include <scsi/scsi_cmnd.h>
56#include <scsi/scsi_device.h>
57#include <scsi/scsi_host.h>
58#include <scsi/scsicam.h>
59#include <scsi/scsi_eh.h>
60#include <scsi/scsi_tcq.h>
61#include <scsi/scsi_dbg.h>
62
63#include "sd.h"
64#include "scsi_logging.h"
65
66#define SCSI_DEBUG_VERSION "1.85"
67static const char *scsi_debug_version_date = "20141022";
68
69#define MY_NAME "scsi_debug"
70
71/* Additional Sense Code (ASC) */
72#define NO_ADDITIONAL_SENSE 0x0
73#define LOGICAL_UNIT_NOT_READY 0x4
74#define LOGICAL_UNIT_COMMUNICATION_FAILURE 0x8
75#define UNRECOVERED_READ_ERR 0x11
76#define PARAMETER_LIST_LENGTH_ERR 0x1a
77#define INVALID_OPCODE 0x20
78#define LBA_OUT_OF_RANGE 0x21
79#define INVALID_FIELD_IN_CDB 0x24
80#define INVALID_FIELD_IN_PARAM_LIST 0x26
81#define UA_RESET_ASC 0x29
82#define UA_CHANGED_ASC 0x2a
83#define TARGET_CHANGED_ASC 0x3f
84#define LUNS_CHANGED_ASCQ 0x0e
85#define INSUFF_RES_ASC 0x55
86#define INSUFF_RES_ASCQ 0x3
87#define POWER_ON_RESET_ASCQ 0x0
88#define BUS_RESET_ASCQ 0x2	/* scsi bus reset occurred */
89#define MODE_CHANGED_ASCQ 0x1	/* mode parameters changed */
90#define CAPACITY_CHANGED_ASCQ 0x9
91#define SAVING_PARAMS_UNSUP 0x39
92#define TRANSPORT_PROBLEM 0x4b
93#define THRESHOLD_EXCEEDED 0x5d
94#define LOW_POWER_COND_ON 0x5e
95#define MISCOMPARE_VERIFY_ASC 0x1d
96#define MICROCODE_CHANGED_ASCQ 0x1	/* with TARGET_CHANGED_ASC */
97#define MICROCODE_CHANGED_WO_RESET_ASCQ 0x16
98
99/* Additional Sense Code Qualifier (ASCQ) */
100#define ACK_NAK_TO 0x3
101
102
103/* Default values for driver parameters */
104#define DEF_NUM_HOST   1
105#define DEF_NUM_TGTS   1
106#define DEF_MAX_LUNS   1
107/* With these defaults, this driver will make 1 host with 1 target
108 * (id 0) containing 1 logical unit (lun 0). That is 1 device.
109 */
110#define DEF_ATO 1
111#define DEF_DELAY   1		/* if > 0 unit is a jiffy */
112#define DEF_DEV_SIZE_MB   8
113#define DEF_DIF 0
114#define DEF_DIX 0
115#define DEF_D_SENSE   0
116#define DEF_EVERY_NTH   0
117#define DEF_FAKE_RW	0
118#define DEF_GUARD 0
119#define DEF_HOST_LOCK 0
120#define DEF_LBPU 0
121#define DEF_LBPWS 0
122#define DEF_LBPWS10 0
123#define DEF_LBPRZ 1
124#define DEF_LOWEST_ALIGNED 0
125#define DEF_NDELAY   0		/* if > 0 unit is a nanosecond */
126#define DEF_NO_LUN_0   0
127#define DEF_NUM_PARTS   0
128#define DEF_OPTS   0
129#define DEF_OPT_BLKS 64
130#define DEF_PHYSBLK_EXP 0
131#define DEF_PTYPE   0
132#define DEF_REMOVABLE false
133#define DEF_SCSI_LEVEL   6    /* INQUIRY, byte2 [6->SPC-4] */
134#define DEF_SECTOR_SIZE 512
135#define DEF_UNMAP_ALIGNMENT 0
136#define DEF_UNMAP_GRANULARITY 1
137#define DEF_UNMAP_MAX_BLOCKS 0xFFFFFFFF
138#define DEF_UNMAP_MAX_DESC 256
139#define DEF_VIRTUAL_GB   0
140#define DEF_VPD_USE_HOSTNO 1
141#define DEF_WRITESAME_LENGTH 0xFFFF
142#define DEF_STRICT 0
143#define DELAY_OVERRIDDEN -9999
144
145/* bit mask values for scsi_debug_opts */
146#define SCSI_DEBUG_OPT_NOISE   1
147#define SCSI_DEBUG_OPT_MEDIUM_ERR   2
148#define SCSI_DEBUG_OPT_TIMEOUT   4
149#define SCSI_DEBUG_OPT_RECOVERED_ERR   8
150#define SCSI_DEBUG_OPT_TRANSPORT_ERR   16
151#define SCSI_DEBUG_OPT_DIF_ERR   32
152#define SCSI_DEBUG_OPT_DIX_ERR   64
153#define SCSI_DEBUG_OPT_MAC_TIMEOUT  128
154#define SCSI_DEBUG_OPT_SHORT_TRANSFER	0x100
155#define SCSI_DEBUG_OPT_Q_NOISE	0x200
156#define SCSI_DEBUG_OPT_ALL_TSF	0x400
157#define SCSI_DEBUG_OPT_RARE_TSF	0x800
158#define SCSI_DEBUG_OPT_N_WCE	0x1000
159#define SCSI_DEBUG_OPT_RESET_NOISE 0x2000
160#define SCSI_DEBUG_OPT_NO_CDB_NOISE 0x4000
161#define SCSI_DEBUG_OPT_ALL_NOISE (0x1 | 0x200 | 0x2000)
162/* When "every_nth" > 0 then modulo "every_nth" commands:
163 *   - a no response is simulated if SCSI_DEBUG_OPT_TIMEOUT is set
164 *   - a RECOVERED_ERROR is simulated on successful read and write
165 *     commands if SCSI_DEBUG_OPT_RECOVERED_ERR is set.
166 *   - a TRANSPORT_ERROR is simulated on successful read and write
167 *     commands if SCSI_DEBUG_OPT_TRANSPORT_ERR is set.
168 *
169 * When "every_nth" < 0 then after "- every_nth" commands:
170 *   - a no response is simulated if SCSI_DEBUG_OPT_TIMEOUT is set
171 *   - a RECOVERED_ERROR is simulated on successful read and write
172 *     commands if SCSI_DEBUG_OPT_RECOVERED_ERR is set.
173 *   - a TRANSPORT_ERROR is simulated on successful read and write
174 *     commands if SCSI_DEBUG_OPT_TRANSPORT_ERR is set.
175 * This will continue until some other action occurs (e.g. the user
176 * writing a new value (other than -1 or 1) to every_nth via sysfs).
177 */
178
179/* As indicated in SAM-5 and SPC-4 Unit Attentions (UAs)are returned in
180 * priority order. In the subset implemented here lower numbers have higher
181 * priority. The UA numbers should be a sequence starting from 0 with
182 * SDEBUG_NUM_UAS being 1 higher than the highest numbered UA. */
183#define SDEBUG_UA_POR 0		/* Power on, reset, or bus device reset */
184#define SDEBUG_UA_BUS_RESET 1
185#define SDEBUG_UA_MODE_CHANGED 2
186#define SDEBUG_UA_CAPACITY_CHANGED 3
187#define SDEBUG_UA_LUNS_CHANGED 4
188#define SDEBUG_UA_MICROCODE_CHANGED 5	/* simulate firmware change */
189#define SDEBUG_UA_MICROCODE_CHANGED_WO_RESET 6
190#define SDEBUG_NUM_UAS 7
191
192/* for check_readiness() */
193#define UAS_ONLY 1	/* check for UAs only */
194#define UAS_TUR 0	/* if no UAs then check if media access possible */
195
196/* when 1==SCSI_DEBUG_OPT_MEDIUM_ERR, a medium error is simulated at this
197 * sector on read commands: */
198#define OPT_MEDIUM_ERR_ADDR   0x1234 /* that's sector 4660 in decimal */
199#define OPT_MEDIUM_ERR_NUM    10     /* number of consecutive medium errs */
200
201/* If REPORT LUNS has luns >= 256 it can choose "flat space" (value 1)
202 * or "peripheral device" addressing (value 0) */
203#define SAM2_LUN_ADDRESS_METHOD 0
204#define SAM2_WLUN_REPORT_LUNS 0xc101
205
206/* SCSI_DEBUG_CANQUEUE is the maximum number of commands that can be queued
207 * (for response) at one time. Can be reduced by max_queue option. Command
208 * responses are not queued when delay=0 and ndelay=0. The per-device
209 * DEF_CMD_PER_LUN can be changed via sysfs:
210 * /sys/class/scsi_device/<h:c:t:l>/device/queue_depth but cannot exceed
211 * SCSI_DEBUG_CANQUEUE. */
212#define SCSI_DEBUG_CANQUEUE_WORDS  9	/* a WORD is bits in a long */
213#define SCSI_DEBUG_CANQUEUE  (SCSI_DEBUG_CANQUEUE_WORDS * BITS_PER_LONG)
214#define DEF_CMD_PER_LUN  255
215
216#if DEF_CMD_PER_LUN > SCSI_DEBUG_CANQUEUE
217#warning "Expect DEF_CMD_PER_LUN <= SCSI_DEBUG_CANQUEUE"
218#endif
219
220/* SCSI opcodes (first byte of cdb) mapped onto these indexes */
221enum sdeb_opcode_index {
222	SDEB_I_INVALID_OPCODE =	0,
223	SDEB_I_INQUIRY = 1,
224	SDEB_I_REPORT_LUNS = 2,
225	SDEB_I_REQUEST_SENSE = 3,
226	SDEB_I_TEST_UNIT_READY = 4,
227	SDEB_I_MODE_SENSE = 5,		/* 6, 10 */
228	SDEB_I_MODE_SELECT = 6,		/* 6, 10 */
229	SDEB_I_LOG_SENSE = 7,
230	SDEB_I_READ_CAPACITY = 8,	/* 10; 16 is in SA_IN(16) */
231	SDEB_I_READ = 9,		/* 6, 10, 12, 16 */
232	SDEB_I_WRITE = 10,		/* 6, 10, 12, 16 */
233	SDEB_I_START_STOP = 11,
234	SDEB_I_SERV_ACT_IN = 12,	/* 12, 16 */
235	SDEB_I_SERV_ACT_OUT = 13,	/* 12, 16 */
236	SDEB_I_MAINT_IN = 14,
237	SDEB_I_MAINT_OUT = 15,
238	SDEB_I_VERIFY = 16,		/* 10 only */
239	SDEB_I_VARIABLE_LEN = 17,
240	SDEB_I_RESERVE = 18,		/* 6, 10 */
241	SDEB_I_RELEASE = 19,		/* 6, 10 */
242	SDEB_I_ALLOW_REMOVAL = 20,	/* PREVENT ALLOW MEDIUM REMOVAL */
243	SDEB_I_REZERO_UNIT = 21,	/* REWIND in SSC */
244	SDEB_I_ATA_PT = 22,		/* 12, 16 */
245	SDEB_I_SEND_DIAG = 23,
246	SDEB_I_UNMAP = 24,
247	SDEB_I_XDWRITEREAD = 25,	/* 10 only */
248	SDEB_I_WRITE_BUFFER = 26,
249	SDEB_I_WRITE_SAME = 27,		/* 10, 16 */
250	SDEB_I_SYNC_CACHE = 28,		/* 10 only */
251	SDEB_I_COMP_WRITE = 29,
252	SDEB_I_LAST_ELEMENT = 30,	/* keep this last */
253};
254
255static const unsigned char opcode_ind_arr[256] = {
256/* 0x0; 0x0->0x1f: 6 byte cdbs */
257	SDEB_I_TEST_UNIT_READY, SDEB_I_REZERO_UNIT, 0, SDEB_I_REQUEST_SENSE,
258	    0, 0, 0, 0,
259	SDEB_I_READ, 0, SDEB_I_WRITE, 0, 0, 0, 0, 0,
260	0, 0, SDEB_I_INQUIRY, 0, 0, SDEB_I_MODE_SELECT, SDEB_I_RESERVE,
261	    SDEB_I_RELEASE,
262	0, 0, SDEB_I_MODE_SENSE, SDEB_I_START_STOP, 0, SDEB_I_SEND_DIAG,
263	    SDEB_I_ALLOW_REMOVAL, 0,
264/* 0x20; 0x20->0x3f: 10 byte cdbs */
265	0, 0, 0, 0, 0, SDEB_I_READ_CAPACITY, 0, 0,
266	SDEB_I_READ, 0, SDEB_I_WRITE, 0, 0, 0, 0, SDEB_I_VERIFY,
267	0, 0, 0, 0, 0, SDEB_I_SYNC_CACHE, 0, 0,
268	0, 0, 0, SDEB_I_WRITE_BUFFER, 0, 0, 0, 0,
269/* 0x40; 0x40->0x5f: 10 byte cdbs */
270	0, SDEB_I_WRITE_SAME, SDEB_I_UNMAP, 0, 0, 0, 0, 0,
271	0, 0, 0, 0, 0, SDEB_I_LOG_SENSE, 0, 0,
272	0, 0, 0, SDEB_I_XDWRITEREAD, 0, SDEB_I_MODE_SELECT, SDEB_I_RESERVE,
273	    SDEB_I_RELEASE,
274	0, 0, SDEB_I_MODE_SENSE, 0, 0, 0, 0, 0,
275/* 0x60; 0x60->0x7d are reserved */
276	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
277	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
278	0, SDEB_I_VARIABLE_LEN,
279/* 0x80; 0x80->0x9f: 16 byte cdbs */
280	0, 0, 0, 0, 0, SDEB_I_ATA_PT, 0, 0,
281	SDEB_I_READ, SDEB_I_COMP_WRITE, SDEB_I_WRITE, 0, 0, 0, 0, 0,
282	0, 0, 0, SDEB_I_WRITE_SAME, 0, 0, 0, 0,
283	0, 0, 0, 0, 0, 0, SDEB_I_SERV_ACT_IN, SDEB_I_SERV_ACT_OUT,
284/* 0xa0; 0xa0->0xbf: 12 byte cdbs */
285	SDEB_I_REPORT_LUNS, SDEB_I_ATA_PT, 0, SDEB_I_MAINT_IN,
286	     SDEB_I_MAINT_OUT, 0, 0, 0,
287	SDEB_I_READ, SDEB_I_SERV_ACT_OUT, SDEB_I_WRITE, SDEB_I_SERV_ACT_IN,
288	     0, 0, 0, 0,
289	0, 0, 0, 0, 0, 0, 0, 0,
290	0, 0, 0, 0, 0, 0, 0, 0,
291/* 0xc0; 0xc0->0xff: vendor specific */
292	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
293	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
294	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
295	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
296};
297
298#define F_D_IN			1
299#define F_D_OUT			2
300#define F_D_OUT_MAYBE		4	/* WRITE SAME, NDOB bit */
301#define F_D_UNKN		8
302#define F_RL_WLUN_OK		0x10
303#define F_SKIP_UA		0x20
304#define F_DELAY_OVERR		0x40
305#define F_SA_LOW		0x80	/* cdb byte 1, bits 4 to 0 */
306#define F_SA_HIGH		0x100	/* as used by variable length cdbs */
307#define F_INV_OP		0x200
308#define F_FAKE_RW		0x400
309#define F_M_ACCESS		0x800	/* media access */
310
311#define FF_RESPOND (F_RL_WLUN_OK | F_SKIP_UA | F_DELAY_OVERR)
312#define FF_DIRECT_IO (F_M_ACCESS | F_FAKE_RW)
313#define FF_SA (F_SA_HIGH | F_SA_LOW)
314
315struct sdebug_dev_info;
316static int resp_inquiry(struct scsi_cmnd *, struct sdebug_dev_info *);
317static int resp_report_luns(struct scsi_cmnd *, struct sdebug_dev_info *);
318static int resp_requests(struct scsi_cmnd *, struct sdebug_dev_info *);
319static int resp_mode_sense(struct scsi_cmnd *, struct sdebug_dev_info *);
320static int resp_mode_select(struct scsi_cmnd *, struct sdebug_dev_info *);
321static int resp_log_sense(struct scsi_cmnd *, struct sdebug_dev_info *);
322static int resp_readcap(struct scsi_cmnd *, struct sdebug_dev_info *);
323static int resp_read_dt0(struct scsi_cmnd *, struct sdebug_dev_info *);
324static int resp_write_dt0(struct scsi_cmnd *, struct sdebug_dev_info *);
325static int resp_start_stop(struct scsi_cmnd *, struct sdebug_dev_info *);
326static int resp_readcap16(struct scsi_cmnd *, struct sdebug_dev_info *);
327static int resp_get_lba_status(struct scsi_cmnd *, struct sdebug_dev_info *);
328static int resp_report_tgtpgs(struct scsi_cmnd *, struct sdebug_dev_info *);
329static int resp_unmap(struct scsi_cmnd *, struct sdebug_dev_info *);
330static int resp_rsup_opcodes(struct scsi_cmnd *, struct sdebug_dev_info *);
331static int resp_rsup_tmfs(struct scsi_cmnd *, struct sdebug_dev_info *);
332static int resp_write_same_10(struct scsi_cmnd *, struct sdebug_dev_info *);
333static int resp_write_same_16(struct scsi_cmnd *, struct sdebug_dev_info *);
334static int resp_xdwriteread_10(struct scsi_cmnd *, struct sdebug_dev_info *);
335static int resp_comp_write(struct scsi_cmnd *, struct sdebug_dev_info *);
336static int resp_write_buffer(struct scsi_cmnd *, struct sdebug_dev_info *);
337
338struct opcode_info_t {
339	u8 num_attached;	/* 0 if this is it (i.e. a leaf); use 0xff
340				 * for terminating element */
341	u8 opcode;		/* if num_attached > 0, preferred */
342	u16 sa;			/* service action */
343	u32 flags;		/* OR-ed set of SDEB_F_* */
344	int (*pfp)(struct scsi_cmnd *, struct sdebug_dev_info *);
345	const struct opcode_info_t *arrp;  /* num_attached elements or NULL */
346	u8 len_mask[16];	/* len=len_mask[0], then mask for cdb[1]... */
347				/* ignore cdb bytes after position 15 */
348};
349
350static const struct opcode_info_t msense_iarr[1] = {
351	{0, 0x1a, 0, F_D_IN, NULL, NULL,
352	    {6,  0xe8, 0xff, 0xff, 0xff, 0xc7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
353};
354
355static const struct opcode_info_t mselect_iarr[1] = {
356	{0, 0x15, 0, F_D_OUT, NULL, NULL,
357	    {6,  0xf1, 0, 0, 0xff, 0xc7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
358};
359
360static const struct opcode_info_t read_iarr[3] = {
361	{0, 0x28, 0, F_D_IN | FF_DIRECT_IO, resp_read_dt0, NULL,/* READ(10) */
362	    {10,  0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xff, 0xff, 0xc7, 0, 0,
363	     0, 0, 0, 0} },
364	{0, 0x8, 0, F_D_IN | FF_DIRECT_IO, resp_read_dt0, NULL, /* READ(6) */
365	    {6,  0xff, 0xff, 0xff, 0xff, 0xc7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
366	{0, 0xa8, 0, F_D_IN | FF_DIRECT_IO, resp_read_dt0, NULL,/* READ(12) */
367	    {12,  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f,
368	     0xc7, 0, 0, 0, 0} },
369};
370
371static const struct opcode_info_t write_iarr[3] = {
372	{0, 0x2a, 0, F_D_OUT | FF_DIRECT_IO, resp_write_dt0, NULL,   /* 10 */
373	    {10,  0xfb, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xff, 0xff, 0xc7, 0, 0,
374	     0, 0, 0, 0} },
375	{0, 0xa, 0, F_D_OUT | FF_DIRECT_IO, resp_write_dt0, NULL,    /* 6 */
376	    {6,  0xff, 0xff, 0xff, 0xff, 0xc7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
377	{0, 0xaa, 0, F_D_OUT | FF_DIRECT_IO, resp_write_dt0, NULL,   /* 12 */
378	    {12,  0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f,
379	     0xc7, 0, 0, 0, 0} },
380};
381
382static const struct opcode_info_t sa_in_iarr[1] = {
383	{0, 0x9e, 0x12, F_SA_LOW | F_D_IN, resp_get_lba_status, NULL,
384	    {16,  0x12, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
385	     0xff, 0xff, 0xff, 0, 0xc7} },
386};
387
388static const struct opcode_info_t vl_iarr[1] = {	/* VARIABLE LENGTH */
389	{0, 0x7f, 0xb, F_SA_HIGH | F_D_OUT | FF_DIRECT_IO, resp_write_dt0,
390	    NULL, {32,  0xc7, 0, 0, 0, 0, 0x1f, 0x18, 0x0, 0xb, 0xfa,
391		   0, 0xff, 0xff, 0xff, 0xff} },	/* WRITE(32) */
392};
393
394static const struct opcode_info_t maint_in_iarr[2] = {
395	{0, 0xa3, 0xc, F_SA_LOW | F_D_IN, resp_rsup_opcodes, NULL,
396	    {12,  0xc, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0,
397	     0xc7, 0, 0, 0, 0} },
398	{0, 0xa3, 0xd, F_SA_LOW | F_D_IN, resp_rsup_tmfs, NULL,
399	    {12,  0xd, 0x80, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0xc7, 0, 0,
400	     0, 0} },
401};
402
403static const struct opcode_info_t write_same_iarr[1] = {
404	{0, 0x93, 0, F_D_OUT_MAYBE | FF_DIRECT_IO, resp_write_same_16, NULL,
405	    {16,  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
406	     0xff, 0xff, 0xff, 0x1f, 0xc7} },
407};
408
409static const struct opcode_info_t reserve_iarr[1] = {
410	{0, 0x16, 0, F_D_OUT, NULL, NULL,	/* RESERVE(6) */
411	    {6,  0x1f, 0xff, 0xff, 0xff, 0xc7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
412};
413
414static const struct opcode_info_t release_iarr[1] = {
415	{0, 0x17, 0, F_D_OUT, NULL, NULL,	/* RELEASE(6) */
416	    {6,  0x1f, 0xff, 0, 0, 0xc7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
417};
418
419
420/* This array is accessed via SDEB_I_* values. Make sure all are mapped,
421 * plus the terminating elements for logic that scans this table such as
422 * REPORT SUPPORTED OPERATION CODES. */
423static const struct opcode_info_t opcode_info_arr[SDEB_I_LAST_ELEMENT + 1] = {
424/* 0 */
425	{0, 0, 0, F_INV_OP | FF_RESPOND, NULL, NULL,
426	    {0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
427	{0, 0x12, 0, FF_RESPOND | F_D_IN, resp_inquiry, NULL,
428	    {6,  0xe3, 0xff, 0xff, 0xff, 0xc7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
429	{0, 0xa0, 0, FF_RESPOND | F_D_IN, resp_report_luns, NULL,
430	    {12,  0xe3, 0xff, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0xc7, 0, 0,
431	     0, 0} },
432	{0, 0x3, 0, FF_RESPOND | F_D_IN, resp_requests, NULL,
433	    {6,  0xe1, 0, 0, 0xff, 0xc7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
434	{0, 0x0, 0, F_M_ACCESS | F_RL_WLUN_OK, NULL, NULL,/* TEST UNIT READY */
435	    {6,  0, 0, 0, 0, 0xc7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
436	{1, 0x5a, 0, F_D_IN, resp_mode_sense, msense_iarr,
437	    {10,  0xf8, 0xff, 0xff, 0, 0, 0, 0xff, 0xff, 0xc7, 0, 0, 0, 0, 0,
438	     0} },
439	{1, 0x55, 0, F_D_OUT, resp_mode_select, mselect_iarr,
440	    {10,  0xf1, 0, 0, 0, 0, 0, 0xff, 0xff, 0xc7, 0, 0, 0, 0, 0, 0} },
441	{0, 0x4d, 0, F_D_IN, resp_log_sense, NULL,
442	    {10,  0xe3, 0xff, 0xff, 0, 0xff, 0xff, 0xff, 0xff, 0xc7, 0, 0, 0,
443	     0, 0, 0} },
444	{0, 0x25, 0, F_D_IN, resp_readcap, NULL,
445	    {10,  0xe1, 0xff, 0xff, 0xff, 0xff, 0, 0, 0x1, 0xc7, 0, 0, 0, 0,
446	     0, 0} },
447	{3, 0x88, 0, F_D_IN | FF_DIRECT_IO, resp_read_dt0, read_iarr,
448	    {16,  0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
449	     0xff, 0xff, 0xff, 0x9f, 0xc7} },		/* READ(16) */
450/* 10 */
451	{3, 0x8a, 0, F_D_OUT | FF_DIRECT_IO, resp_write_dt0, write_iarr,
452	    {16,  0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
453	     0xff, 0xff, 0xff, 0x9f, 0xc7} },		/* WRITE(16) */
454	{0, 0x1b, 0, 0, resp_start_stop, NULL,		/* START STOP UNIT */
455	    {6,  0x1, 0, 0xf, 0xf7, 0xc7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
456	{1, 0x9e, 0x10, F_SA_LOW | F_D_IN, resp_readcap16, sa_in_iarr,
457	    {16,  0x10, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
458	     0xff, 0xff, 0xff, 0x1, 0xc7} },	/* READ CAPACITY(16) */
459	{0, 0, 0, F_INV_OP | FF_RESPOND, NULL, NULL, /* SA OUT */
460	    {0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
461	{2, 0xa3, 0xa, F_SA_LOW | F_D_IN, resp_report_tgtpgs, maint_in_iarr,
462	    {12,  0xea, 0, 0, 0, 0, 0xff, 0xff, 0xff, 0xff, 0, 0xc7, 0, 0, 0,
463	     0} },
464	{0, 0, 0, F_INV_OP | FF_RESPOND, NULL, NULL, /* MAINT OUT */
465	    {0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
466	{0, 0, 0, F_INV_OP | FF_RESPOND, NULL, NULL, /* VERIFY */
467	    {0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
468	{1, 0x7f, 0x9, F_SA_HIGH | F_D_IN | FF_DIRECT_IO, resp_read_dt0,
469	    vl_iarr, {32,  0xc7, 0, 0, 0, 0, 0x1f, 0x18, 0x0, 0x9, 0xfe, 0,
470		      0xff, 0xff, 0xff, 0xff} },/* VARIABLE LENGTH, READ(32) */
471	{1, 0x56, 0, F_D_OUT, NULL, reserve_iarr, /* RESERVE(10) */
472	    {10,  0xff, 0xff, 0xff, 0, 0, 0, 0xff, 0xff, 0xc7, 0, 0, 0, 0, 0,
473	     0} },
474	{1, 0x57, 0, F_D_OUT, NULL, release_iarr, /* RELEASE(10) */
475	    {10,  0x13, 0xff, 0xff, 0, 0, 0, 0xff, 0xff, 0xc7, 0, 0, 0, 0, 0,
476	     0} },
477/* 20 */
478	{0, 0, 0, F_INV_OP | FF_RESPOND, NULL, NULL, /* ALLOW REMOVAL */
479	    {0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
480	{0, 0x1, 0, 0, resp_start_stop, NULL, /* REWIND ?? */
481	    {6,  0x1, 0, 0, 0, 0xc7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
482	{0, 0, 0, F_INV_OP | FF_RESPOND, NULL, NULL, /* ATA_PT */
483	    {0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
484	{0, 0x1d, F_D_OUT, 0, NULL, NULL,	/* SEND DIAGNOSTIC */
485	    {6,  0xf7, 0, 0xff, 0xff, 0xc7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
486	{0, 0x42, 0, F_D_OUT | FF_DIRECT_IO, resp_unmap, NULL, /* UNMAP */
487	    {10,  0x1, 0, 0, 0, 0, 0x1f, 0xff, 0xff, 0xc7, 0, 0, 0, 0, 0, 0} },
488	{0, 0x53, 0, F_D_IN | F_D_OUT | FF_DIRECT_IO, resp_xdwriteread_10,
489	    NULL, {10,  0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xff, 0xff, 0xc7,
490		   0, 0, 0, 0, 0, 0} },
491	{0, 0x3b, 0, F_D_OUT_MAYBE, resp_write_buffer, NULL,
492	    {10,  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc7, 0, 0,
493	     0, 0, 0, 0} },			/* WRITE_BUFFER */
494	{1, 0x41, 0, F_D_OUT_MAYBE | FF_DIRECT_IO, resp_write_same_10,
495	    write_same_iarr, {10,  0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xff,
496			      0xff, 0xc7, 0, 0, 0, 0, 0, 0} },
497	{0, 0x35, 0, F_DELAY_OVERR | FF_DIRECT_IO, NULL, NULL, /* SYNC_CACHE */
498	    {10,  0x7, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xff, 0xff, 0xc7, 0, 0,
499	     0, 0, 0, 0} },
500	{0, 0x89, 0, F_D_OUT | FF_DIRECT_IO, resp_comp_write, NULL,
501	    {16,  0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 0,
502	     0, 0xff, 0x1f, 0xc7} },		/* COMPARE AND WRITE */
503
504/* 30 */
505	{0xff, 0, 0, 0, NULL, NULL,		/* terminating element */
506	    {0,  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} },
507};
508
509struct sdebug_scmd_extra_t {
510	bool inj_recovered;
511	bool inj_transport;
512	bool inj_dif;
513	bool inj_dix;
514	bool inj_short;
515};
516
517static int scsi_debug_add_host = DEF_NUM_HOST;
518static int scsi_debug_ato = DEF_ATO;
519static int scsi_debug_delay = DEF_DELAY;
520static int scsi_debug_dev_size_mb = DEF_DEV_SIZE_MB;
521static int scsi_debug_dif = DEF_DIF;
522static int scsi_debug_dix = DEF_DIX;
523static int scsi_debug_dsense = DEF_D_SENSE;
524static int scsi_debug_every_nth = DEF_EVERY_NTH;
525static int scsi_debug_fake_rw = DEF_FAKE_RW;
526static unsigned int scsi_debug_guard = DEF_GUARD;
527static int scsi_debug_lowest_aligned = DEF_LOWEST_ALIGNED;
528static int scsi_debug_max_luns = DEF_MAX_LUNS;
529static int scsi_debug_max_queue = SCSI_DEBUG_CANQUEUE;
530static atomic_t retired_max_queue;	/* if > 0 then was prior max_queue */
531static int scsi_debug_ndelay = DEF_NDELAY;
532static int scsi_debug_no_lun_0 = DEF_NO_LUN_0;
533static int scsi_debug_no_uld = 0;
534static int scsi_debug_num_parts = DEF_NUM_PARTS;
535static int scsi_debug_num_tgts = DEF_NUM_TGTS; /* targets per host */
536static int scsi_debug_opt_blks = DEF_OPT_BLKS;
537static int scsi_debug_opts = DEF_OPTS;
538static int scsi_debug_physblk_exp = DEF_PHYSBLK_EXP;
539static int scsi_debug_ptype = DEF_PTYPE; /* SCSI peripheral type (0==disk) */
540static int scsi_debug_scsi_level = DEF_SCSI_LEVEL;
541static int scsi_debug_sector_size = DEF_SECTOR_SIZE;
542static int scsi_debug_virtual_gb = DEF_VIRTUAL_GB;
543static int scsi_debug_vpd_use_hostno = DEF_VPD_USE_HOSTNO;
544static unsigned int scsi_debug_lbpu = DEF_LBPU;
545static unsigned int scsi_debug_lbpws = DEF_LBPWS;
546static unsigned int scsi_debug_lbpws10 = DEF_LBPWS10;
547static unsigned int scsi_debug_lbprz = DEF_LBPRZ;
548static unsigned int scsi_debug_unmap_alignment = DEF_UNMAP_ALIGNMENT;
549static unsigned int scsi_debug_unmap_granularity = DEF_UNMAP_GRANULARITY;
550static unsigned int scsi_debug_unmap_max_blocks = DEF_UNMAP_MAX_BLOCKS;
551static unsigned int scsi_debug_unmap_max_desc = DEF_UNMAP_MAX_DESC;
552static unsigned int scsi_debug_write_same_length = DEF_WRITESAME_LENGTH;
553static bool scsi_debug_removable = DEF_REMOVABLE;
554static bool scsi_debug_clustering;
555static bool scsi_debug_host_lock = DEF_HOST_LOCK;
556static bool scsi_debug_strict = DEF_STRICT;
557static bool sdebug_any_injecting_opt;
558
559static atomic_t sdebug_cmnd_count;
560static atomic_t sdebug_completions;
561static atomic_t sdebug_a_tsf;		/* counter of 'almost' TSFs */
562
563#define DEV_READONLY(TGT)      (0)
564
565static unsigned int sdebug_store_sectors;
566static sector_t sdebug_capacity;	/* in sectors */
567
568/* old BIOS stuff, kernel may get rid of them but some mode sense pages
569   may still need them */
570static int sdebug_heads;		/* heads per disk */
571static int sdebug_cylinders_per;	/* cylinders per surface */
572static int sdebug_sectors_per;		/* sectors per cylinder */
573
574#define SDEBUG_MAX_PARTS 4
575
576#define SCSI_DEBUG_MAX_CMD_LEN 32
577
578static unsigned int scsi_debug_lbp(void)
579{
580	return ((0 == scsi_debug_fake_rw) &&
581		(scsi_debug_lbpu | scsi_debug_lbpws | scsi_debug_lbpws10));
582}
583
584struct sdebug_dev_info {
585	struct list_head dev_list;
586	unsigned int channel;
587	unsigned int target;
588	u64 lun;
589	struct sdebug_host_info *sdbg_host;
590	unsigned long uas_bm[1];
591	atomic_t num_in_q;
592	char stopped;		/* TODO: should be atomic */
593	bool used;
594};
595
596struct sdebug_host_info {
597	struct list_head host_list;
598	struct Scsi_Host *shost;
599	struct device dev;
600	struct list_head dev_info_list;
601};
602
603#define to_sdebug_host(d)	\
604	container_of(d, struct sdebug_host_info, dev)
605
606static LIST_HEAD(sdebug_host_list);
607static DEFINE_SPINLOCK(sdebug_host_list_lock);
608
609
610struct sdebug_hrtimer {		/* ... is derived from hrtimer */
611	struct hrtimer hrt;	/* must be first element */
612	int qa_indx;
613};
614
615struct sdebug_queued_cmd {
616	/* in_use flagged by a bit in queued_in_use_bm[] */
617	struct timer_list *cmnd_timerp;
618	struct tasklet_struct *tletp;
619	struct sdebug_hrtimer *sd_hrtp;
620	struct scsi_cmnd * a_cmnd;
621};
622static struct sdebug_queued_cmd queued_arr[SCSI_DEBUG_CANQUEUE];
623static unsigned long queued_in_use_bm[SCSI_DEBUG_CANQUEUE_WORDS];
624
625
626static unsigned char * fake_storep;	/* ramdisk storage */
627static struct sd_dif_tuple *dif_storep;	/* protection info */
628static void *map_storep;		/* provisioning map */
629
630static unsigned long map_size;
631static int num_aborts;
632static int num_dev_resets;
633static int num_target_resets;
634static int num_bus_resets;
635static int num_host_resets;
636static int dix_writes;
637static int dix_reads;
638static int dif_errors;
639
640static DEFINE_SPINLOCK(queued_arr_lock);
641static DEFINE_RWLOCK(atomic_rw);
642
643static char sdebug_proc_name[] = MY_NAME;
644static const char *my_name = MY_NAME;
645
646static struct bus_type pseudo_lld_bus;
647
648static struct device_driver sdebug_driverfs_driver = {
649	.name 		= sdebug_proc_name,
650	.bus		= &pseudo_lld_bus,
651};
652
653static const int check_condition_result =
654		(DRIVER_SENSE << 24) | SAM_STAT_CHECK_CONDITION;
655
656static const int illegal_condition_result =
657	(DRIVER_SENSE << 24) | (DID_ABORT << 16) | SAM_STAT_CHECK_CONDITION;
658
659static const int device_qfull_result =
660	(DID_OK << 16) | (COMMAND_COMPLETE << 8) | SAM_STAT_TASK_SET_FULL;
661
662static unsigned char caching_pg[] = {0x8, 18, 0x14, 0, 0xff, 0xff, 0, 0,
663				     0xff, 0xff, 0xff, 0xff, 0x80, 0x14, 0, 0,
664				     0, 0, 0, 0};
665static unsigned char ctrl_m_pg[] = {0xa, 10, 2, 0, 0, 0, 0, 0,
666				    0, 0, 0x2, 0x4b};
667static unsigned char iec_m_pg[] = {0x1c, 0xa, 0x08, 0, 0, 0, 0, 0,
668			           0, 0, 0x0, 0x0};
669
670static void *fake_store(unsigned long long lba)
671{
672	lba = do_div(lba, sdebug_store_sectors);
673
674	return fake_storep + lba * scsi_debug_sector_size;
675}
676
677static struct sd_dif_tuple *dif_store(sector_t sector)
678{
679	sector = do_div(sector, sdebug_store_sectors);
680
681	return dif_storep + sector;
682}
683
684static int sdebug_add_adapter(void);
685static void sdebug_remove_adapter(void);
686
687static void sdebug_max_tgts_luns(void)
688{
689	struct sdebug_host_info *sdbg_host;
690	struct Scsi_Host *hpnt;
691
692	spin_lock(&sdebug_host_list_lock);
693	list_for_each_entry(sdbg_host, &sdebug_host_list, host_list) {
694		hpnt = sdbg_host->shost;
695		if ((hpnt->this_id >= 0) &&
696		    (scsi_debug_num_tgts > hpnt->this_id))
697			hpnt->max_id = scsi_debug_num_tgts + 1;
698		else
699			hpnt->max_id = scsi_debug_num_tgts;
700		/* scsi_debug_max_luns; */
701		hpnt->max_lun = SAM2_WLUN_REPORT_LUNS;
702	}
703	spin_unlock(&sdebug_host_list_lock);
704}
705
706enum sdeb_cmd_data {SDEB_IN_DATA = 0, SDEB_IN_CDB = 1};
707
708/* Set in_bit to -1 to indicate no bit position of invalid field */
709static void
710mk_sense_invalid_fld(struct scsi_cmnd *scp, enum sdeb_cmd_data c_d,
711		     int in_byte, int in_bit)
712{
713	unsigned char *sbuff;
714	u8 sks[4];
715	int sl, asc;
716
717	sbuff = scp->sense_buffer;
718	if (!sbuff) {
719		sdev_printk(KERN_ERR, scp->device,
720			    "%s: sense_buffer is NULL\n", __func__);
721		return;
722	}
723	asc = c_d ? INVALID_FIELD_IN_CDB : INVALID_FIELD_IN_PARAM_LIST;
724	memset(sbuff, 0, SCSI_SENSE_BUFFERSIZE);
725	scsi_build_sense_buffer(scsi_debug_dsense, sbuff, ILLEGAL_REQUEST,
726				asc, 0);
727	memset(sks, 0, sizeof(sks));
728	sks[0] = 0x80;
729	if (c_d)
730		sks[0] |= 0x40;
731	if (in_bit >= 0) {
732		sks[0] |= 0x8;
733		sks[0] |= 0x7 & in_bit;
734	}
735	put_unaligned_be16(in_byte, sks + 1);
736	if (scsi_debug_dsense) {
737		sl = sbuff[7] + 8;
738		sbuff[7] = sl;
739		sbuff[sl] = 0x2;
740		sbuff[sl + 1] = 0x6;
741		memcpy(sbuff + sl + 4, sks, 3);
742	} else
743		memcpy(sbuff + 15, sks, 3);
744	if (SCSI_DEBUG_OPT_NOISE & scsi_debug_opts)
745		sdev_printk(KERN_INFO, scp->device, "%s:  [sense_key,asc,ascq"
746			    "]: [0x5,0x%x,0x0] %c byte=%d, bit=%d\n",
747			    my_name, asc, c_d ? 'C' : 'D', in_byte, in_bit);
748}
749
750static void mk_sense_buffer(struct scsi_cmnd *scp, int key, int asc, int asq)
751{
752	unsigned char *sbuff;
753
754	sbuff = scp->sense_buffer;
755	if (!sbuff) {
756		sdev_printk(KERN_ERR, scp->device,
757			    "%s: sense_buffer is NULL\n", __func__);
758		return;
759	}
760	memset(sbuff, 0, SCSI_SENSE_BUFFERSIZE);
761
762	scsi_build_sense_buffer(scsi_debug_dsense, sbuff, key, asc, asq);
763
764	if (SCSI_DEBUG_OPT_NOISE & scsi_debug_opts)
765		sdev_printk(KERN_INFO, scp->device,
766			    "%s:  [sense_key,asc,ascq]: [0x%x,0x%x,0x%x]\n",
767			    my_name, key, asc, asq);
768}
769
770static void
771mk_sense_invalid_opcode(struct scsi_cmnd *scp)
772{
773	mk_sense_buffer(scp, ILLEGAL_REQUEST, INVALID_OPCODE, 0);
774}
775
776static int scsi_debug_ioctl(struct scsi_device *dev, int cmd, void __user *arg)
777{
778	if (SCSI_DEBUG_OPT_NOISE & scsi_debug_opts) {
779		if (0x1261 == cmd)
780			sdev_printk(KERN_INFO, dev,
781				    "%s: BLKFLSBUF [0x1261]\n", __func__);
782		else if (0x5331 == cmd)
783			sdev_printk(KERN_INFO, dev,
784				    "%s: CDROM_GET_CAPABILITY [0x5331]\n",
785				    __func__);
786		else
787			sdev_printk(KERN_INFO, dev, "%s: cmd=0x%x\n",
788				    __func__, cmd);
789	}
790	return -EINVAL;
791	/* return -ENOTTY; // correct return but upsets fdisk */
792}
793
794static void clear_luns_changed_on_target(struct sdebug_dev_info *devip)
795{
796	struct sdebug_host_info *sdhp;
797	struct sdebug_dev_info *dp;
798
799	spin_lock(&sdebug_host_list_lock);
800	list_for_each_entry(sdhp, &sdebug_host_list, host_list) {
801		list_for_each_entry(dp, &sdhp->dev_info_list, dev_list) {
802			if ((devip->sdbg_host == dp->sdbg_host) &&
803			    (devip->target == dp->target))
804				clear_bit(SDEBUG_UA_LUNS_CHANGED, dp->uas_bm);
805		}
806	}
807	spin_unlock(&sdebug_host_list_lock);
808}
809
810static int check_readiness(struct scsi_cmnd *SCpnt, int uas_only,
811			   struct sdebug_dev_info * devip)
812{
813	int k;
814	bool debug = !!(SCSI_DEBUG_OPT_NOISE & scsi_debug_opts);
815
816	k = find_first_bit(devip->uas_bm, SDEBUG_NUM_UAS);
817	if (k != SDEBUG_NUM_UAS) {
818		const char *cp = NULL;
819
820		switch (k) {
821		case SDEBUG_UA_POR:
822			mk_sense_buffer(SCpnt, UNIT_ATTENTION,
823					UA_RESET_ASC, POWER_ON_RESET_ASCQ);
824			if (debug)
825				cp = "power on reset";
826			break;
827		case SDEBUG_UA_BUS_RESET:
828			mk_sense_buffer(SCpnt, UNIT_ATTENTION,
829					UA_RESET_ASC, BUS_RESET_ASCQ);
830			if (debug)
831				cp = "bus reset";
832			break;
833		case SDEBUG_UA_MODE_CHANGED:
834			mk_sense_buffer(SCpnt, UNIT_ATTENTION,
835					UA_CHANGED_ASC, MODE_CHANGED_ASCQ);
836			if (debug)
837				cp = "mode parameters changed";
838			break;
839		case SDEBUG_UA_CAPACITY_CHANGED:
840			mk_sense_buffer(SCpnt, UNIT_ATTENTION,
841					UA_CHANGED_ASC, CAPACITY_CHANGED_ASCQ);
842			if (debug)
843				cp = "capacity data changed";
844			break;
845		case SDEBUG_UA_MICROCODE_CHANGED:
846			mk_sense_buffer(SCpnt, UNIT_ATTENTION,
847				 TARGET_CHANGED_ASC, MICROCODE_CHANGED_ASCQ);
848			if (debug)
849				cp = "microcode has been changed";
850			break;
851		case SDEBUG_UA_MICROCODE_CHANGED_WO_RESET:
852			mk_sense_buffer(SCpnt, UNIT_ATTENTION,
853					TARGET_CHANGED_ASC,
854					MICROCODE_CHANGED_WO_RESET_ASCQ);
855			if (debug)
856				cp = "microcode has been changed without reset";
857			break;
858		case SDEBUG_UA_LUNS_CHANGED:
859			/*
860			 * SPC-3 behavior is to report a UNIT ATTENTION with
861			 * ASC/ASCQ REPORTED LUNS DATA HAS CHANGED on every LUN
862			 * on the target, until a REPORT LUNS command is
863			 * received.  SPC-4 behavior is to report it only once.
864			 * NOTE:  scsi_debug_scsi_level does not use the same
865			 * values as struct scsi_device->scsi_level.
866			 */
867			if (scsi_debug_scsi_level >= 6)	/* SPC-4 and above */
868				clear_luns_changed_on_target(devip);
869			mk_sense_buffer(SCpnt, UNIT_ATTENTION,
870					TARGET_CHANGED_ASC,
871					LUNS_CHANGED_ASCQ);
872			if (debug)
873				cp = "reported luns data has changed";
874			break;
875		default:
876			pr_warn("%s: unexpected unit attention code=%d\n",
877				__func__, k);
878			if (debug)
879				cp = "unknown";
880			break;
881		}
882		clear_bit(k, devip->uas_bm);
883		if (debug)
884			sdev_printk(KERN_INFO, SCpnt->device,
885				   "%s reports: Unit attention: %s\n",
886				   my_name, cp);
887		return check_condition_result;
888	}
889	if ((UAS_TUR == uas_only) && devip->stopped) {
890		mk_sense_buffer(SCpnt, NOT_READY, LOGICAL_UNIT_NOT_READY,
891				0x2);
892		if (debug)
893			sdev_printk(KERN_INFO, SCpnt->device,
894				    "%s reports: Not ready: %s\n", my_name,
895				    "initializing command required");
896		return check_condition_result;
897	}
898	return 0;
899}
900
901/* Returns 0 if ok else (DID_ERROR << 16). Sets scp->resid . */
902static int fill_from_dev_buffer(struct scsi_cmnd *scp, unsigned char *arr,
903				int arr_len)
904{
905	int act_len;
906	struct scsi_data_buffer *sdb = scsi_in(scp);
907
908	if (!sdb->length)
909		return 0;
910	if (!(scsi_bidi_cmnd(scp) || scp->sc_data_direction == DMA_FROM_DEVICE))
911		return (DID_ERROR << 16);
912
913	act_len = sg_copy_from_buffer(sdb->table.sgl, sdb->table.nents,
914				      arr, arr_len);
915	sdb->resid = scsi_bufflen(scp) - act_len;
916
917	return 0;
918}
919
920/* Returns number of bytes fetched into 'arr' or -1 if error. */
921static int fetch_to_dev_buffer(struct scsi_cmnd *scp, unsigned char *arr,
922			       int arr_len)
923{
924	if (!scsi_bufflen(scp))
925		return 0;
926	if (!(scsi_bidi_cmnd(scp) || scp->sc_data_direction == DMA_TO_DEVICE))
927		return -1;
928
929	return scsi_sg_copy_to_buffer(scp, arr, arr_len);
930}
931
932
933static const char * inq_vendor_id = "Linux   ";
934static const char * inq_product_id = "scsi_debug      ";
935static const char *inq_product_rev = "0184";	/* version less '.' */
936
937/* Device identification VPD page. Returns number of bytes placed in arr */
938static int inquiry_evpd_83(unsigned char * arr, int port_group_id,
939			   int target_dev_id, int dev_id_num,
940			   const char * dev_id_str,
941			   int dev_id_str_len)
942{
943	int num, port_a;
944	char b[32];
945
946	port_a = target_dev_id + 1;
947	/* T10 vendor identifier field format (faked) */
948	arr[0] = 0x2;	/* ASCII */
949	arr[1] = 0x1;
950	arr[2] = 0x0;
951	memcpy(&arr[4], inq_vendor_id, 8);
952	memcpy(&arr[12], inq_product_id, 16);
953	memcpy(&arr[28], dev_id_str, dev_id_str_len);
954	num = 8 + 16 + dev_id_str_len;
955	arr[3] = num;
956	num += 4;
957	if (dev_id_num >= 0) {
958		/* NAA-5, Logical unit identifier (binary) */
959		arr[num++] = 0x1;	/* binary (not necessarily sas) */
960		arr[num++] = 0x3;	/* PIV=0, lu, naa */
961		arr[num++] = 0x0;
962		arr[num++] = 0x8;
963		arr[num++] = 0x53;  /* naa-5 ieee company id=0x333333 (fake) */
964		arr[num++] = 0x33;
965		arr[num++] = 0x33;
966		arr[num++] = 0x30;
967		arr[num++] = (dev_id_num >> 24);
968		arr[num++] = (dev_id_num >> 16) & 0xff;
969		arr[num++] = (dev_id_num >> 8) & 0xff;
970		arr[num++] = dev_id_num & 0xff;
971		/* Target relative port number */
972		arr[num++] = 0x61;	/* proto=sas, binary */
973		arr[num++] = 0x94;	/* PIV=1, target port, rel port */
974		arr[num++] = 0x0;	/* reserved */
975		arr[num++] = 0x4;	/* length */
976		arr[num++] = 0x0;	/* reserved */
977		arr[num++] = 0x0;	/* reserved */
978		arr[num++] = 0x0;
979		arr[num++] = 0x1;	/* relative port A */
980	}
981	/* NAA-5, Target port identifier */
982	arr[num++] = 0x61;	/* proto=sas, binary */
983	arr[num++] = 0x93;	/* piv=1, target port, naa */
984	arr[num++] = 0x0;
985	arr[num++] = 0x8;
986	arr[num++] = 0x52;	/* naa-5, company id=0x222222 (fake) */
987	arr[num++] = 0x22;
988	arr[num++] = 0x22;
989	arr[num++] = 0x20;
990	arr[num++] = (port_a >> 24);
991	arr[num++] = (port_a >> 16) & 0xff;
992	arr[num++] = (port_a >> 8) & 0xff;
993	arr[num++] = port_a & 0xff;
994	/* NAA-5, Target port group identifier */
995	arr[num++] = 0x61;	/* proto=sas, binary */
996	arr[num++] = 0x95;	/* piv=1, target port group id */
997	arr[num++] = 0x0;
998	arr[num++] = 0x4;
999	arr[num++] = 0;
1000	arr[num++] = 0;
1001	arr[num++] = (port_group_id >> 8) & 0xff;
1002	arr[num++] = port_group_id & 0xff;
1003	/* NAA-5, Target device identifier */
1004	arr[num++] = 0x61;	/* proto=sas, binary */
1005	arr[num++] = 0xa3;	/* piv=1, target device, naa */
1006	arr[num++] = 0x0;
1007	arr[num++] = 0x8;
1008	arr[num++] = 0x52;	/* naa-5, company id=0x222222 (fake) */
1009	arr[num++] = 0x22;
1010	arr[num++] = 0x22;
1011	arr[num++] = 0x20;
1012	arr[num++] = (target_dev_id >> 24);
1013	arr[num++] = (target_dev_id >> 16) & 0xff;
1014	arr[num++] = (target_dev_id >> 8) & 0xff;
1015	arr[num++] = target_dev_id & 0xff;
1016	/* SCSI name string: Target device identifier */
1017	arr[num++] = 0x63;	/* proto=sas, UTF-8 */
1018	arr[num++] = 0xa8;	/* piv=1, target device, SCSI name string */
1019	arr[num++] = 0x0;
1020	arr[num++] = 24;
1021	memcpy(arr + num, "naa.52222220", 12);
1022	num += 12;
1023	snprintf(b, sizeof(b), "%08X", target_dev_id);
1024	memcpy(arr + num, b, 8);
1025	num += 8;
1026	memset(arr + num, 0, 4);
1027	num += 4;
1028	return num;
1029}
1030
1031
1032static unsigned char vpd84_data[] = {
1033/* from 4th byte */ 0x22,0x22,0x22,0x0,0xbb,0x0,
1034    0x22,0x22,0x22,0x0,0xbb,0x1,
1035    0x22,0x22,0x22,0x0,0xbb,0x2,
1036};
1037
1038/*  Software interface identification VPD page */
1039static int inquiry_evpd_84(unsigned char * arr)
1040{
1041	memcpy(arr, vpd84_data, sizeof(vpd84_data));
1042	return sizeof(vpd84_data);
1043}
1044
1045/* Management network addresses VPD page */
1046static int inquiry_evpd_85(unsigned char * arr)
1047{
1048	int num = 0;
1049	const char * na1 = "https://www.kernel.org/config";
1050	const char * na2 = "http://www.kernel.org/log";
1051	int plen, olen;
1052
1053	arr[num++] = 0x1;	/* lu, storage config */
1054	arr[num++] = 0x0;	/* reserved */
1055	arr[num++] = 0x0;
1056	olen = strlen(na1);
1057	plen = olen + 1;
1058	if (plen % 4)
1059		plen = ((plen / 4) + 1) * 4;
1060	arr[num++] = plen;	/* length, null termianted, padded */
1061	memcpy(arr + num, na1, olen);
1062	memset(arr + num + olen, 0, plen - olen);
1063	num += plen;
1064
1065	arr[num++] = 0x4;	/* lu, logging */
1066	arr[num++] = 0x0;	/* reserved */
1067	arr[num++] = 0x0;
1068	olen = strlen(na2);
1069	plen = olen + 1;
1070	if (plen % 4)
1071		plen = ((plen / 4) + 1) * 4;
1072	arr[num++] = plen;	/* length, null terminated, padded */
1073	memcpy(arr + num, na2, olen);
1074	memset(arr + num + olen, 0, plen - olen);
1075	num += plen;
1076
1077	return num;
1078}
1079
1080/* SCSI ports VPD page */
1081static int inquiry_evpd_88(unsigned char * arr, int target_dev_id)
1082{
1083	int num = 0;
1084	int port_a, port_b;
1085
1086	port_a = target_dev_id + 1;
1087	port_b = port_a + 1;
1088	arr[num++] = 0x0;	/* reserved */
1089	arr[num++] = 0x0;	/* reserved */
1090	arr[num++] = 0x0;
1091	arr[num++] = 0x1;	/* relative port 1 (primary) */
1092	memset(arr + num, 0, 6);
1093	num += 6;
1094	arr[num++] = 0x0;
1095	arr[num++] = 12;	/* length tp descriptor */
1096	/* naa-5 target port identifier (A) */
1097	arr[num++] = 0x61;	/* proto=sas, binary */
1098	arr[num++] = 0x93;	/* PIV=1, target port, NAA */
1099	arr[num++] = 0x0;	/* reserved */
1100	arr[num++] = 0x8;	/* length */
1101	arr[num++] = 0x52;	/* NAA-5, company_id=0x222222 (fake) */
1102	arr[num++] = 0x22;
1103	arr[num++] = 0x22;
1104	arr[num++] = 0x20;
1105	arr[num++] = (port_a >> 24);
1106	arr[num++] = (port_a >> 16) & 0xff;
1107	arr[num++] = (port_a >> 8) & 0xff;
1108	arr[num++] = port_a & 0xff;
1109
1110	arr[num++] = 0x0;	/* reserved */
1111	arr[num++] = 0x0;	/* reserved */
1112	arr[num++] = 0x0;
1113	arr[num++] = 0x2;	/* relative port 2 (secondary) */
1114	memset(arr + num, 0, 6);
1115	num += 6;
1116	arr[num++] = 0x0;
1117	arr[num++] = 12;	/* length tp descriptor */
1118	/* naa-5 target port identifier (B) */
1119	arr[num++] = 0x61;	/* proto=sas, binary */
1120	arr[num++] = 0x93;	/* PIV=1, target port, NAA */
1121	arr[num++] = 0x0;	/* reserved */
1122	arr[num++] = 0x8;	/* length */
1123	arr[num++] = 0x52;	/* NAA-5, company_id=0x222222 (fake) */
1124	arr[num++] = 0x22;
1125	arr[num++] = 0x22;
1126	arr[num++] = 0x20;
1127	arr[num++] = (port_b >> 24);
1128	arr[num++] = (port_b >> 16) & 0xff;
1129	arr[num++] = (port_b >> 8) & 0xff;
1130	arr[num++] = port_b & 0xff;
1131
1132	return num;
1133}
1134
1135
1136static unsigned char vpd89_data[] = {
1137/* from 4th byte */ 0,0,0,0,
1138'l','i','n','u','x',' ',' ',' ',
1139'S','A','T',' ','s','c','s','i','_','d','e','b','u','g',' ',' ',
1140'1','2','3','4',
11410x34,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,
11420xec,0,0,0,
11430x5a,0xc,0xff,0x3f,0x37,0xc8,0x10,0,0,0,0,0,0x3f,0,0,0,
11440,0,0,0,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x58,0x20,0x20,0x20,0x20,
11450x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0,0,0,0x40,0x4,0,0x2e,0x33,
11460x38,0x31,0x20,0x20,0x20,0x20,0x54,0x53,0x38,0x33,0x30,0x30,0x33,0x31,
11470x53,0x41,
11480x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
11490x20,0x20,
11500x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,
11510x10,0x80,
11520,0,0,0x2f,0,0,0,0x2,0,0x2,0x7,0,0xff,0xff,0x1,0,
11530x3f,0,0xc1,0xff,0x3e,0,0x10,0x1,0xb0,0xf8,0x50,0x9,0,0,0x7,0,
11540x3,0,0x78,0,0x78,0,0xf0,0,0x78,0,0,0,0,0,0,0,
11550,0,0,0,0,0,0,0,0x2,0,0,0,0,0,0,0,
11560x7e,0,0x1b,0,0x6b,0x34,0x1,0x7d,0x3,0x40,0x69,0x34,0x1,0x3c,0x3,0x40,
11570x7f,0x40,0,0,0,0,0xfe,0xfe,0,0,0,0,0,0xfe,0,0,
11580,0,0,0,0,0,0,0,0xb0,0xf8,0x50,0x9,0,0,0,0,
11590,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
11600,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
11610,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
11620x1,0,0xb0,0xf8,0x50,0x9,0xb0,0xf8,0x50,0x9,0x20,0x20,0x2,0,0xb6,0x42,
11630,0x80,0x8a,0,0x6,0x3c,0xa,0x3c,0xff,0xff,0xc6,0x7,0,0x1,0,0x8,
11640xf0,0xf,0,0x10,0x2,0,0x30,0,0,0,0,0,0,0,0x6,0xfe,
11650,0,0x2,0,0x50,0,0x8a,0,0x4f,0x95,0,0,0x21,0,0xb,0,
11660,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
11670,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
11680,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
11690,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
11700,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
11710,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
11720,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
11730,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
11740,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
11750,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
11760,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
11770,0,0,0,0,0,0,0,0,0,0,0,0,0,0xa5,0x51,
1178};
1179
1180/* ATA Information VPD page */
1181static int inquiry_evpd_89(unsigned char * arr)
1182{
1183	memcpy(arr, vpd89_data, sizeof(vpd89_data));
1184	return sizeof(vpd89_data);
1185}
1186
1187
1188static unsigned char vpdb0_data[] = {
1189	/* from 4th byte */ 0,0,0,4, 0,0,0x4,0, 0,0,0,64,
1190	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1191	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1192	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1193};
1194
1195/* Block limits VPD page (SBC-3) */
1196static int inquiry_evpd_b0(unsigned char * arr)
1197{
1198	unsigned int gran;
1199
1200	memcpy(arr, vpdb0_data, sizeof(vpdb0_data));
1201
1202	/* Optimal transfer length granularity */
1203	gran = 1 << scsi_debug_physblk_exp;
1204	arr[2] = (gran >> 8) & 0xff;
1205	arr[3] = gran & 0xff;
1206
1207	/* Maximum Transfer Length */
1208	if (sdebug_store_sectors > 0x400) {
1209		arr[4] = (sdebug_store_sectors >> 24) & 0xff;
1210		arr[5] = (sdebug_store_sectors >> 16) & 0xff;
1211		arr[6] = (sdebug_store_sectors >> 8) & 0xff;
1212		arr[7] = sdebug_store_sectors & 0xff;
1213	}
1214
1215	/* Optimal Transfer Length */
1216	put_unaligned_be32(scsi_debug_opt_blks, &arr[8]);
1217
1218	if (scsi_debug_lbpu) {
1219		/* Maximum Unmap LBA Count */
1220		put_unaligned_be32(scsi_debug_unmap_max_blocks, &arr[16]);
1221
1222		/* Maximum Unmap Block Descriptor Count */
1223		put_unaligned_be32(scsi_debug_unmap_max_desc, &arr[20]);
1224	}
1225
1226	/* Unmap Granularity Alignment */
1227	if (scsi_debug_unmap_alignment) {
1228		put_unaligned_be32(scsi_debug_unmap_alignment, &arr[28]);
1229		arr[28] |= 0x80; /* UGAVALID */
1230	}
1231
1232	/* Optimal Unmap Granularity */
1233	put_unaligned_be32(scsi_debug_unmap_granularity, &arr[24]);
1234
1235	/* Maximum WRITE SAME Length */
1236	put_unaligned_be64(scsi_debug_write_same_length, &arr[32]);
1237
1238	return 0x3c; /* Mandatory page length for Logical Block Provisioning */
1239
1240	return sizeof(vpdb0_data);
1241}
1242
1243/* Block device characteristics VPD page (SBC-3) */
1244static int inquiry_evpd_b1(unsigned char *arr)
1245{
1246	memset(arr, 0, 0x3c);
1247	arr[0] = 0;
1248	arr[1] = 1;	/* non rotating medium (e.g. solid state) */
1249	arr[2] = 0;
1250	arr[3] = 5;	/* less than 1.8" */
1251
1252	return 0x3c;
1253}
1254
1255/* Logical block provisioning VPD page (SBC-3) */
1256static int inquiry_evpd_b2(unsigned char *arr)
1257{
1258	memset(arr, 0, 0x4);
1259	arr[0] = 0;			/* threshold exponent */
1260
1261	if (scsi_debug_lbpu)
1262		arr[1] = 1 << 7;
1263
1264	if (scsi_debug_lbpws)
1265		arr[1] |= 1 << 6;
1266
1267	if (scsi_debug_lbpws10)
1268		arr[1] |= 1 << 5;
1269
1270	if (scsi_debug_lbprz)
1271		arr[1] |= 1 << 2;
1272
1273	return 0x4;
1274}
1275
1276#define SDEBUG_LONG_INQ_SZ 96
1277#define SDEBUG_MAX_INQ_ARR_SZ 584
1278
1279static int resp_inquiry(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
1280{
1281	unsigned char pq_pdt;
1282	unsigned char * arr;
1283	unsigned char *cmd = scp->cmnd;
1284	int alloc_len, n, ret;
1285	bool have_wlun;
1286
1287	alloc_len = (cmd[3] << 8) + cmd[4];
1288	arr = kzalloc(SDEBUG_MAX_INQ_ARR_SZ, GFP_ATOMIC);
1289	if (! arr)
1290		return DID_REQUEUE << 16;
1291	have_wlun = (scp->device->lun == SAM2_WLUN_REPORT_LUNS);
1292	if (have_wlun)
1293		pq_pdt = 0x1e;	/* present, wlun */
1294	else if (scsi_debug_no_lun_0 && (0 == devip->lun))
1295		pq_pdt = 0x7f;	/* not present, no device type */
1296	else
1297		pq_pdt = (scsi_debug_ptype & 0x1f);
1298	arr[0] = pq_pdt;
1299	if (0x2 & cmd[1]) {  /* CMDDT bit set */
1300		mk_sense_invalid_fld(scp, SDEB_IN_CDB, 1, 1);
1301		kfree(arr);
1302		return check_condition_result;
1303	} else if (0x1 & cmd[1]) {  /* EVPD bit set */
1304		int lu_id_num, port_group_id, target_dev_id, len;
1305		char lu_id_str[6];
1306		int host_no = devip->sdbg_host->shost->host_no;
1307
1308		port_group_id = (((host_no + 1) & 0x7f) << 8) +
1309		    (devip->channel & 0x7f);
1310		if (0 == scsi_debug_vpd_use_hostno)
1311			host_no = 0;
1312		lu_id_num = have_wlun ? -1 : (((host_no + 1) * 2000) +
1313			    (devip->target * 1000) + devip->lun);
1314		target_dev_id = ((host_no + 1) * 2000) +
1315				 (devip->target * 1000) - 3;
1316		len = scnprintf(lu_id_str, 6, "%d", lu_id_num);
1317		if (0 == cmd[2]) { /* supported vital product data pages */
1318			arr[1] = cmd[2];	/*sanity */
1319			n = 4;
1320			arr[n++] = 0x0;   /* this page */
1321			arr[n++] = 0x80;  /* unit serial number */
1322			arr[n++] = 0x83;  /* device identification */
1323			arr[n++] = 0x84;  /* software interface ident. */
1324			arr[n++] = 0x85;  /* management network addresses */
1325			arr[n++] = 0x86;  /* extended inquiry */
1326			arr[n++] = 0x87;  /* mode page policy */
1327			arr[n++] = 0x88;  /* SCSI ports */
1328			arr[n++] = 0x89;  /* ATA information */
1329			arr[n++] = 0xb0;  /* Block limits (SBC) */
1330			arr[n++] = 0xb1;  /* Block characteristics (SBC) */
1331			if (scsi_debug_lbp()) /* Logical Block Prov. (SBC) */
1332				arr[n++] = 0xb2;
1333			arr[3] = n - 4;	  /* number of supported VPD pages */
1334		} else if (0x80 == cmd[2]) { /* unit serial number */
1335			arr[1] = cmd[2];	/*sanity */
1336			arr[3] = len;
1337			memcpy(&arr[4], lu_id_str, len);
1338		} else if (0x83 == cmd[2]) { /* device identification */
1339			arr[1] = cmd[2];	/*sanity */
1340			arr[3] = inquiry_evpd_83(&arr[4], port_group_id,
1341						 target_dev_id, lu_id_num,
1342						 lu_id_str, len);
1343		} else if (0x84 == cmd[2]) { /* Software interface ident. */
1344			arr[1] = cmd[2];	/*sanity */
1345			arr[3] = inquiry_evpd_84(&arr[4]);
1346		} else if (0x85 == cmd[2]) { /* Management network addresses */
1347			arr[1] = cmd[2];	/*sanity */
1348			arr[3] = inquiry_evpd_85(&arr[4]);
1349		} else if (0x86 == cmd[2]) { /* extended inquiry */
1350			arr[1] = cmd[2];	/*sanity */
1351			arr[3] = 0x3c;	/* number of following entries */
1352			if (scsi_debug_dif == SD_DIF_TYPE3_PROTECTION)
1353				arr[4] = 0x4;	/* SPT: GRD_CHK:1 */
1354			else if (scsi_debug_dif)
1355				arr[4] = 0x5;   /* SPT: GRD_CHK:1, REF_CHK:1 */
1356			else
1357				arr[4] = 0x0;   /* no protection stuff */
1358			arr[5] = 0x7;   /* head of q, ordered + simple q's */
1359		} else if (0x87 == cmd[2]) { /* mode page policy */
1360			arr[1] = cmd[2];	/*sanity */
1361			arr[3] = 0x8;	/* number of following entries */
1362			arr[4] = 0x2;	/* disconnect-reconnect mp */
1363			arr[6] = 0x80;	/* mlus, shared */
1364			arr[8] = 0x18;	 /* protocol specific lu */
1365			arr[10] = 0x82;	 /* mlus, per initiator port */
1366		} else if (0x88 == cmd[2]) { /* SCSI Ports */
1367			arr[1] = cmd[2];	/*sanity */
1368			arr[3] = inquiry_evpd_88(&arr[4], target_dev_id);
1369		} else if (0x89 == cmd[2]) { /* ATA information */
1370			arr[1] = cmd[2];        /*sanity */
1371			n = inquiry_evpd_89(&arr[4]);
1372			arr[2] = (n >> 8);
1373			arr[3] = (n & 0xff);
1374		} else if (0xb0 == cmd[2]) { /* Block limits (SBC) */
1375			arr[1] = cmd[2];        /*sanity */
1376			arr[3] = inquiry_evpd_b0(&arr[4]);
1377		} else if (0xb1 == cmd[2]) { /* Block characteristics (SBC) */
1378			arr[1] = cmd[2];        /*sanity */
1379			arr[3] = inquiry_evpd_b1(&arr[4]);
1380		} else if (0xb2 == cmd[2]) { /* Logical Block Prov. (SBC) */
1381			arr[1] = cmd[2];        /*sanity */
1382			arr[3] = inquiry_evpd_b2(&arr[4]);
1383		} else {
1384			mk_sense_invalid_fld(scp, SDEB_IN_CDB, 2, -1);
1385			kfree(arr);
1386			return check_condition_result;
1387		}
1388		len = min(((arr[2] << 8) + arr[3]) + 4, alloc_len);
1389		ret = fill_from_dev_buffer(scp, arr,
1390			    min(len, SDEBUG_MAX_INQ_ARR_SZ));
1391		kfree(arr);
1392		return ret;
1393	}
1394	/* drops through here for a standard inquiry */
1395	arr[1] = scsi_debug_removable ? 0x80 : 0;	/* Removable disk */
1396	arr[2] = scsi_debug_scsi_level;
1397	arr[3] = 2;    /* response_data_format==2 */
1398	arr[4] = SDEBUG_LONG_INQ_SZ - 5;
1399	arr[5] = scsi_debug_dif ? 1 : 0; /* PROTECT bit */
1400	if (0 == scsi_debug_vpd_use_hostno)
1401		arr[5] = 0x10; /* claim: implicit TGPS */
1402	arr[6] = 0x10; /* claim: MultiP */
1403	/* arr[6] |= 0x40; ... claim: EncServ (enclosure services) */
1404	arr[7] = 0xa; /* claim: LINKED + CMDQUE */
1405	memcpy(&arr[8], inq_vendor_id, 8);
1406	memcpy(&arr[16], inq_product_id, 16);
1407	memcpy(&arr[32], inq_product_rev, 4);
1408	/* version descriptors (2 bytes each) follow */
1409	arr[58] = 0x0; arr[59] = 0xa2;  /* SAM-5 rev 4 */
1410	arr[60] = 0x4; arr[61] = 0x68;  /* SPC-4 rev 37 */
1411	n = 62;
1412	if (scsi_debug_ptype == 0) {
1413		arr[n++] = 0x4; arr[n++] = 0xc5; /* SBC-4 rev 36 */
1414	} else if (scsi_debug_ptype == 1) {
1415		arr[n++] = 0x5; arr[n++] = 0x25; /* SSC-4 rev 3 */
1416	}
1417	arr[n++] = 0x20; arr[n++] = 0xe6;  /* SPL-3 rev 7 */
1418	ret = fill_from_dev_buffer(scp, arr,
1419			    min(alloc_len, SDEBUG_LONG_INQ_SZ));
1420	kfree(arr);
1421	return ret;
1422}
1423
1424static int resp_requests(struct scsi_cmnd * scp,
1425			 struct sdebug_dev_info * devip)
1426{
1427	unsigned char * sbuff;
1428	unsigned char *cmd = scp->cmnd;
1429	unsigned char arr[SCSI_SENSE_BUFFERSIZE];
1430	bool dsense, want_dsense;
1431	int len = 18;
1432
1433	memset(arr, 0, sizeof(arr));
1434	dsense = !!(cmd[1] & 1);
1435	want_dsense = dsense || scsi_debug_dsense;
1436	sbuff = scp->sense_buffer;
1437	if ((iec_m_pg[2] & 0x4) && (6 == (iec_m_pg[3] & 0xf))) {
1438		if (dsense) {
1439			arr[0] = 0x72;
1440			arr[1] = 0x0;		/* NO_SENSE in sense_key */
1441			arr[2] = THRESHOLD_EXCEEDED;
1442			arr[3] = 0xff;		/* TEST set and MRIE==6 */
1443			len = 8;
1444		} else {
1445			arr[0] = 0x70;
1446			arr[2] = 0x0;		/* NO_SENSE in sense_key */
1447			arr[7] = 0xa;   	/* 18 byte sense buffer */
1448			arr[12] = THRESHOLD_EXCEEDED;
1449			arr[13] = 0xff;		/* TEST set and MRIE==6 */
1450		}
1451	} else {
1452		memcpy(arr, sbuff, SCSI_SENSE_BUFFERSIZE);
1453		if (arr[0] >= 0x70 && dsense == scsi_debug_dsense)
1454			;	/* have sense and formats match */
1455		else if (arr[0] <= 0x70) {
1456			if (dsense) {
1457				memset(arr, 0, 8);
1458				arr[0] = 0x72;
1459				len = 8;
1460			} else {
1461				memset(arr, 0, 18);
1462				arr[0] = 0x70;
1463				arr[7] = 0xa;
1464			}
1465		} else if (dsense) {
1466			memset(arr, 0, 8);
1467			arr[0] = 0x72;
1468			arr[1] = sbuff[2];     /* sense key */
1469			arr[2] = sbuff[12];    /* asc */
1470			arr[3] = sbuff[13];    /* ascq */
1471			len = 8;
1472		} else {
1473			memset(arr, 0, 18);
1474			arr[0] = 0x70;
1475			arr[2] = sbuff[1];
1476			arr[7] = 0xa;
1477			arr[12] = sbuff[1];
1478			arr[13] = sbuff[3];
1479		}
1480
1481	}
1482	mk_sense_buffer(scp, 0, NO_ADDITIONAL_SENSE, 0);
1483	return fill_from_dev_buffer(scp, arr, len);
1484}
1485
1486static int resp_start_stop(struct scsi_cmnd * scp,
1487			   struct sdebug_dev_info * devip)
1488{
1489	unsigned char *cmd = scp->cmnd;
1490	int power_cond, start;
1491
1492	power_cond = (cmd[4] & 0xf0) >> 4;
1493	if (power_cond) {
1494		mk_sense_invalid_fld(scp, SDEB_IN_CDB, 4, 7);
1495		return check_condition_result;
1496	}
1497	start = cmd[4] & 1;
1498	if (start == devip->stopped)
1499		devip->stopped = !start;
1500	return 0;
1501}
1502
1503static sector_t get_sdebug_capacity(void)
1504{
1505	if (scsi_debug_virtual_gb > 0)
1506		return (sector_t)scsi_debug_virtual_gb *
1507			(1073741824 / scsi_debug_sector_size);
1508	else
1509		return sdebug_store_sectors;
1510}
1511
1512#define SDEBUG_READCAP_ARR_SZ 8
1513static int resp_readcap(struct scsi_cmnd * scp,
1514			struct sdebug_dev_info * devip)
1515{
1516	unsigned char arr[SDEBUG_READCAP_ARR_SZ];
1517	unsigned int capac;
1518
1519	/* following just in case virtual_gb changed */
1520	sdebug_capacity = get_sdebug_capacity();
1521	memset(arr, 0, SDEBUG_READCAP_ARR_SZ);
1522	if (sdebug_capacity < 0xffffffff) {
1523		capac = (unsigned int)sdebug_capacity - 1;
1524		arr[0] = (capac >> 24);
1525		arr[1] = (capac >> 16) & 0xff;
1526		arr[2] = (capac >> 8) & 0xff;
1527		arr[3] = capac & 0xff;
1528	} else {
1529		arr[0] = 0xff;
1530		arr[1] = 0xff;
1531		arr[2] = 0xff;
1532		arr[3] = 0xff;
1533	}
1534	arr[6] = (scsi_debug_sector_size >> 8) & 0xff;
1535	arr[7] = scsi_debug_sector_size & 0xff;
1536	return fill_from_dev_buffer(scp, arr, SDEBUG_READCAP_ARR_SZ);
1537}
1538
1539#define SDEBUG_READCAP16_ARR_SZ 32
1540static int resp_readcap16(struct scsi_cmnd * scp,
1541			  struct sdebug_dev_info * devip)
1542{
1543	unsigned char *cmd = scp->cmnd;
1544	unsigned char arr[SDEBUG_READCAP16_ARR_SZ];
1545	unsigned long long capac;
1546	int k, alloc_len;
1547
1548	alloc_len = ((cmd[10] << 24) + (cmd[11] << 16) + (cmd[12] << 8)
1549		     + cmd[13]);
1550	/* following just in case virtual_gb changed */
1551	sdebug_capacity = get_sdebug_capacity();
1552	memset(arr, 0, SDEBUG_READCAP16_ARR_SZ);
1553	capac = sdebug_capacity - 1;
1554	for (k = 0; k < 8; ++k, capac >>= 8)
1555		arr[7 - k] = capac & 0xff;
1556	arr[8] = (scsi_debug_sector_size >> 24) & 0xff;
1557	arr[9] = (scsi_debug_sector_size >> 16) & 0xff;
1558	arr[10] = (scsi_debug_sector_size >> 8) & 0xff;
1559	arr[11] = scsi_debug_sector_size & 0xff;
1560	arr[13] = scsi_debug_physblk_exp & 0xf;
1561	arr[14] = (scsi_debug_lowest_aligned >> 8) & 0x3f;
1562
1563	if (scsi_debug_lbp()) {
1564		arr[14] |= 0x80; /* LBPME */
1565		if (scsi_debug_lbprz)
1566			arr[14] |= 0x40; /* LBPRZ */
1567	}
1568
1569	arr[15] = scsi_debug_lowest_aligned & 0xff;
1570
1571	if (scsi_debug_dif) {
1572		arr[12] = (scsi_debug_dif - 1) << 1; /* P_TYPE */
1573		arr[12] |= 1; /* PROT_EN */
1574	}
1575
1576	return fill_from_dev_buffer(scp, arr,
1577				    min(alloc_len, SDEBUG_READCAP16_ARR_SZ));
1578}
1579
1580#define SDEBUG_MAX_TGTPGS_ARR_SZ 1412
1581
1582static int resp_report_tgtpgs(struct scsi_cmnd * scp,
1583			      struct sdebug_dev_info * devip)
1584{
1585	unsigned char *cmd = scp->cmnd;
1586	unsigned char * arr;
1587	int host_no = devip->sdbg_host->shost->host_no;
1588	int n, ret, alen, rlen;
1589	int port_group_a, port_group_b, port_a, port_b;
1590
1591	alen = ((cmd[6] << 24) + (cmd[7] << 16) + (cmd[8] << 8)
1592		+ cmd[9]);
1593
1594	arr = kzalloc(SDEBUG_MAX_TGTPGS_ARR_SZ, GFP_ATOMIC);
1595	if (! arr)
1596		return DID_REQUEUE << 16;
1597	/*
1598	 * EVPD page 0x88 states we have two ports, one
1599	 * real and a fake port with no device connected.
1600	 * So we create two port groups with one port each
1601	 * and set the group with port B to unavailable.
1602	 */
1603	port_a = 0x1; /* relative port A */
1604	port_b = 0x2; /* relative port B */
1605	port_group_a = (((host_no + 1) & 0x7f) << 8) +
1606	    (devip->channel & 0x7f);
1607	port_group_b = (((host_no + 1) & 0x7f) << 8) +
1608	    (devip->channel & 0x7f) + 0x80;
1609
1610	/*
1611	 * The asymmetric access state is cycled according to the host_id.
1612	 */
1613	n = 4;
1614	if (0 == scsi_debug_vpd_use_hostno) {
1615	    arr[n++] = host_no % 3; /* Asymm access state */
1616	    arr[n++] = 0x0F; /* claim: all states are supported */
1617	} else {
1618	    arr[n++] = 0x0; /* Active/Optimized path */
1619	    arr[n++] = 0x01; /* claim: only support active/optimized paths */
1620	}
1621	arr[n++] = (port_group_a >> 8) & 0xff;
1622	arr[n++] = port_group_a & 0xff;
1623	arr[n++] = 0;    /* Reserved */
1624	arr[n++] = 0;    /* Status code */
1625	arr[n++] = 0;    /* Vendor unique */
1626	arr[n++] = 0x1;  /* One port per group */
1627	arr[n++] = 0;    /* Reserved */
1628	arr[n++] = 0;    /* Reserved */
1629	arr[n++] = (port_a >> 8) & 0xff;
1630	arr[n++] = port_a & 0xff;
1631	arr[n++] = 3;    /* Port unavailable */
1632	arr[n++] = 0x08; /* claim: only unavailalbe paths are supported */
1633	arr[n++] = (port_group_b >> 8) & 0xff;
1634	arr[n++] = port_group_b & 0xff;
1635	arr[n++] = 0;    /* Reserved */
1636	arr[n++] = 0;    /* Status code */
1637	arr[n++] = 0;    /* Vendor unique */
1638	arr[n++] = 0x1;  /* One port per group */
1639	arr[n++] = 0;    /* Reserved */
1640	arr[n++] = 0;    /* Reserved */
1641	arr[n++] = (port_b >> 8) & 0xff;
1642	arr[n++] = port_b & 0xff;
1643
1644	rlen = n - 4;
1645	arr[0] = (rlen >> 24) & 0xff;
1646	arr[1] = (rlen >> 16) & 0xff;
1647	arr[2] = (rlen >> 8) & 0xff;
1648	arr[3] = rlen & 0xff;
1649
1650	/*
1651	 * Return the smallest value of either
1652	 * - The allocated length
1653	 * - The constructed command length
1654	 * - The maximum array size
1655	 */
1656	rlen = min(alen,n);
1657	ret = fill_from_dev_buffer(scp, arr,
1658				   min(rlen, SDEBUG_MAX_TGTPGS_ARR_SZ));
1659	kfree(arr);
1660	return ret;
1661}
1662
1663static int
1664resp_rsup_opcodes(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
1665{
1666	bool rctd;
1667	u8 reporting_opts, req_opcode, sdeb_i, supp;
1668	u16 req_sa, u;
1669	u32 alloc_len, a_len;
1670	int k, offset, len, errsts, count, bump, na;
1671	const struct opcode_info_t *oip;
1672	const struct opcode_info_t *r_oip;
1673	u8 *arr;
1674	u8 *cmd = scp->cmnd;
1675
1676	rctd = !!(cmd[2] & 0x80);
1677	reporting_opts = cmd[2] & 0x7;
1678	req_opcode = cmd[3];
1679	req_sa = get_unaligned_be16(cmd + 4);
1680	alloc_len = get_unaligned_be32(cmd + 6);
1681	if (alloc_len < 4 || alloc_len > 0xffff) {
1682		mk_sense_invalid_fld(scp, SDEB_IN_CDB, 6, -1);
1683		return check_condition_result;
1684	}
1685	if (alloc_len > 8192)
1686		a_len = 8192;
1687	else
1688		a_len = alloc_len;
1689	arr = kzalloc((a_len < 256) ? 320 : a_len + 64, GFP_ATOMIC);
1690	if (NULL == arr) {
1691		mk_sense_buffer(scp, ILLEGAL_REQUEST, INSUFF_RES_ASC,
1692				INSUFF_RES_ASCQ);
1693		return check_condition_result;
1694	}
1695	switch (reporting_opts) {
1696	case 0:	/* all commands */
1697		/* count number of commands */
1698		for (count = 0, oip = opcode_info_arr;
1699		     oip->num_attached != 0xff; ++oip) {
1700			if (F_INV_OP & oip->flags)
1701				continue;
1702			count += (oip->num_attached + 1);
1703		}
1704		bump = rctd ? 20 : 8;
1705		put_unaligned_be32(count * bump, arr);
1706		for (offset = 4, oip = opcode_info_arr;
1707		     oip->num_attached != 0xff && offset < a_len; ++oip) {
1708			if (F_INV_OP & oip->flags)
1709				continue;
1710			na = oip->num_attached;
1711			arr[offset] = oip->opcode;
1712			put_unaligned_be16(oip->sa, arr + offset + 2);
1713			if (rctd)
1714				arr[offset + 5] |= 0x2;
1715			if (FF_SA & oip->flags)
1716				arr[offset + 5] |= 0x1;
1717			put_unaligned_be16(oip->len_mask[0], arr + offset + 6);
1718			if (rctd)
1719				put_unaligned_be16(0xa, arr + offset + 8);
1720			r_oip = oip;
1721			for (k = 0, oip = oip->arrp; k < na; ++k, ++oip) {
1722				if (F_INV_OP & oip->flags)
1723					continue;
1724				offset += bump;
1725				arr[offset] = oip->opcode;
1726				put_unaligned_be16(oip->sa, arr + offset + 2);
1727				if (rctd)
1728					arr[offset + 5] |= 0x2;
1729				if (FF_SA & oip->flags)
1730					arr[offset + 5] |= 0x1;
1731				put_unaligned_be16(oip->len_mask[0],
1732						   arr + offset + 6);
1733				if (rctd)
1734					put_unaligned_be16(0xa,
1735							   arr + offset + 8);
1736			}
1737			oip = r_oip;
1738			offset += bump;
1739		}
1740		break;
1741	case 1:	/* one command: opcode only */
1742	case 2:	/* one command: opcode plus service action */
1743	case 3:	/* one command: if sa==0 then opcode only else opcode+sa */
1744		sdeb_i = opcode_ind_arr[req_opcode];
1745		oip = &opcode_info_arr[sdeb_i];
1746		if (F_INV_OP & oip->flags) {
1747			supp = 1;
1748			offset = 4;
1749		} else {
1750			if (1 == reporting_opts) {
1751				if (FF_SA & oip->flags) {
1752					mk_sense_invalid_fld(scp, SDEB_IN_CDB,
1753							     2, 2);
1754					kfree(arr);
1755					return check_condition_result;
1756				}
1757				req_sa = 0;
1758			} else if (2 == reporting_opts &&
1759				   0 == (FF_SA & oip->flags)) {
1760				mk_sense_invalid_fld(scp, SDEB_IN_CDB, 4, -1);
1761				kfree(arr);	/* point at requested sa */
1762				return check_condition_result;
1763			}
1764			if (0 == (FF_SA & oip->flags) &&
1765			    req_opcode == oip->opcode)
1766				supp = 3;
1767			else if (0 == (FF_SA & oip->flags)) {
1768				na = oip->num_attached;
1769				for (k = 0, oip = oip->arrp; k < na;
1770				     ++k, ++oip) {
1771					if (req_opcode == oip->opcode)
1772						break;
1773				}
1774				supp = (k >= na) ? 1 : 3;
1775			} else if (req_sa != oip->sa) {
1776				na = oip->num_attached;
1777				for (k = 0, oip = oip->arrp; k < na;
1778				     ++k, ++oip) {
1779					if (req_sa == oip->sa)
1780						break;
1781				}
1782				supp = (k >= na) ? 1 : 3;
1783			} else
1784				supp = 3;
1785			if (3 == supp) {
1786				u = oip->len_mask[0];
1787				put_unaligned_be16(u, arr + 2);
1788				arr[4] = oip->opcode;
1789				for (k = 1; k < u; ++k)
1790					arr[4 + k] = (k < 16) ?
1791						 oip->len_mask[k] : 0xff;
1792				offset = 4 + u;
1793			} else
1794				offset = 4;
1795		}
1796		arr[1] = (rctd ? 0x80 : 0) | supp;
1797		if (rctd) {
1798			put_unaligned_be16(0xa, arr + offset);
1799			offset += 12;
1800		}
1801		break;
1802	default:
1803		mk_sense_invalid_fld(scp, SDEB_IN_CDB, 2, 2);
1804		kfree(arr);
1805		return check_condition_result;
1806	}
1807	offset = (offset < a_len) ? offset : a_len;
1808	len = (offset < alloc_len) ? offset : alloc_len;
1809	errsts = fill_from_dev_buffer(scp, arr, len);
1810	kfree(arr);
1811	return errsts;
1812}
1813
1814static int
1815resp_rsup_tmfs(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
1816{
1817	bool repd;
1818	u32 alloc_len, len;
1819	u8 arr[16];
1820	u8 *cmd = scp->cmnd;
1821
1822	memset(arr, 0, sizeof(arr));
1823	repd = !!(cmd[2] & 0x80);
1824	alloc_len = get_unaligned_be32(cmd + 6);
1825	if (alloc_len < 4) {
1826		mk_sense_invalid_fld(scp, SDEB_IN_CDB, 6, -1);
1827		return check_condition_result;
1828	}
1829	arr[0] = 0xc8;		/* ATS | ATSS | LURS */
1830	arr[1] = 0x1;		/* ITNRS */
1831	if (repd) {
1832		arr[3] = 0xc;
1833		len = 16;
1834	} else
1835		len = 4;
1836
1837	len = (len < alloc_len) ? len : alloc_len;
1838	return fill_from_dev_buffer(scp, arr, len);
1839}
1840
1841/* <<Following mode page info copied from ST318451LW>> */
1842
1843static int resp_err_recov_pg(unsigned char * p, int pcontrol, int target)
1844{	/* Read-Write Error Recovery page for mode_sense */
1845	unsigned char err_recov_pg[] = {0x1, 0xa, 0xc0, 11, 240, 0, 0, 0,
1846					5, 0, 0xff, 0xff};
1847
1848	memcpy(p, err_recov_pg, sizeof(err_recov_pg));
1849	if (1 == pcontrol)
1850		memset(p + 2, 0, sizeof(err_recov_pg) - 2);
1851	return sizeof(err_recov_pg);
1852}
1853
1854static int resp_disconnect_pg(unsigned char * p, int pcontrol, int target)
1855{ 	/* Disconnect-Reconnect page for mode_sense */
1856	unsigned char disconnect_pg[] = {0x2, 0xe, 128, 128, 0, 10, 0, 0,
1857					 0, 0, 0, 0, 0, 0, 0, 0};
1858
1859	memcpy(p, disconnect_pg, sizeof(disconnect_pg));
1860	if (1 == pcontrol)
1861		memset(p + 2, 0, sizeof(disconnect_pg) - 2);
1862	return sizeof(disconnect_pg);
1863}
1864
1865static int resp_format_pg(unsigned char * p, int pcontrol, int target)
1866{       /* Format device page for mode_sense */
1867	unsigned char format_pg[] = {0x3, 0x16, 0, 0, 0, 0, 0, 0,
1868				     0, 0, 0, 0, 0, 0, 0, 0,
1869				     0, 0, 0, 0, 0x40, 0, 0, 0};
1870
1871	memcpy(p, format_pg, sizeof(format_pg));
1872	p[10] = (sdebug_sectors_per >> 8) & 0xff;
1873	p[11] = sdebug_sectors_per & 0xff;
1874	p[12] = (scsi_debug_sector_size >> 8) & 0xff;
1875	p[13] = scsi_debug_sector_size & 0xff;
1876	if (scsi_debug_removable)
1877		p[20] |= 0x20; /* should agree with INQUIRY */
1878	if (1 == pcontrol)
1879		memset(p + 2, 0, sizeof(format_pg) - 2);
1880	return sizeof(format_pg);
1881}
1882
1883static int resp_caching_pg(unsigned char * p, int pcontrol, int target)
1884{ 	/* Caching page for mode_sense */
1885	unsigned char ch_caching_pg[] = {/* 0x8, 18, */ 0x4, 0, 0, 0, 0, 0,
1886		0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
1887	unsigned char d_caching_pg[] = {0x8, 18, 0x14, 0, 0xff, 0xff, 0, 0,
1888		0xff, 0xff, 0xff, 0xff, 0x80, 0x14, 0, 0,     0, 0, 0, 0};
1889
1890	if (SCSI_DEBUG_OPT_N_WCE & scsi_debug_opts)
1891		caching_pg[2] &= ~0x4;	/* set WCE=0 (default WCE=1) */
1892	memcpy(p, caching_pg, sizeof(caching_pg));
1893	if (1 == pcontrol)
1894		memcpy(p + 2, ch_caching_pg, sizeof(ch_caching_pg));
1895	else if (2 == pcontrol)
1896		memcpy(p, d_caching_pg, sizeof(d_caching_pg));
1897	return sizeof(caching_pg);
1898}
1899
1900static int resp_ctrl_m_pg(unsigned char * p, int pcontrol, int target)
1901{ 	/* Control mode page for mode_sense */
1902	unsigned char ch_ctrl_m_pg[] = {/* 0xa, 10, */ 0x6, 0, 0, 0, 0, 0,
1903				        0, 0, 0, 0};
1904	unsigned char d_ctrl_m_pg[] = {0xa, 10, 2, 0, 0, 0, 0, 0,
1905				     0, 0, 0x2, 0x4b};
1906
1907	if (scsi_debug_dsense)
1908		ctrl_m_pg[2] |= 0x4;
1909	else
1910		ctrl_m_pg[2] &= ~0x4;
1911
1912	if (scsi_debug_ato)
1913		ctrl_m_pg[5] |= 0x80; /* ATO=1 */
1914
1915	memcpy(p, ctrl_m_pg, sizeof(ctrl_m_pg));
1916	if (1 == pcontrol)
1917		memcpy(p + 2, ch_ctrl_m_pg, sizeof(ch_ctrl_m_pg));
1918	else if (2 == pcontrol)
1919		memcpy(p, d_ctrl_m_pg, sizeof(d_ctrl_m_pg));
1920	return sizeof(ctrl_m_pg);
1921}
1922
1923
1924static int resp_iec_m_pg(unsigned char * p, int pcontrol, int target)
1925{	/* Informational Exceptions control mode page for mode_sense */
1926	unsigned char ch_iec_m_pg[] = {/* 0x1c, 0xa, */ 0x4, 0xf, 0, 0, 0, 0,
1927				       0, 0, 0x0, 0x0};
1928	unsigned char d_iec_m_pg[] = {0x1c, 0xa, 0x08, 0, 0, 0, 0, 0,
1929				      0, 0, 0x0, 0x0};
1930
1931	memcpy(p, iec_m_pg, sizeof(iec_m_pg));
1932	if (1 == pcontrol)
1933		memcpy(p + 2, ch_iec_m_pg, sizeof(ch_iec_m_pg));
1934	else if (2 == pcontrol)
1935		memcpy(p, d_iec_m_pg, sizeof(d_iec_m_pg));
1936	return sizeof(iec_m_pg);
1937}
1938
1939static int resp_sas_sf_m_pg(unsigned char * p, int pcontrol, int target)
1940{	/* SAS SSP mode page - short format for mode_sense */
1941	unsigned char sas_sf_m_pg[] = {0x19, 0x6,
1942		0x6, 0x0, 0x7, 0xd0, 0x0, 0x0};
1943
1944	memcpy(p, sas_sf_m_pg, sizeof(sas_sf_m_pg));
1945	if (1 == pcontrol)
1946		memset(p + 2, 0, sizeof(sas_sf_m_pg) - 2);
1947	return sizeof(sas_sf_m_pg);
1948}
1949
1950
1951static int resp_sas_pcd_m_spg(unsigned char * p, int pcontrol, int target,
1952			      int target_dev_id)
1953{	/* SAS phy control and discover mode page for mode_sense */
1954	unsigned char sas_pcd_m_pg[] = {0x59, 0x1, 0, 0x64, 0, 0x6, 0, 2,
1955		    0, 0, 0, 0, 0x10, 0x9, 0x8, 0x0,
1956		    0x52, 0x22, 0x22, 0x20, 0x0, 0x0, 0x0, 0x0,
1957		    0x51, 0x11, 0x11, 0x10, 0x0, 0x0, 0x0, 0x1,
1958		    0x2, 0, 0, 0, 0, 0, 0, 0,
1959		    0x88, 0x99, 0, 0, 0, 0, 0, 0,
1960		    0, 0, 0, 0, 0, 0, 0, 0,
1961		    0, 1, 0, 0, 0x10, 0x9, 0x8, 0x0,
1962		    0x52, 0x22, 0x22, 0x20, 0x0, 0x0, 0x0, 0x0,
1963		    0x51, 0x11, 0x11, 0x10, 0x0, 0x0, 0x0, 0x1,
1964		    0x3, 0, 0, 0, 0, 0, 0, 0,
1965		    0x88, 0x99, 0, 0, 0, 0, 0, 0,
1966		    0, 0, 0, 0, 0, 0, 0, 0,
1967		};
1968	int port_a, port_b;
1969
1970	port_a = target_dev_id + 1;
1971	port_b = port_a + 1;
1972	memcpy(p, sas_pcd_m_pg, sizeof(sas_pcd_m_pg));
1973	p[20] = (port_a >> 24);
1974	p[21] = (port_a >> 16) & 0xff;
1975	p[22] = (port_a >> 8) & 0xff;
1976	p[23] = port_a & 0xff;
1977	p[48 + 20] = (port_b >> 24);
1978	p[48 + 21] = (port_b >> 16) & 0xff;
1979	p[48 + 22] = (port_b >> 8) & 0xff;
1980	p[48 + 23] = port_b & 0xff;
1981	if (1 == pcontrol)
1982		memset(p + 4, 0, sizeof(sas_pcd_m_pg) - 4);
1983	return sizeof(sas_pcd_m_pg);
1984}
1985
1986static int resp_sas_sha_m_spg(unsigned char * p, int pcontrol)
1987{	/* SAS SSP shared protocol specific port mode subpage */
1988	unsigned char sas_sha_m_pg[] = {0x59, 0x2, 0, 0xc, 0, 0x6, 0x10, 0,
1989		    0, 0, 0, 0, 0, 0, 0, 0,
1990		};
1991
1992	memcpy(p, sas_sha_m_pg, sizeof(sas_sha_m_pg));
1993	if (1 == pcontrol)
1994		memset(p + 4, 0, sizeof(sas_sha_m_pg) - 4);
1995	return sizeof(sas_sha_m_pg);
1996}
1997
1998#define SDEBUG_MAX_MSENSE_SZ 256
1999
2000static int
2001resp_mode_sense(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
2002{
2003	unsigned char dbd, llbaa;
2004	int pcontrol, pcode, subpcode, bd_len;
2005	unsigned char dev_spec;
2006	int k, alloc_len, msense_6, offset, len, target_dev_id;
2007	int target = scp->device->id;
2008	unsigned char * ap;
2009	unsigned char arr[SDEBUG_MAX_MSENSE_SZ];
2010	unsigned char *cmd = scp->cmnd;
2011
2012	dbd = !!(cmd[1] & 0x8);
2013	pcontrol = (cmd[2] & 0xc0) >> 6;
2014	pcode = cmd[2] & 0x3f;
2015	subpcode = cmd[3];
2016	msense_6 = (MODE_SENSE == cmd[0]);
2017	llbaa = msense_6 ? 0 : !!(cmd[1] & 0x10);
2018	if ((0 == scsi_debug_ptype) && (0 == dbd))
2019		bd_len = llbaa ? 16 : 8;
2020	else
2021		bd_len = 0;
2022	alloc_len = msense_6 ? cmd[4] : ((cmd[7] << 8) | cmd[8]);
2023	memset(arr, 0, SDEBUG_MAX_MSENSE_SZ);
2024	if (0x3 == pcontrol) {  /* Saving values not supported */
2025		mk_sense_buffer(scp, ILLEGAL_REQUEST, SAVING_PARAMS_UNSUP, 0);
2026		return check_condition_result;
2027	}
2028	target_dev_id = ((devip->sdbg_host->shost->host_no + 1) * 2000) +
2029			(devip->target * 1000) - 3;
2030	/* set DPOFUA bit for disks */
2031	if (0 == scsi_debug_ptype)
2032		dev_spec = (DEV_READONLY(target) ? 0x80 : 0x0) | 0x10;
2033	else
2034		dev_spec = 0x0;
2035	if (msense_6) {
2036		arr[2] = dev_spec;
2037		arr[3] = bd_len;
2038		offset = 4;
2039	} else {
2040		arr[3] = dev_spec;
2041		if (16 == bd_len)
2042			arr[4] = 0x1;	/* set LONGLBA bit */
2043		arr[7] = bd_len;	/* assume 255 or less */
2044		offset = 8;
2045	}
2046	ap = arr + offset;
2047	if ((bd_len > 0) && (!sdebug_capacity))
2048		sdebug_capacity = get_sdebug_capacity();
2049
2050	if (8 == bd_len) {
2051		if (sdebug_capacity > 0xfffffffe) {
2052			ap[0] = 0xff;
2053			ap[1] = 0xff;
2054			ap[2] = 0xff;
2055			ap[3] = 0xff;
2056		} else {
2057			ap[0] = (sdebug_capacity >> 24) & 0xff;
2058			ap[1] = (sdebug_capacity >> 16) & 0xff;
2059			ap[2] = (sdebug_capacity >> 8) & 0xff;
2060			ap[3] = sdebug_capacity & 0xff;
2061		}
2062		ap[6] = (scsi_debug_sector_size >> 8) & 0xff;
2063		ap[7] = scsi_debug_sector_size & 0xff;
2064		offset += bd_len;
2065		ap = arr + offset;
2066	} else if (16 == bd_len) {
2067		unsigned long long capac = sdebug_capacity;
2068
2069        	for (k = 0; k < 8; ++k, capac >>= 8)
2070                	ap[7 - k] = capac & 0xff;
2071		ap[12] = (scsi_debug_sector_size >> 24) & 0xff;
2072		ap[13] = (scsi_debug_sector_size >> 16) & 0xff;
2073		ap[14] = (scsi_debug_sector_size >> 8) & 0xff;
2074		ap[15] = scsi_debug_sector_size & 0xff;
2075		offset += bd_len;
2076		ap = arr + offset;
2077	}
2078
2079	if ((subpcode > 0x0) && (subpcode < 0xff) && (0x19 != pcode)) {
2080		/* TODO: Control Extension page */
2081		mk_sense_invalid_fld(scp, SDEB_IN_CDB, 3, -1);
2082		return check_condition_result;
2083	}
2084	switch (pcode) {
2085	case 0x1:	/* Read-Write error recovery page, direct access */
2086		len = resp_err_recov_pg(ap, pcontrol, target);
2087		offset += len;
2088		break;
2089	case 0x2:	/* Disconnect-Reconnect page, all devices */
2090		len = resp_disconnect_pg(ap, pcontrol, target);
2091		offset += len;
2092		break;
2093        case 0x3:       /* Format device page, direct access */
2094                len = resp_format_pg(ap, pcontrol, target);
2095                offset += len;
2096                break;
2097	case 0x8:	/* Caching page, direct access */
2098		len = resp_caching_pg(ap, pcontrol, target);
2099		offset += len;
2100		break;
2101	case 0xa:	/* Control Mode page, all devices */
2102		len = resp_ctrl_m_pg(ap, pcontrol, target);
2103		offset += len;
2104		break;
2105	case 0x19:	/* if spc==1 then sas phy, control+discover */
2106		if ((subpcode > 0x2) && (subpcode < 0xff)) {
2107			mk_sense_invalid_fld(scp, SDEB_IN_CDB, 3, -1);
2108			return check_condition_result;
2109	        }
2110		len = 0;
2111		if ((0x0 == subpcode) || (0xff == subpcode))
2112			len += resp_sas_sf_m_pg(ap + len, pcontrol, target);
2113		if ((0x1 == subpcode) || (0xff == subpcode))
2114			len += resp_sas_pcd_m_spg(ap + len, pcontrol, target,
2115						  target_dev_id);
2116		if ((0x2 == subpcode) || (0xff == subpcode))
2117			len += resp_sas_sha_m_spg(ap + len, pcontrol);
2118		offset += len;
2119		break;
2120	case 0x1c:	/* Informational Exceptions Mode page, all devices */
2121		len = resp_iec_m_pg(ap, pcontrol, target);
2122		offset += len;
2123		break;
2124	case 0x3f:	/* Read all Mode pages */
2125		if ((0 == subpcode) || (0xff == subpcode)) {
2126			len = resp_err_recov_pg(ap, pcontrol, target);
2127			len += resp_disconnect_pg(ap + len, pcontrol, target);
2128			len += resp_format_pg(ap + len, pcontrol, target);
2129			len += resp_caching_pg(ap + len, pcontrol, target);
2130			len += resp_ctrl_m_pg(ap + len, pcontrol, target);
2131			len += resp_sas_sf_m_pg(ap + len, pcontrol, target);
2132			if (0xff == subpcode) {
2133				len += resp_sas_pcd_m_spg(ap + len, pcontrol,
2134						  target, target_dev_id);
2135				len += resp_sas_sha_m_spg(ap + len, pcontrol);
2136			}
2137			len += resp_iec_m_pg(ap + len, pcontrol, target);
2138		} else {
2139			mk_sense_invalid_fld(scp, SDEB_IN_CDB, 3, -1);
2140			return check_condition_result;
2141                }
2142		offset += len;
2143		break;
2144	default:
2145		mk_sense_invalid_fld(scp, SDEB_IN_CDB, 2, 5);
2146		return check_condition_result;
2147	}
2148	if (msense_6)
2149		arr[0] = offset - 1;
2150	else {
2151		arr[0] = ((offset - 2) >> 8) & 0xff;
2152		arr[1] = (offset - 2) & 0xff;
2153	}
2154	return fill_from_dev_buffer(scp, arr, min(alloc_len, offset));
2155}
2156
2157#define SDEBUG_MAX_MSELECT_SZ 512
2158
2159static int
2160resp_mode_select(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
2161{
2162	int pf, sp, ps, md_len, bd_len, off, spf, pg_len;
2163	int param_len, res, mpage;
2164	unsigned char arr[SDEBUG_MAX_MSELECT_SZ];
2165	unsigned char *cmd = scp->cmnd;
2166	int mselect6 = (MODE_SELECT == cmd[0]);
2167
2168	memset(arr, 0, sizeof(arr));
2169	pf = cmd[1] & 0x10;
2170	sp = cmd[1] & 0x1;
2171	param_len = mselect6 ? cmd[4] : ((cmd[7] << 8) + cmd[8]);
2172	if ((0 == pf) || sp || (param_len > SDEBUG_MAX_MSELECT_SZ)) {
2173		mk_sense_invalid_fld(scp, SDEB_IN_CDB, mselect6 ? 4 : 7, -1);
2174		return check_condition_result;
2175	}
2176        res = fetch_to_dev_buffer(scp, arr, param_len);
2177        if (-1 == res)
2178                return (DID_ERROR << 16);
2179        else if ((res < param_len) &&
2180                 (SCSI_DEBUG_OPT_NOISE & scsi_debug_opts))
2181		sdev_printk(KERN_INFO, scp->device,
2182			    "%s: cdb indicated=%d, IO sent=%d bytes\n",
2183			    __func__, param_len, res);
2184	md_len = mselect6 ? (arr[0] + 1) : ((arr[0] << 8) + arr[1] + 2);
2185	bd_len = mselect6 ? arr[3] : ((arr[6] << 8) + arr[7]);
2186	if (md_len > 2) {
2187		mk_sense_invalid_fld(scp, SDEB_IN_DATA, 0, -1);
2188		return check_condition_result;
2189	}
2190	off = bd_len + (mselect6 ? 4 : 8);
2191	mpage = arr[off] & 0x3f;
2192	ps = !!(arr[off] & 0x80);
2193	if (ps) {
2194		mk_sense_invalid_fld(scp, SDEB_IN_DATA, off, 7);
2195		return check_condition_result;
2196	}
2197	spf = !!(arr[off] & 0x40);
2198	pg_len = spf ? ((arr[off + 2] << 8) + arr[off + 3] + 4) :
2199		       (arr[off + 1] + 2);
2200	if ((pg_len + off) > param_len) {
2201		mk_sense_buffer(scp, ILLEGAL_REQUEST,
2202				PARAMETER_LIST_LENGTH_ERR, 0);
2203		return check_condition_result;
2204	}
2205	switch (mpage) {
2206	case 0x8:      /* Caching Mode page */
2207		if (caching_pg[1] == arr[off + 1]) {
2208			memcpy(caching_pg + 2, arr + off + 2,
2209			       sizeof(caching_pg) - 2);
2210			goto set_mode_changed_ua;
2211		}
2212		break;
2213	case 0xa:      /* Control Mode page */
2214		if (ctrl_m_pg[1] == arr[off + 1]) {
2215			memcpy(ctrl_m_pg + 2, arr + off + 2,
2216			       sizeof(ctrl_m_pg) - 2);
2217			scsi_debug_dsense = !!(ctrl_m_pg[2] & 0x4);
2218			goto set_mode_changed_ua;
2219		}
2220		break;
2221	case 0x1c:      /* Informational Exceptions Mode page */
2222		if (iec_m_pg[1] == arr[off + 1]) {
2223			memcpy(iec_m_pg + 2, arr + off + 2,
2224			       sizeof(iec_m_pg) - 2);
2225			goto set_mode_changed_ua;
2226		}
2227		break;
2228	default:
2229		break;
2230	}
2231	mk_sense_invalid_fld(scp, SDEB_IN_DATA, off, 5);
2232	return check_condition_result;
2233set_mode_changed_ua:
2234	set_bit(SDEBUG_UA_MODE_CHANGED, devip->uas_bm);
2235	return 0;
2236}
2237
2238static int resp_temp_l_pg(unsigned char * arr)
2239{
2240	unsigned char temp_l_pg[] = {0x0, 0x0, 0x3, 0x2, 0x0, 38,
2241				     0x0, 0x1, 0x3, 0x2, 0x0, 65,
2242		};
2243
2244        memcpy(arr, temp_l_pg, sizeof(temp_l_pg));
2245        return sizeof(temp_l_pg);
2246}
2247
2248static int resp_ie_l_pg(unsigned char * arr)
2249{
2250	unsigned char ie_l_pg[] = {0x0, 0x0, 0x3, 0x3, 0x0, 0x0, 38,
2251		};
2252
2253        memcpy(arr, ie_l_pg, sizeof(ie_l_pg));
2254	if (iec_m_pg[2] & 0x4) {	/* TEST bit set */
2255		arr[4] = THRESHOLD_EXCEEDED;
2256		arr[5] = 0xff;
2257	}
2258        return sizeof(ie_l_pg);
2259}
2260
2261#define SDEBUG_MAX_LSENSE_SZ 512
2262
2263static int resp_log_sense(struct scsi_cmnd * scp,
2264                          struct sdebug_dev_info * devip)
2265{
2266	int ppc, sp, pcontrol, pcode, subpcode, alloc_len, len, n;
2267	unsigned char arr[SDEBUG_MAX_LSENSE_SZ];
2268	unsigned char *cmd = scp->cmnd;
2269
2270	memset(arr, 0, sizeof(arr));
2271	ppc = cmd[1] & 0x2;
2272	sp = cmd[1] & 0x1;
2273	if (ppc || sp) {
2274		mk_sense_invalid_fld(scp, SDEB_IN_CDB, 1, ppc ? 1 : 0);
2275		return check_condition_result;
2276	}
2277	pcontrol = (cmd[2] & 0xc0) >> 6;
2278	pcode = cmd[2] & 0x3f;
2279	subpcode = cmd[3] & 0xff;
2280	alloc_len = (cmd[7] << 8) + cmd[8];
2281	arr[0] = pcode;
2282	if (0 == subpcode) {
2283		switch (pcode) {
2284		case 0x0:	/* Supported log pages log page */
2285			n = 4;
2286			arr[n++] = 0x0;		/* this page */
2287			arr[n++] = 0xd;		/* Temperature */
2288			arr[n++] = 0x2f;	/* Informational exceptions */
2289			arr[3] = n - 4;
2290			break;
2291		case 0xd:	/* Temperature log page */
2292			arr[3] = resp_temp_l_pg(arr + 4);
2293			break;
2294		case 0x2f:	/* Informational exceptions log page */
2295			arr[3] = resp_ie_l_pg(arr + 4);
2296			break;
2297		default:
2298			mk_sense_invalid_fld(scp, SDEB_IN_CDB, 2, 5);
2299			return check_condition_result;
2300		}
2301	} else if (0xff == subpcode) {
2302		arr[0] |= 0x40;
2303		arr[1] = subpcode;
2304		switch (pcode) {
2305		case 0x0:	/* Supported log pages and subpages log page */
2306			n = 4;
2307			arr[n++] = 0x0;
2308			arr[n++] = 0x0;		/* 0,0 page */
2309			arr[n++] = 0x0;
2310			arr[n++] = 0xff;	/* this page */
2311			arr[n++] = 0xd;
2312			arr[n++] = 0x0;		/* Temperature */
2313			arr[n++] = 0x2f;
2314			arr[n++] = 0x0;	/* Informational exceptions */
2315			arr[3] = n - 4;
2316			break;
2317		case 0xd:	/* Temperature subpages */
2318			n = 4;
2319			arr[n++] = 0xd;
2320			arr[n++] = 0x0;		/* Temperature */
2321			arr[3] = n - 4;
2322			break;
2323		case 0x2f:	/* Informational exceptions subpages */
2324			n = 4;
2325			arr[n++] = 0x2f;
2326			arr[n++] = 0x0;		/* Informational exceptions */
2327			arr[3] = n - 4;
2328			break;
2329		default:
2330			mk_sense_invalid_fld(scp, SDEB_IN_CDB, 2, 5);
2331			return check_condition_result;
2332		}
2333	} else {
2334		mk_sense_invalid_fld(scp, SDEB_IN_CDB, 3, -1);
2335		return check_condition_result;
2336	}
2337	len = min(((arr[2] << 8) + arr[3]) + 4, alloc_len);
2338	return fill_from_dev_buffer(scp, arr,
2339		    min(len, SDEBUG_MAX_INQ_ARR_SZ));
2340}
2341
2342static int check_device_access_params(struct scsi_cmnd *scp,
2343				      unsigned long long lba, unsigned int num)
2344{
2345	if (lba + num > sdebug_capacity) {
2346		mk_sense_buffer(scp, ILLEGAL_REQUEST, LBA_OUT_OF_RANGE, 0);
2347		return check_condition_result;
2348	}
2349	/* transfer length excessive (tie in to block limits VPD page) */
2350	if (num > sdebug_store_sectors) {
2351		/* needs work to find which cdb byte 'num' comes from */
2352		mk_sense_buffer(scp, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB, 0);
2353		return check_condition_result;
2354	}
2355	return 0;
2356}
2357
2358/* Returns number of bytes copied or -1 if error. */
2359static int
2360do_device_access(struct scsi_cmnd *scmd, u64 lba, u32 num, bool do_write)
2361{
2362	int ret;
2363	u64 block, rest = 0;
2364	struct scsi_data_buffer *sdb;
2365	enum dma_data_direction dir;
2366	size_t (*func)(struct scatterlist *, unsigned int, void *, size_t,
2367		       off_t);
2368
2369	if (do_write) {
2370		sdb = scsi_out(scmd);
2371		dir = DMA_TO_DEVICE;
2372		func = sg_pcopy_to_buffer;
2373	} else {
2374		sdb = scsi_in(scmd);
2375		dir = DMA_FROM_DEVICE;
2376		func = sg_pcopy_from_buffer;
2377	}
2378
2379	if (!sdb->length)
2380		return 0;
2381	if (!(scsi_bidi_cmnd(scmd) || scmd->sc_data_direction == dir))
2382		return -1;
2383
2384	block = do_div(lba, sdebug_store_sectors);
2385	if (block + num > sdebug_store_sectors)
2386		rest = block + num - sdebug_store_sectors;
2387
2388	ret = func(sdb->table.sgl, sdb->table.nents,
2389		   fake_storep + (block * scsi_debug_sector_size),
2390		   (num - rest) * scsi_debug_sector_size, 0);
2391	if (ret != (num - rest) * scsi_debug_sector_size)
2392		return ret;
2393
2394	if (rest) {
2395		ret += func(sdb->table.sgl, sdb->table.nents,
2396			    fake_storep, rest * scsi_debug_sector_size,
2397			    (num - rest) * scsi_debug_sector_size);
2398	}
2399
2400	return ret;
2401}
2402
2403/* If fake_store(lba,num) compares equal to arr(num), then copy top half of
2404 * arr into fake_store(lba,num) and return true. If comparison fails then
2405 * return false. */
2406static bool
2407comp_write_worker(u64 lba, u32 num, const u8 *arr)
2408{
2409	bool res;
2410	u64 block, rest = 0;
2411	u32 store_blks = sdebug_store_sectors;
2412	u32 lb_size = scsi_debug_sector_size;
2413
2414	block = do_div(lba, store_blks);
2415	if (block + num > store_blks)
2416		rest = block + num - store_blks;
2417
2418	res = !memcmp(fake_storep + (block * lb_size), arr,
2419		      (num - rest) * lb_size);
2420	if (!res)
2421		return res;
2422	if (rest)
2423		res = memcmp(fake_storep, arr + ((num - rest) * lb_size),
2424			     rest * lb_size);
2425	if (!res)
2426		return res;
2427	arr += num * lb_size;
2428	memcpy(fake_storep + (block * lb_size), arr, (num - rest) * lb_size);
2429	if (rest)
2430		memcpy(fake_storep, arr + ((num - rest) * lb_size),
2431		       rest * lb_size);
2432	return res;
2433}
2434
2435static __be16 dif_compute_csum(const void *buf, int len)
2436{
2437	__be16 csum;
2438
2439	if (scsi_debug_guard)
2440		csum = (__force __be16)ip_compute_csum(buf, len);
2441	else
2442		csum = cpu_to_be16(crc_t10dif(buf, len));
2443
2444	return csum;
2445}
2446
2447static int dif_verify(struct sd_dif_tuple *sdt, const void *data,
2448		      sector_t sector, u32 ei_lba)
2449{
2450	__be16 csum = dif_compute_csum(data, scsi_debug_sector_size);
2451
2452	if (sdt->guard_tag != csum) {
2453		pr_err("%s: GUARD check failed on sector %lu rcvd 0x%04x, data 0x%04x\n",
2454			__func__,
2455			(unsigned long)sector,
2456			be16_to_cpu(sdt->guard_tag),
2457			be16_to_cpu(csum));
2458		return 0x01;
2459	}
2460	if (scsi_debug_dif == SD_DIF_TYPE1_PROTECTION &&
2461	    be32_to_cpu(sdt->ref_tag) != (sector & 0xffffffff)) {
2462		pr_err("%s: REF check failed on sector %lu\n",
2463			__func__, (unsigned long)sector);
2464		return 0x03;
2465	}
2466	if (scsi_debug_dif == SD_DIF_TYPE2_PROTECTION &&
2467	    be32_to_cpu(sdt->ref_tag) != ei_lba) {
2468		pr_err("%s: REF check failed on sector %lu\n",
2469			__func__, (unsigned long)sector);
2470		return 0x03;
2471	}
2472	return 0;
2473}
2474
2475static void dif_copy_prot(struct scsi_cmnd *SCpnt, sector_t sector,
2476			  unsigned int sectors, bool read)
2477{
2478	size_t resid;
2479	void *paddr;
2480	const void *dif_store_end = dif_storep + sdebug_store_sectors;
2481	struct sg_mapping_iter miter;
2482
2483	/* Bytes of protection data to copy into sgl */
2484	resid = sectors * sizeof(*dif_storep);
2485
2486	sg_miter_start(&miter, scsi_prot_sglist(SCpnt),
2487			scsi_prot_sg_count(SCpnt), SG_MITER_ATOMIC |
2488			(read ? SG_MITER_TO_SG : SG_MITER_FROM_SG));
2489
2490	while (sg_miter_next(&miter) && resid > 0) {
2491		size_t len = min(miter.length, resid);
2492		void *start = dif_store(sector);
2493		size_t rest = 0;
2494
2495		if (dif_store_end < start + len)
2496			rest = start + len - dif_store_end;
2497
2498		paddr = miter.addr;
2499
2500		if (read)
2501			memcpy(paddr, start, len - rest);
2502		else
2503			memcpy(start, paddr, len - rest);
2504
2505		if (rest) {
2506			if (read)
2507				memcpy(paddr + len - rest, dif_storep, rest);
2508			else
2509				memcpy(dif_storep, paddr + len - rest, rest);
2510		}
2511
2512		sector += len / sizeof(*dif_storep);
2513		resid -= len;
2514	}
2515	sg_miter_stop(&miter);
2516}
2517
2518static int prot_verify_read(struct scsi_cmnd *SCpnt, sector_t start_sec,
2519			    unsigned int sectors, u32 ei_lba)
2520{
2521	unsigned int i;
2522	struct sd_dif_tuple *sdt;
2523	sector_t sector;
2524
2525	for (i = 0; i < sectors; i++, ei_lba++) {
2526		int ret;
2527
2528		sector = start_sec + i;
2529		sdt = dif_store(sector);
2530
2531		if (sdt->app_tag == cpu_to_be16(0xffff))
2532			continue;
2533
2534		ret = dif_verify(sdt, fake_store(sector), sector, ei_lba);
2535		if (ret) {
2536			dif_errors++;
2537			return ret;
2538		}
2539	}
2540
2541	dif_copy_prot(SCpnt, start_sec, sectors, true);
2542	dix_reads++;
2543
2544	return 0;
2545}
2546
2547static int
2548resp_read_dt0(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
2549{
2550	u8 *cmd = scp->cmnd;
2551	u64 lba;
2552	u32 num;
2553	u32 ei_lba;
2554	unsigned long iflags;
2555	int ret;
2556	bool check_prot;
2557
2558	switch (cmd[0]) {
2559	case READ_16:
2560		ei_lba = 0;
2561		lba = get_unaligned_be64(cmd + 2);
2562		num = get_unaligned_be32(cmd + 10);
2563		check_prot = true;
2564		break;
2565	case READ_10:
2566		ei_lba = 0;
2567		lba = get_unaligned_be32(cmd + 2);
2568		num = get_unaligned_be16(cmd + 7);
2569		check_prot = true;
2570		break;
2571	case READ_6:
2572		ei_lba = 0;
2573		lba = (u32)cmd[3] | (u32)cmd[2] << 8 |
2574		      (u32)(cmd[1] & 0x1f) << 16;
2575		num = (0 == cmd[4]) ? 256 : cmd[4];
2576		check_prot = true;
2577		break;
2578	case READ_12:
2579		ei_lba = 0;
2580		lba = get_unaligned_be32(cmd + 2);
2581		num = get_unaligned_be32(cmd + 6);
2582		check_prot = true;
2583		break;
2584	case XDWRITEREAD_10:
2585		ei_lba = 0;
2586		lba = get_unaligned_be32(cmd + 2);
2587		num = get_unaligned_be16(cmd + 7);
2588		check_prot = false;
2589		break;
2590	default:	/* assume READ(32) */
2591		lba = get_unaligned_be64(cmd + 12);
2592		ei_lba = get_unaligned_be32(cmd + 20);
2593		num = get_unaligned_be32(cmd + 28);
2594		check_prot = false;
2595		break;
2596	}
2597	if (check_prot) {
2598		if (scsi_debug_dif == SD_DIF_TYPE2_PROTECTION &&
2599		    (cmd[1] & 0xe0)) {
2600			mk_sense_invalid_opcode(scp);
2601			return check_condition_result;
2602		}
2603		if ((scsi_debug_dif == SD_DIF_TYPE1_PROTECTION ||
2604		     scsi_debug_dif == SD_DIF_TYPE3_PROTECTION) &&
2605		    (cmd[1] & 0xe0) == 0)
2606			sdev_printk(KERN_ERR, scp->device, "Unprotected RD "
2607				    "to DIF device\n");
2608	}
2609	if (sdebug_any_injecting_opt) {
2610		struct sdebug_scmd_extra_t *ep = scsi_cmd_priv(scp);
2611
2612		if (ep->inj_short)
2613			num /= 2;
2614	}
2615
2616	/* inline check_device_access_params() */
2617	if (lba + num > sdebug_capacity) {
2618		mk_sense_buffer(scp, ILLEGAL_REQUEST, LBA_OUT_OF_RANGE, 0);
2619		return check_condition_result;
2620	}
2621	/* transfer length excessive (tie in to block limits VPD page) */
2622	if (num > sdebug_store_sectors) {
2623		/* needs work to find which cdb byte 'num' comes from */
2624		mk_sense_buffer(scp, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB, 0);
2625		return check_condition_result;
2626	}
2627
2628	if ((SCSI_DEBUG_OPT_MEDIUM_ERR & scsi_debug_opts) &&
2629	    (lba <= (OPT_MEDIUM_ERR_ADDR + OPT_MEDIUM_ERR_NUM - 1)) &&
2630	    ((lba + num) > OPT_MEDIUM_ERR_ADDR)) {
2631		/* claim unrecoverable read error */
2632		mk_sense_buffer(scp, MEDIUM_ERROR, UNRECOVERED_READ_ERR, 0);
2633		/* set info field and valid bit for fixed descriptor */
2634		if (0x70 == (scp->sense_buffer[0] & 0x7f)) {
2635			scp->sense_buffer[0] |= 0x80;	/* Valid bit */
2636			ret = (lba < OPT_MEDIUM_ERR_ADDR)
2637			      ? OPT_MEDIUM_ERR_ADDR : (int)lba;
2638			put_unaligned_be32(ret, scp->sense_buffer + 3);
2639		}
2640		scsi_set_resid(scp, scsi_bufflen(scp));
2641		return check_condition_result;
2642	}
2643
2644	read_lock_irqsave(&atomic_rw, iflags);
2645
2646	/* DIX + T10 DIF */
2647	if (scsi_debug_dix && scsi_prot_sg_count(scp)) {
2648		int prot_ret = prot_verify_read(scp, lba, num, ei_lba);
2649
2650		if (prot_ret) {
2651			read_unlock_irqrestore(&atomic_rw, iflags);
2652			mk_sense_buffer(scp, ABORTED_COMMAND, 0x10, prot_ret);
2653			return illegal_condition_result;
2654		}
2655	}
2656
2657	ret = do_device_access(scp, lba, num, false);
2658	read_unlock_irqrestore(&atomic_rw, iflags);
2659	if (ret == -1)
2660		return DID_ERROR << 16;
2661
2662	scsi_in(scp)->resid = scsi_bufflen(scp) - ret;
2663
2664	if (sdebug_any_injecting_opt) {
2665		struct sdebug_scmd_extra_t *ep = scsi_cmd_priv(scp);
2666
2667		if (ep->inj_recovered) {
2668			mk_sense_buffer(scp, RECOVERED_ERROR,
2669					THRESHOLD_EXCEEDED, 0);
2670			return check_condition_result;
2671		} else if (ep->inj_transport) {
2672			mk_sense_buffer(scp, ABORTED_COMMAND,
2673					TRANSPORT_PROBLEM, ACK_NAK_TO);
2674			return check_condition_result;
2675		} else if (ep->inj_dif) {
2676			/* Logical block guard check failed */
2677			mk_sense_buffer(scp, ABORTED_COMMAND, 0x10, 1);
2678			return illegal_condition_result;
2679		} else if (ep->inj_dix) {
2680			mk_sense_buffer(scp, ILLEGAL_REQUEST, 0x10, 1);
2681			return illegal_condition_result;
2682		}
2683	}
2684	return 0;
2685}
2686
2687void dump_sector(unsigned char *buf, int len)
2688{
2689	int i, j, n;
2690
2691	pr_err(">>> Sector Dump <<<\n");
2692	for (i = 0 ; i < len ; i += 16) {
2693		char b[128];
2694
2695		for (j = 0, n = 0; j < 16; j++) {
2696			unsigned char c = buf[i+j];
2697
2698			if (c >= 0x20 && c < 0x7e)
2699				n += scnprintf(b + n, sizeof(b) - n,
2700					       " %c ", buf[i+j]);
2701			else
2702				n += scnprintf(b + n, sizeof(b) - n,
2703					       "%02x ", buf[i+j]);
2704		}
2705		pr_err("%04d: %s\n", i, b);
2706	}
2707}
2708
2709static int prot_verify_write(struct scsi_cmnd *SCpnt, sector_t start_sec,
2710			     unsigned int sectors, u32 ei_lba)
2711{
2712	int ret;
2713	struct sd_dif_tuple *sdt;
2714	void *daddr;
2715	sector_t sector = start_sec;
2716	int ppage_offset;
2717	int dpage_offset;
2718	struct sg_mapping_iter diter;
2719	struct sg_mapping_iter piter;
2720
2721	BUG_ON(scsi_sg_count(SCpnt) == 0);
2722	BUG_ON(scsi_prot_sg_count(SCpnt) == 0);
2723
2724	sg_miter_start(&piter, scsi_prot_sglist(SCpnt),
2725			scsi_prot_sg_count(SCpnt),
2726			SG_MITER_ATOMIC | SG_MITER_FROM_SG);
2727	sg_miter_start(&diter, scsi_sglist(SCpnt), scsi_sg_count(SCpnt),
2728			SG_MITER_ATOMIC | SG_MITER_FROM_SG);
2729
2730	/* For each protection page */
2731	while (sg_miter_next(&piter)) {
2732		dpage_offset = 0;
2733		if (WARN_ON(!sg_miter_next(&diter))) {
2734			ret = 0x01;
2735			goto out;
2736		}
2737
2738		for (ppage_offset = 0; ppage_offset < piter.length;
2739		     ppage_offset += sizeof(struct sd_dif_tuple)) {
2740			/* If we're at the end of the current
2741			 * data page advance to the next one
2742			 */
2743			if (dpage_offset >= diter.length) {
2744				if (WARN_ON(!sg_miter_next(&diter))) {
2745					ret = 0x01;
2746					goto out;
2747				}
2748				dpage_offset = 0;
2749			}
2750
2751			sdt = piter.addr + ppage_offset;
2752			daddr = diter.addr + dpage_offset;
2753
2754			ret = dif_verify(sdt, daddr, sector, ei_lba);
2755			if (ret) {
2756				dump_sector(daddr, scsi_debug_sector_size);
2757				goto out;
2758			}
2759
2760			sector++;
2761			ei_lba++;
2762			dpage_offset += scsi_debug_sector_size;
2763		}
2764		diter.consumed = dpage_offset;
2765		sg_miter_stop(&diter);
2766	}
2767	sg_miter_stop(&piter);
2768
2769	dif_copy_prot(SCpnt, start_sec, sectors, false);
2770	dix_writes++;
2771
2772	return 0;
2773
2774out:
2775	dif_errors++;
2776	sg_miter_stop(&diter);
2777	sg_miter_stop(&piter);
2778	return ret;
2779}
2780
2781static unsigned long lba_to_map_index(sector_t lba)
2782{
2783	if (scsi_debug_unmap_alignment) {
2784		lba += scsi_debug_unmap_granularity -
2785			scsi_debug_unmap_alignment;
2786	}
2787	do_div(lba, scsi_debug_unmap_granularity);
2788
2789	return lba;
2790}
2791
2792static sector_t map_index_to_lba(unsigned long index)
2793{
2794	sector_t lba = index * scsi_debug_unmap_granularity;
2795
2796	if (scsi_debug_unmap_alignment) {
2797		lba -= scsi_debug_unmap_granularity -
2798			scsi_debug_unmap_alignment;
2799	}
2800
2801	return lba;
2802}
2803
2804static unsigned int map_state(sector_t lba, unsigned int *num)
2805{
2806	sector_t end;
2807	unsigned int mapped;
2808	unsigned long index;
2809	unsigned long next;
2810
2811	index = lba_to_map_index(lba);
2812	mapped = test_bit(index, map_storep);
2813
2814	if (mapped)
2815		next = find_next_zero_bit(map_storep, map_size, index);
2816	else
2817		next = find_next_bit(map_storep, map_size, index);
2818
2819	end = min_t(sector_t, sdebug_store_sectors,  map_index_to_lba(next));
2820	*num = end - lba;
2821
2822	return mapped;
2823}
2824
2825static void map_region(sector_t lba, unsigned int len)
2826{
2827	sector_t end = lba + len;
2828
2829	while (lba < end) {
2830		unsigned long index = lba_to_map_index(lba);
2831
2832		if (index < map_size)
2833			set_bit(index, map_storep);
2834
2835		lba = map_index_to_lba(index + 1);
2836	}
2837}
2838
2839static void unmap_region(sector_t lba, unsigned int len)
2840{
2841	sector_t end = lba + len;
2842
2843	while (lba < end) {
2844		unsigned long index = lba_to_map_index(lba);
2845
2846		if (lba == map_index_to_lba(index) &&
2847		    lba + scsi_debug_unmap_granularity <= end &&
2848		    index < map_size) {
2849			clear_bit(index, map_storep);
2850			if (scsi_debug_lbprz) {
2851				memset(fake_storep +
2852				       lba * scsi_debug_sector_size, 0,
2853				       scsi_debug_sector_size *
2854				       scsi_debug_unmap_granularity);
2855			}
2856			if (dif_storep) {
2857				memset(dif_storep + lba, 0xff,
2858				       sizeof(*dif_storep) *
2859				       scsi_debug_unmap_granularity);
2860			}
2861		}
2862		lba = map_index_to_lba(index + 1);
2863	}
2864}
2865
2866static int
2867resp_write_dt0(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
2868{
2869	u8 *cmd = scp->cmnd;
2870	u64 lba;
2871	u32 num;
2872	u32 ei_lba;
2873	unsigned long iflags;
2874	int ret;
2875	bool check_prot;
2876
2877	switch (cmd[0]) {
2878	case WRITE_16:
2879		ei_lba = 0;
2880		lba = get_unaligned_be64(cmd + 2);
2881		num = get_unaligned_be32(cmd + 10);
2882		check_prot = true;
2883		break;
2884	case WRITE_10:
2885		ei_lba = 0;
2886		lba = get_unaligned_be32(cmd + 2);
2887		num = get_unaligned_be16(cmd + 7);
2888		check_prot = true;
2889		break;
2890	case WRITE_6:
2891		ei_lba = 0;
2892		lba = (u32)cmd[3] | (u32)cmd[2] << 8 |
2893		      (u32)(cmd[1] & 0x1f) << 16;
2894		num = (0 == cmd[4]) ? 256 : cmd[4];
2895		check_prot = true;
2896		break;
2897	case WRITE_12:
2898		ei_lba = 0;
2899		lba = get_unaligned_be32(cmd + 2);
2900		num = get_unaligned_be32(cmd + 6);
2901		check_prot = true;
2902		break;
2903	case 0x53:	/* XDWRITEREAD(10) */
2904		ei_lba = 0;
2905		lba = get_unaligned_be32(cmd + 2);
2906		num = get_unaligned_be16(cmd + 7);
2907		check_prot = false;
2908		break;
2909	default:	/* assume WRITE(32) */
2910		lba = get_unaligned_be64(cmd + 12);
2911		ei_lba = get_unaligned_be32(cmd + 20);
2912		num = get_unaligned_be32(cmd + 28);
2913		check_prot = false;
2914		break;
2915	}
2916	if (check_prot) {
2917		if (scsi_debug_dif == SD_DIF_TYPE2_PROTECTION &&
2918		    (cmd[1] & 0xe0)) {
2919			mk_sense_invalid_opcode(scp);
2920			return check_condition_result;
2921		}
2922		if ((scsi_debug_dif == SD_DIF_TYPE1_PROTECTION ||
2923		     scsi_debug_dif == SD_DIF_TYPE3_PROTECTION) &&
2924		    (cmd[1] & 0xe0) == 0)
2925			sdev_printk(KERN_ERR, scp->device, "Unprotected WR "
2926				    "to DIF device\n");
2927	}
2928
2929	/* inline check_device_access_params() */
2930	if (lba + num > sdebug_capacity) {
2931		mk_sense_buffer(scp, ILLEGAL_REQUEST, LBA_OUT_OF_RANGE, 0);
2932		return check_condition_result;
2933	}
2934	/* transfer length excessive (tie in to block limits VPD page) */
2935	if (num > sdebug_store_sectors) {
2936		/* needs work to find which cdb byte 'num' comes from */
2937		mk_sense_buffer(scp, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB, 0);
2938		return check_condition_result;
2939	}
2940
2941	write_lock_irqsave(&atomic_rw, iflags);
2942
2943	/* DIX + T10 DIF */
2944	if (scsi_debug_dix && scsi_prot_sg_count(scp)) {
2945		int prot_ret = prot_verify_write(scp, lba, num, ei_lba);
2946
2947		if (prot_ret) {
2948			write_unlock_irqrestore(&atomic_rw, iflags);
2949			mk_sense_buffer(scp, ILLEGAL_REQUEST, 0x10, prot_ret);
2950			return illegal_condition_result;
2951		}
2952	}
2953
2954	ret = do_device_access(scp, lba, num, true);
2955	if (scsi_debug_lbp())
2956		map_region(lba, num);
2957	write_unlock_irqrestore(&atomic_rw, iflags);
2958	if (-1 == ret)
2959		return (DID_ERROR << 16);
2960	else if ((ret < (num * scsi_debug_sector_size)) &&
2961		 (SCSI_DEBUG_OPT_NOISE & scsi_debug_opts))
2962		sdev_printk(KERN_INFO, scp->device,
2963			    "%s: write: cdb indicated=%u, IO sent=%d bytes\n",
2964			    my_name, num * scsi_debug_sector_size, ret);
2965
2966	if (sdebug_any_injecting_opt) {
2967		struct sdebug_scmd_extra_t *ep = scsi_cmd_priv(scp);
2968
2969		if (ep->inj_recovered) {
2970			mk_sense_buffer(scp, RECOVERED_ERROR,
2971					THRESHOLD_EXCEEDED, 0);
2972			return check_condition_result;
2973		} else if (ep->inj_dif) {
2974			/* Logical block guard check failed */
2975			mk_sense_buffer(scp, ABORTED_COMMAND, 0x10, 1);
2976			return illegal_condition_result;
2977		} else if (ep->inj_dix) {
2978			mk_sense_buffer(scp, ILLEGAL_REQUEST, 0x10, 1);
2979			return illegal_condition_result;
2980		}
2981	}
2982	return 0;
2983}
2984
2985static int
2986resp_write_same(struct scsi_cmnd *scp, u64 lba, u32 num, u32 ei_lba,
2987		bool unmap, bool ndob)
2988{
2989	unsigned long iflags;
2990	unsigned long long i;
2991	int ret;
2992
2993	ret = check_device_access_params(scp, lba, num);
2994	if (ret)
2995		return ret;
2996
2997	write_lock_irqsave(&atomic_rw, iflags);
2998
2999	if (unmap && scsi_debug_lbp()) {
3000		unmap_region(lba, num);
3001		goto out;
3002	}
3003
3004	/* if ndob then zero 1 logical block, else fetch 1 logical block */
3005	if (ndob) {
3006		memset(fake_storep + (lba * scsi_debug_sector_size), 0,
3007		       scsi_debug_sector_size);
3008		ret = 0;
3009	} else
3010		ret = fetch_to_dev_buffer(scp, fake_storep +
3011					       (lba * scsi_debug_sector_size),
3012					  scsi_debug_sector_size);
3013
3014	if (-1 == ret) {
3015		write_unlock_irqrestore(&atomic_rw, iflags);
3016		return (DID_ERROR << 16);
3017	} else if ((ret < (num * scsi_debug_sector_size)) &&
3018		 (SCSI_DEBUG_OPT_NOISE & scsi_debug_opts))
3019		sdev_printk(KERN_INFO, scp->device,
3020			    "%s: %s: cdb indicated=%u, IO sent=%d bytes\n",
3021			    my_name, "write same",
3022			    num * scsi_debug_sector_size, ret);
3023
3024	/* Copy first sector to remaining blocks */
3025	for (i = 1 ; i < num ; i++)
3026		memcpy(fake_storep + ((lba + i) * scsi_debug_sector_size),
3027		       fake_storep + (lba * scsi_debug_sector_size),
3028		       scsi_debug_sector_size);
3029
3030	if (scsi_debug_lbp())
3031		map_region(lba, num);
3032out:
3033	write_unlock_irqrestore(&atomic_rw, iflags);
3034
3035	return 0;
3036}
3037
3038static int
3039resp_write_same_10(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
3040{
3041	u8 *cmd = scp->cmnd;
3042	u32 lba;
3043	u16 num;
3044	u32 ei_lba = 0;
3045	bool unmap = false;
3046
3047	if (cmd[1] & 0x8) {
3048		if (scsi_debug_lbpws10 == 0) {
3049			mk_sense_invalid_fld(scp, SDEB_IN_CDB, 1, 3);
3050			return check_condition_result;
3051		} else
3052			unmap = true;
3053	}
3054	lba = get_unaligned_be32(cmd + 2);
3055	num = get_unaligned_be16(cmd + 7);
3056	if (num > scsi_debug_write_same_length) {
3057		mk_sense_invalid_fld(scp, SDEB_IN_CDB, 7, -1);
3058		return check_condition_result;
3059	}
3060	return resp_write_same(scp, lba, num, ei_lba, unmap, false);
3061}
3062
3063static int
3064resp_write_same_16(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
3065{
3066	u8 *cmd = scp->cmnd;
3067	u64 lba;
3068	u32 num;
3069	u32 ei_lba = 0;
3070	bool unmap = false;
3071	bool ndob = false;
3072
3073	if (cmd[1] & 0x8) {	/* UNMAP */
3074		if (scsi_debug_lbpws == 0) {
3075			mk_sense_invalid_fld(scp, SDEB_IN_CDB, 1, 3);
3076			return check_condition_result;
3077		} else
3078			unmap = true;
3079	}
3080	if (cmd[1] & 0x1)  /* NDOB (no data-out buffer, assumes zeroes) */
3081		ndob = true;
3082	lba = get_unaligned_be64(cmd + 2);
3083	num = get_unaligned_be32(cmd + 10);
3084	if (num > scsi_debug_write_same_length) {
3085		mk_sense_invalid_fld(scp, SDEB_IN_CDB, 10, -1);
3086		return check_condition_result;
3087	}
3088	return resp_write_same(scp, lba, num, ei_lba, unmap, ndob);
3089}
3090
3091/* Note the mode field is in the same position as the (lower) service action
3092 * field. For the Report supported operation codes command, SPC-4 suggests
3093 * each mode of this command should be reported separately; for future. */
3094static int
3095resp_write_buffer(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
3096{
3097	u8 *cmd = scp->cmnd;
3098	struct scsi_device *sdp = scp->device;
3099	struct sdebug_dev_info *dp;
3100	u8 mode;
3101
3102	mode = cmd[1] & 0x1f;
3103	switch (mode) {
3104	case 0x4:	/* download microcode (MC) and activate (ACT) */
3105		/* set UAs on this device only */
3106		set_bit(SDEBUG_UA_BUS_RESET, devip->uas_bm);
3107		set_bit(SDEBUG_UA_MICROCODE_CHANGED, devip->uas_bm);
3108		break;
3109	case 0x5:	/* download MC, save and ACT */
3110		set_bit(SDEBUG_UA_MICROCODE_CHANGED_WO_RESET, devip->uas_bm);
3111		break;
3112	case 0x6:	/* download MC with offsets and ACT */
3113		/* set UAs on most devices (LUs) in this target */
3114		list_for_each_entry(dp,
3115				    &devip->sdbg_host->dev_info_list,
3116				    dev_list)
3117			if (dp->target == sdp->id) {
3118				set_bit(SDEBUG_UA_BUS_RESET, dp->uas_bm);
3119				if (devip != dp)
3120					set_bit(SDEBUG_UA_MICROCODE_CHANGED,
3121						dp->uas_bm);
3122			}
3123		break;
3124	case 0x7:	/* download MC with offsets, save, and ACT */
3125		/* set UA on all devices (LUs) in this target */
3126		list_for_each_entry(dp,
3127				    &devip->sdbg_host->dev_info_list,
3128				    dev_list)
3129			if (dp->target == sdp->id)
3130				set_bit(SDEBUG_UA_MICROCODE_CHANGED_WO_RESET,
3131					dp->uas_bm);
3132		break;
3133	default:
3134		/* do nothing for this command for other mode values */
3135		break;
3136	}
3137	return 0;
3138}
3139
3140static int
3141resp_comp_write(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
3142{
3143	u8 *cmd = scp->cmnd;
3144	u8 *arr;
3145	u8 *fake_storep_hold;
3146	u64 lba;
3147	u32 dnum;
3148	u32 lb_size = scsi_debug_sector_size;
3149	u8 num;
3150	unsigned long iflags;
3151	int ret;
3152	int retval = 0;
3153
3154	lba = get_unaligned_be64(cmd + 2);
3155	num = cmd[13];		/* 1 to a maximum of 255 logical blocks */
3156	if (0 == num)
3157		return 0;	/* degenerate case, not an error */
3158	if (scsi_debug_dif == SD_DIF_TYPE2_PROTECTION &&
3159	    (cmd[1] & 0xe0)) {
3160		mk_sense_invalid_opcode(scp);
3161		return check_condition_result;
3162	}
3163	if ((scsi_debug_dif == SD_DIF_TYPE1_PROTECTION ||
3164	     scsi_debug_dif == SD_DIF_TYPE3_PROTECTION) &&
3165	    (cmd[1] & 0xe0) == 0)
3166		sdev_printk(KERN_ERR, scp->device, "Unprotected WR "
3167			    "to DIF device\n");
3168
3169	/* inline check_device_access_params() */
3170	if (lba + num > sdebug_capacity) {
3171		mk_sense_buffer(scp, ILLEGAL_REQUEST, LBA_OUT_OF_RANGE, 0);
3172		return check_condition_result;
3173	}
3174	/* transfer length excessive (tie in to block limits VPD page) */
3175	if (num > sdebug_store_sectors) {
3176		/* needs work to find which cdb byte 'num' comes from */
3177		mk_sense_buffer(scp, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB, 0);
3178		return check_condition_result;
3179	}
3180	dnum = 2 * num;
3181	arr = kzalloc(dnum * lb_size, GFP_ATOMIC);
3182	if (NULL == arr) {
3183		mk_sense_buffer(scp, ILLEGAL_REQUEST, INSUFF_RES_ASC,
3184				INSUFF_RES_ASCQ);
3185		return check_condition_result;
3186	}
3187
3188	write_lock_irqsave(&atomic_rw, iflags);
3189
3190	/* trick do_device_access() to fetch both compare and write buffers
3191	 * from data-in into arr. Safe (atomic) since write_lock held. */
3192	fake_storep_hold = fake_storep;
3193	fake_storep = arr;
3194	ret = do_device_access(scp, 0, dnum, true);
3195	fake_storep = fake_storep_hold;
3196	if (ret == -1) {
3197		retval = DID_ERROR << 16;
3198		goto cleanup;
3199	} else if ((ret < (dnum * lb_size)) &&
3200		 (SCSI_DEBUG_OPT_NOISE & scsi_debug_opts))
3201		sdev_printk(KERN_INFO, scp->device, "%s: compare_write: cdb "
3202			    "indicated=%u, IO sent=%d bytes\n", my_name,
3203			    dnum * lb_size, ret);
3204	if (!comp_write_worker(lba, num, arr)) {
3205		mk_sense_buffer(scp, MISCOMPARE, MISCOMPARE_VERIFY_ASC, 0);
3206		retval = check_condition_result;
3207		goto cleanup;
3208	}
3209	if (scsi_debug_lbp())
3210		map_region(lba, num);
3211cleanup:
3212	write_unlock_irqrestore(&atomic_rw, iflags);
3213	kfree(arr);
3214	return retval;
3215}
3216
3217struct unmap_block_desc {
3218	__be64	lba;
3219	__be32	blocks;
3220	__be32	__reserved;
3221};
3222
3223static int
3224resp_unmap(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
3225{
3226	unsigned char *buf;
3227	struct unmap_block_desc *desc;
3228	unsigned int i, payload_len, descriptors;
3229	int ret;
3230	unsigned long iflags;
3231
3232
3233	if (!scsi_debug_lbp())
3234		return 0;	/* fib and say its done */
3235	payload_len = get_unaligned_be16(scp->cmnd + 7);
3236	BUG_ON(scsi_bufflen(scp) != payload_len);
3237
3238	descriptors = (payload_len - 8) / 16;
3239	if (descriptors > scsi_debug_unmap_max_desc) {
3240		mk_sense_invalid_fld(scp, SDEB_IN_CDB, 7, -1);
3241		return check_condition_result;
3242	}
3243
3244	buf = kmalloc(scsi_bufflen(scp), GFP_ATOMIC);
3245	if (!buf) {
3246		mk_sense_buffer(scp, ILLEGAL_REQUEST, INSUFF_RES_ASC,
3247				INSUFF_RES_ASCQ);
3248		return check_condition_result;
3249	}
3250
3251	scsi_sg_copy_to_buffer(scp, buf, scsi_bufflen(scp));
3252
3253	BUG_ON(get_unaligned_be16(&buf[0]) != payload_len - 2);
3254	BUG_ON(get_unaligned_be16(&buf[2]) != descriptors * 16);
3255
3256	desc = (void *)&buf[8];
3257
3258	write_lock_irqsave(&atomic_rw, iflags);
3259
3260	for (i = 0 ; i < descriptors ; i++) {
3261		unsigned long long lba = get_unaligned_be64(&desc[i].lba);
3262		unsigned int num = get_unaligned_be32(&desc[i].blocks);
3263
3264		ret = check_device_access_params(scp, lba, num);
3265		if (ret)
3266			goto out;
3267
3268		unmap_region(lba, num);
3269	}
3270
3271	ret = 0;
3272
3273out:
3274	write_unlock_irqrestore(&atomic_rw, iflags);
3275	kfree(buf);
3276
3277	return ret;
3278}
3279
3280#define SDEBUG_GET_LBA_STATUS_LEN 32
3281
3282static int
3283resp_get_lba_status(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
3284{
3285	u8 *cmd = scp->cmnd;
3286	u64 lba;
3287	u32 alloc_len, mapped, num;
3288	u8 arr[SDEBUG_GET_LBA_STATUS_LEN];
3289	int ret;
3290
3291	lba = get_unaligned_be64(cmd + 2);
3292	alloc_len = get_unaligned_be32(cmd + 10);
3293
3294	if (alloc_len < 24)
3295		return 0;
3296
3297	ret = check_device_access_params(scp, lba, 1);
3298	if (ret)
3299		return ret;
3300
3301	if (scsi_debug_lbp())
3302		mapped = map_state(lba, &num);
3303	else {
3304		mapped = 1;
3305		/* following just in case virtual_gb changed */
3306		sdebug_capacity = get_sdebug_capacity();
3307		if (sdebug_capacity - lba <= 0xffffffff)
3308			num = sdebug_capacity - lba;
3309		else
3310			num = 0xffffffff;
3311	}
3312
3313	memset(arr, 0, SDEBUG_GET_LBA_STATUS_LEN);
3314	put_unaligned_be32(20, arr);		/* Parameter Data Length */
3315	put_unaligned_be64(lba, arr + 8);	/* LBA */
3316	put_unaligned_be32(num, arr + 16);	/* Number of blocks */
3317	arr[20] = !mapped;		/* prov_stat=0: mapped; 1: dealloc */
3318
3319	return fill_from_dev_buffer(scp, arr, SDEBUG_GET_LBA_STATUS_LEN);
3320}
3321
3322#define SDEBUG_RLUN_ARR_SZ 256
3323
3324static int resp_report_luns(struct scsi_cmnd * scp,
3325			    struct sdebug_dev_info * devip)
3326{
3327	unsigned int alloc_len;
3328	int lun_cnt, i, upper, num, n, want_wlun, shortish;
3329	u64 lun;
3330	unsigned char *cmd = scp->cmnd;
3331	int select_report = (int)cmd[2];
3332	struct scsi_lun *one_lun;
3333	unsigned char arr[SDEBUG_RLUN_ARR_SZ];
3334	unsigned char * max_addr;
3335
3336	clear_luns_changed_on_target(devip);
3337	alloc_len = cmd[9] + (cmd[8] << 8) + (cmd[7] << 16) + (cmd[6] << 24);
3338	shortish = (alloc_len < 4);
3339	if (shortish || (select_report > 2)) {
3340		mk_sense_invalid_fld(scp, SDEB_IN_CDB, shortish ? 6 : 2, -1);
3341		return check_condition_result;
3342	}
3343	/* can produce response with up to 16k luns (lun 0 to lun 16383) */
3344	memset(arr, 0, SDEBUG_RLUN_ARR_SZ);
3345	lun_cnt = scsi_debug_max_luns;
3346	if (1 == select_report)
3347		lun_cnt = 0;
3348	else if (scsi_debug_no_lun_0 && (lun_cnt > 0))
3349		--lun_cnt;
3350	want_wlun = (select_report > 0) ? 1 : 0;
3351	num = lun_cnt + want_wlun;
3352	arr[2] = ((sizeof(struct scsi_lun) * num) >> 8) & 0xff;
3353	arr[3] = (sizeof(struct scsi_lun) * num) & 0xff;
3354	n = min((int)((SDEBUG_RLUN_ARR_SZ - 8) /
3355			    sizeof(struct scsi_lun)), num);
3356	if (n < num) {
3357		want_wlun = 0;
3358		lun_cnt = n;
3359	}
3360	one_lun = (struct scsi_lun *) &arr[8];
3361	max_addr = arr + SDEBUG_RLUN_ARR_SZ;
3362	for (i = 0, lun = (scsi_debug_no_lun_0 ? 1 : 0);
3363             ((i < lun_cnt) && ((unsigned char *)(one_lun + i) < max_addr));
3364	     i++, lun++) {
3365		upper = (lun >> 8) & 0x3f;
3366		if (upper)
3367			one_lun[i].scsi_lun[0] =
3368			    (upper | (SAM2_LUN_ADDRESS_METHOD << 6));
3369		one_lun[i].scsi_lun[1] = lun & 0xff;
3370	}
3371	if (want_wlun) {
3372		one_lun[i].scsi_lun[0] = (SAM2_WLUN_REPORT_LUNS >> 8) & 0xff;
3373		one_lun[i].scsi_lun[1] = SAM2_WLUN_REPORT_LUNS & 0xff;
3374		i++;
3375	}
3376	alloc_len = (unsigned char *)(one_lun + i) - arr;
3377	return fill_from_dev_buffer(scp, arr,
3378				    min((int)alloc_len, SDEBUG_RLUN_ARR_SZ));
3379}
3380
3381static int resp_xdwriteread(struct scsi_cmnd *scp, unsigned long long lba,
3382			    unsigned int num, struct sdebug_dev_info *devip)
3383{
3384	int j;
3385	unsigned char *kaddr, *buf;
3386	unsigned int offset;
3387	struct scsi_data_buffer *sdb = scsi_in(scp);
3388	struct sg_mapping_iter miter;
3389
3390	/* better not to use temporary buffer. */
3391	buf = kmalloc(scsi_bufflen(scp), GFP_ATOMIC);
3392	if (!buf) {
3393		mk_sense_buffer(scp, ILLEGAL_REQUEST, INSUFF_RES_ASC,
3394				INSUFF_RES_ASCQ);
3395		return check_condition_result;
3396	}
3397
3398	scsi_sg_copy_to_buffer(scp, buf, scsi_bufflen(scp));
3399
3400	offset = 0;
3401	sg_miter_start(&miter, sdb->table.sgl, sdb->table.nents,
3402			SG_MITER_ATOMIC | SG_MITER_TO_SG);
3403
3404	while (sg_miter_next(&miter)) {
3405		kaddr = miter.addr;
3406		for (j = 0; j < miter.length; j++)
3407			*(kaddr + j) ^= *(buf + offset + j);
3408
3409		offset += miter.length;
3410	}
3411	sg_miter_stop(&miter);
3412	kfree(buf);
3413
3414	return 0;
3415}
3416
3417static int
3418resp_xdwriteread_10(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
3419{
3420	u8 *cmd = scp->cmnd;
3421	u64 lba;
3422	u32 num;
3423	int errsts;
3424
3425	if (!scsi_bidi_cmnd(scp)) {
3426		mk_sense_buffer(scp, ILLEGAL_REQUEST, INSUFF_RES_ASC,
3427				INSUFF_RES_ASCQ);
3428		return check_condition_result;
3429	}
3430	errsts = resp_read_dt0(scp, devip);
3431	if (errsts)
3432		return errsts;
3433	if (!(cmd[1] & 0x4)) {		/* DISABLE_WRITE is not set */
3434		errsts = resp_write_dt0(scp, devip);
3435		if (errsts)
3436			return errsts;
3437	}
3438	lba = get_unaligned_be32(cmd + 2);
3439	num = get_unaligned_be16(cmd + 7);
3440	return resp_xdwriteread(scp, lba, num, devip);
3441}
3442
3443/* When timer or tasklet goes off this function is called. */
3444static void sdebug_q_cmd_complete(unsigned long indx)
3445{
3446	int qa_indx;
3447	int retiring = 0;
3448	unsigned long iflags;
3449	struct sdebug_queued_cmd *sqcp;
3450	struct scsi_cmnd *scp;
3451	struct sdebug_dev_info *devip;
3452
3453	atomic_inc(&sdebug_completions);
3454	qa_indx = indx;
3455	if ((qa_indx < 0) || (qa_indx >= SCSI_DEBUG_CANQUEUE)) {
3456		pr_err("%s: wild qa_indx=%d\n", __func__, qa_indx);
3457		return;
3458	}
3459	spin_lock_irqsave(&queued_arr_lock, iflags);
3460	sqcp = &queued_arr[qa_indx];
3461	scp = sqcp->a_cmnd;
3462	if (NULL == scp) {
3463		spin_unlock_irqrestore(&queued_arr_lock, iflags);
3464		pr_err("%s: scp is NULL\n", __func__);
3465		return;
3466	}
3467	devip = (struct sdebug_dev_info *)scp->device->hostdata;
3468	if (devip)
3469		atomic_dec(&devip->num_in_q);
3470	else
3471		pr_err("%s: devip=NULL\n", __func__);
3472	if (atomic_read(&retired_max_queue) > 0)
3473		retiring = 1;
3474
3475	sqcp->a_cmnd = NULL;
3476	if (!test_and_clear_bit(qa_indx, queued_in_use_bm)) {
3477		spin_unlock_irqrestore(&queued_arr_lock, iflags);
3478		pr_err("%s: Unexpected completion\n", __func__);
3479		return;
3480	}
3481
3482	if (unlikely(retiring)) {	/* user has reduced max_queue */
3483		int k, retval;
3484
3485		retval = atomic_read(&retired_max_queue);
3486		if (qa_indx >= retval) {
3487			spin_unlock_irqrestore(&queued_arr_lock, iflags);
3488			pr_err("%s: index %d too large\n", __func__, retval);
3489			return;
3490		}
3491		k = find_last_bit(queued_in_use_bm, retval);
3492		if ((k < scsi_debug_max_queue) || (k == retval))
3493			atomic_set(&retired_max_queue, 0);
3494		else
3495			atomic_set(&retired_max_queue, k + 1);
3496	}
3497	spin_unlock_irqrestore(&queued_arr_lock, iflags);
3498	scp->scsi_done(scp); /* callback to mid level */
3499}
3500
3501/* When high resolution timer goes off this function is called. */
3502static enum hrtimer_restart
3503sdebug_q_cmd_hrt_complete(struct hrtimer *timer)
3504{
3505	int qa_indx;
3506	int retiring = 0;
3507	unsigned long iflags;
3508	struct sdebug_hrtimer *sd_hrtp = (struct sdebug_hrtimer *)timer;
3509	struct sdebug_queued_cmd *sqcp;
3510	struct scsi_cmnd *scp;
3511	struct sdebug_dev_info *devip;
3512
3513	atomic_inc(&sdebug_completions);
3514	qa_indx = sd_hrtp->qa_indx;
3515	if ((qa_indx < 0) || (qa_indx >= SCSI_DEBUG_CANQUEUE)) {
3516		pr_err("%s: wild qa_indx=%d\n", __func__, qa_indx);
3517		goto the_end;
3518	}
3519	spin_lock_irqsave(&queued_arr_lock, iflags);
3520	sqcp = &queued_arr[qa_indx];
3521	scp = sqcp->a_cmnd;
3522	if (NULL == scp) {
3523		spin_unlock_irqrestore(&queued_arr_lock, iflags);
3524		pr_err("%s: scp is NULL\n", __func__);
3525		goto the_end;
3526	}
3527	devip = (struct sdebug_dev_info *)scp->device->hostdata;
3528	if (devip)
3529		atomic_dec(&devip->num_in_q);
3530	else
3531		pr_err("%s: devip=NULL\n", __func__);
3532	if (atomic_read(&retired_max_queue) > 0)
3533		retiring = 1;
3534
3535	sqcp->a_cmnd = NULL;
3536	if (!test_and_clear_bit(qa_indx, queued_in_use_bm)) {
3537		spin_unlock_irqrestore(&queued_arr_lock, iflags);
3538		pr_err("%s: Unexpected completion\n", __func__);
3539		goto the_end;
3540	}
3541
3542	if (unlikely(retiring)) {	/* user has reduced max_queue */
3543		int k, retval;
3544
3545		retval = atomic_read(&retired_max_queue);
3546		if (qa_indx >= retval) {
3547			spin_unlock_irqrestore(&queued_arr_lock, iflags);
3548			pr_err("%s: index %d too large\n", __func__, retval);
3549			goto the_end;
3550		}
3551		k = find_last_bit(queued_in_use_bm, retval);
3552		if ((k < scsi_debug_max_queue) || (k == retval))
3553			atomic_set(&retired_max_queue, 0);
3554		else
3555			atomic_set(&retired_max_queue, k + 1);
3556	}
3557	spin_unlock_irqrestore(&queued_arr_lock, iflags);
3558	scp->scsi_done(scp); /* callback to mid level */
3559the_end:
3560	return HRTIMER_NORESTART;
3561}
3562
3563static struct sdebug_dev_info *
3564sdebug_device_create(struct sdebug_host_info *sdbg_host, gfp_t flags)
3565{
3566	struct sdebug_dev_info *devip;
3567
3568	devip = kzalloc(sizeof(*devip), flags);
3569	if (devip) {
3570		devip->sdbg_host = sdbg_host;
3571		list_add_tail(&devip->dev_list, &sdbg_host->dev_info_list);
3572	}
3573	return devip;
3574}
3575
3576static struct sdebug_dev_info * devInfoReg(struct scsi_device * sdev)
3577{
3578	struct sdebug_host_info * sdbg_host;
3579	struct sdebug_dev_info * open_devip = NULL;
3580	struct sdebug_dev_info * devip =
3581			(struct sdebug_dev_info *)sdev->hostdata;
3582
3583	if (devip)
3584		return devip;
3585	sdbg_host = *(struct sdebug_host_info **)shost_priv(sdev->host);
3586	if (!sdbg_host) {
3587		pr_err("%s: Host info NULL\n", __func__);
3588		return NULL;
3589        }
3590	list_for_each_entry(devip, &sdbg_host->dev_info_list, dev_list) {
3591		if ((devip->used) && (devip->channel == sdev->channel) &&
3592                    (devip->target == sdev->id) &&
3593                    (devip->lun == sdev->lun))
3594                        return devip;
3595		else {
3596			if ((!devip->used) && (!open_devip))
3597				open_devip = devip;
3598		}
3599	}
3600	if (!open_devip) { /* try and make a new one */
3601		open_devip = sdebug_device_create(sdbg_host, GFP_ATOMIC);
3602		if (!open_devip) {
3603			printk(KERN_ERR "%s: out of memory at line %d\n",
3604				__func__, __LINE__);
3605			return NULL;
3606		}
3607	}
3608
3609	open_devip->channel = sdev->channel;
3610	open_devip->target = sdev->id;
3611	open_devip->lun = sdev->lun;
3612	open_devip->sdbg_host = sdbg_host;
3613	atomic_set(&open_devip->num_in_q, 0);
3614	set_bit(SDEBUG_UA_POR, open_devip->uas_bm);
3615	open_devip->used = true;
3616	return open_devip;
3617}
3618
3619static int scsi_debug_slave_alloc(struct scsi_device *sdp)
3620{
3621	if (SCSI_DEBUG_OPT_NOISE & scsi_debug_opts)
3622		printk(KERN_INFO "scsi_debug: slave_alloc <%u %u %u %llu>\n",
3623		       sdp->host->host_no, sdp->channel, sdp->id, sdp->lun);
3624	queue_flag_set_unlocked(QUEUE_FLAG_BIDI, sdp->request_queue);
3625	return 0;
3626}
3627
3628static int scsi_debug_slave_configure(struct scsi_device *sdp)
3629{
3630	struct sdebug_dev_info *devip;
3631
3632	if (SCSI_DEBUG_OPT_NOISE & scsi_debug_opts)
3633		printk(KERN_INFO "scsi_debug: slave_configure <%u %u %u %llu>\n",
3634		       sdp->host->host_no, sdp->channel, sdp->id, sdp->lun);
3635	if (sdp->host->max_cmd_len != SCSI_DEBUG_MAX_CMD_LEN)
3636		sdp->host->max_cmd_len = SCSI_DEBUG_MAX_CMD_LEN;
3637	devip = devInfoReg(sdp);
3638	if (NULL == devip)
3639		return 1;	/* no resources, will be marked offline */
3640	sdp->hostdata = devip;
3641	blk_queue_max_segment_size(sdp->request_queue, -1U);
3642	if (scsi_debug_no_uld)
3643		sdp->no_uld_attach = 1;
3644	return 0;
3645}
3646
3647static void scsi_debug_slave_destroy(struct scsi_device *sdp)
3648{
3649	struct sdebug_dev_info *devip =
3650		(struct sdebug_dev_info *)sdp->hostdata;
3651
3652	if (SCSI_DEBUG_OPT_NOISE & scsi_debug_opts)
3653		printk(KERN_INFO "scsi_debug: slave_destroy <%u %u %u %llu>\n",
3654		       sdp->host->host_no, sdp->channel, sdp->id, sdp->lun);
3655	if (devip) {
3656		/* make this slot available for re-use */
3657		devip->used = false;
3658		sdp->hostdata = NULL;
3659	}
3660}
3661
3662/* Returns 1 if cmnd found (deletes its timer or tasklet), else returns 0 */
3663static int stop_queued_cmnd(struct scsi_cmnd *cmnd)
3664{
3665	unsigned long iflags;
3666	int k, qmax, r_qmax;
3667	struct sdebug_queued_cmd *sqcp;
3668	struct sdebug_dev_info *devip;
3669
3670	spin_lock_irqsave(&queued_arr_lock, iflags);
3671	qmax = scsi_debug_max_queue;
3672	r_qmax = atomic_read(&retired_max_queue);
3673	if (r_qmax > qmax)
3674		qmax = r_qmax;
3675	for (k = 0; k < qmax; ++k) {
3676		if (test_bit(k, queued_in_use_bm)) {
3677			sqcp = &queued_arr[k];
3678			if (cmnd == sqcp->a_cmnd) {
3679				devip = (struct sdebug_dev_info *)
3680					cmnd->device->hostdata;
3681				if (devip)
3682					atomic_dec(&devip->num_in_q);
3683				sqcp->a_cmnd = NULL;
3684				spin_unlock_irqrestore(&queued_arr_lock,
3685						       iflags);
3686				if (scsi_debug_ndelay > 0) {
3687					if (sqcp->sd_hrtp)
3688						hrtimer_cancel(
3689							&sqcp->sd_hrtp->hrt);
3690				} else if (scsi_debug_delay > 0) {
3691					if (sqcp->cmnd_timerp)
3692						del_timer_sync(
3693							sqcp->cmnd_timerp);
3694				} else if (scsi_debug_delay < 0) {
3695					if (sqcp->tletp)
3696						tasklet_kill(sqcp->tletp);
3697				}
3698				clear_bit(k, queued_in_use_bm);
3699				return 1;
3700			}
3701		}
3702	}
3703	spin_unlock_irqrestore(&queued_arr_lock, iflags);
3704	return 0;
3705}
3706
3707/* Deletes (stops) timers or tasklets of all queued commands */
3708static void stop_all_queued(void)
3709{
3710	unsigned long iflags;
3711	int k;
3712	struct sdebug_queued_cmd *sqcp;
3713	struct sdebug_dev_info *devip;
3714
3715	spin_lock_irqsave(&queued_arr_lock, iflags);
3716	for (k = 0; k < SCSI_DEBUG_CANQUEUE; ++k) {
3717		if (test_bit(k, queued_in_use_bm)) {
3718			sqcp = &queued_arr[k];
3719			if (sqcp->a_cmnd) {
3720				devip = (struct sdebug_dev_info *)
3721					sqcp->a_cmnd->device->hostdata;
3722				if (devip)
3723					atomic_dec(&devip->num_in_q);
3724				sqcp->a_cmnd = NULL;
3725				spin_unlock_irqrestore(&queued_arr_lock,
3726						       iflags);
3727				if (scsi_debug_ndelay > 0) {
3728					if (sqcp->sd_hrtp)
3729						hrtimer_cancel(
3730							&sqcp->sd_hrtp->hrt);
3731				} else if (scsi_debug_delay > 0) {
3732					if (sqcp->cmnd_timerp)
3733						del_timer_sync(
3734							sqcp->cmnd_timerp);
3735				} else if (scsi_debug_delay < 0) {
3736					if (sqcp->tletp)
3737						tasklet_kill(sqcp->tletp);
3738				}
3739				clear_bit(k, queued_in_use_bm);
3740				spin_lock_irqsave(&queued_arr_lock, iflags);
3741			}
3742		}
3743	}
3744	spin_unlock_irqrestore(&queued_arr_lock, iflags);
3745}
3746
3747/* Free queued command memory on heap */
3748static void free_all_queued(void)
3749{
3750	unsigned long iflags;
3751	int k;
3752	struct sdebug_queued_cmd *sqcp;
3753
3754	spin_lock_irqsave(&queued_arr_lock, iflags);
3755	for (k = 0; k < SCSI_DEBUG_CANQUEUE; ++k) {
3756		sqcp = &queued_arr[k];
3757		kfree(sqcp->cmnd_timerp);
3758		sqcp->cmnd_timerp = NULL;
3759		kfree(sqcp->tletp);
3760		sqcp->tletp = NULL;
3761		kfree(sqcp->sd_hrtp);
3762		sqcp->sd_hrtp = NULL;
3763	}
3764	spin_unlock_irqrestore(&queued_arr_lock, iflags);
3765}
3766
3767static int scsi_debug_abort(struct scsi_cmnd *SCpnt)
3768{
3769	++num_aborts;
3770	if (SCpnt) {
3771		if (SCpnt->device &&
3772		    (SCSI_DEBUG_OPT_ALL_NOISE & scsi_debug_opts))
3773			sdev_printk(KERN_INFO, SCpnt->device, "%s\n",
3774				    __func__);
3775		stop_queued_cmnd(SCpnt);
3776	}
3777	return SUCCESS;
3778}
3779
3780static int scsi_debug_device_reset(struct scsi_cmnd * SCpnt)
3781{
3782	struct sdebug_dev_info * devip;
3783
3784	++num_dev_resets;
3785	if (SCpnt && SCpnt->device) {
3786		struct scsi_device *sdp = SCpnt->device;
3787
3788		if (SCSI_DEBUG_OPT_ALL_NOISE & scsi_debug_opts)
3789			sdev_printk(KERN_INFO, sdp, "%s\n", __func__);
3790		devip = devInfoReg(sdp);
3791		if (devip)
3792			set_bit(SDEBUG_UA_POR, devip->uas_bm);
3793	}
3794	return SUCCESS;
3795}
3796
3797static int scsi_debug_target_reset(struct scsi_cmnd *SCpnt)
3798{
3799	struct sdebug_host_info *sdbg_host;
3800	struct sdebug_dev_info *devip;
3801	struct scsi_device *sdp;
3802	struct Scsi_Host *hp;
3803	int k = 0;
3804
3805	++num_target_resets;
3806	if (!SCpnt)
3807		goto lie;
3808	sdp = SCpnt->device;
3809	if (!sdp)
3810		goto lie;
3811	if (SCSI_DEBUG_OPT_ALL_NOISE & scsi_debug_opts)
3812		sdev_printk(KERN_INFO, sdp, "%s\n", __func__);
3813	hp = sdp->host;
3814	if (!hp)
3815		goto lie;
3816	sdbg_host = *(struct sdebug_host_info **)shost_priv(hp);
3817	if (sdbg_host) {
3818		list_for_each_entry(devip,
3819				    &sdbg_host->dev_info_list,
3820				    dev_list)
3821			if (devip->target == sdp->id) {
3822				set_bit(SDEBUG_UA_BUS_RESET, devip->uas_bm);
3823				++k;
3824			}
3825	}
3826	if (SCSI_DEBUG_OPT_RESET_NOISE & scsi_debug_opts)
3827		sdev_printk(KERN_INFO, sdp,
3828			    "%s: %d device(s) found in target\n", __func__, k);
3829lie:
3830	return SUCCESS;
3831}
3832
3833static int scsi_debug_bus_reset(struct scsi_cmnd * SCpnt)
3834{
3835	struct sdebug_host_info *sdbg_host;
3836	struct sdebug_dev_info *devip;
3837        struct scsi_device * sdp;
3838        struct Scsi_Host * hp;
3839	int k = 0;
3840
3841	++num_bus_resets;
3842	if (!(SCpnt && SCpnt->device))
3843		goto lie;
3844	sdp = SCpnt->device;
3845	if (SCSI_DEBUG_OPT_ALL_NOISE & scsi_debug_opts)
3846		sdev_printk(KERN_INFO, sdp, "%s\n", __func__);
3847	hp = sdp->host;
3848	if (hp) {
3849		sdbg_host = *(struct sdebug_host_info **)shost_priv(hp);
3850		if (sdbg_host) {
3851			list_for_each_entry(devip,
3852                                            &sdbg_host->dev_info_list,
3853					    dev_list) {
3854				set_bit(SDEBUG_UA_BUS_RESET, devip->uas_bm);
3855				++k;
3856			}
3857		}
3858	}
3859	if (SCSI_DEBUG_OPT_RESET_NOISE & scsi_debug_opts)
3860		sdev_printk(KERN_INFO, sdp,
3861			    "%s: %d device(s) found in host\n", __func__, k);
3862lie:
3863	return SUCCESS;
3864}
3865
3866static int scsi_debug_host_reset(struct scsi_cmnd * SCpnt)
3867{
3868	struct sdebug_host_info * sdbg_host;
3869	struct sdebug_dev_info *devip;
3870	int k = 0;
3871
3872	++num_host_resets;
3873	if ((SCpnt->device) && (SCSI_DEBUG_OPT_ALL_NOISE & scsi_debug_opts))
3874		sdev_printk(KERN_INFO, SCpnt->device, "%s\n", __func__);
3875        spin_lock(&sdebug_host_list_lock);
3876        list_for_each_entry(sdbg_host, &sdebug_host_list, host_list) {
3877		list_for_each_entry(devip, &sdbg_host->dev_info_list,
3878				    dev_list) {
3879			set_bit(SDEBUG_UA_BUS_RESET, devip->uas_bm);
3880			++k;
3881		}
3882        }
3883        spin_unlock(&sdebug_host_list_lock);
3884	stop_all_queued();
3885	if (SCSI_DEBUG_OPT_RESET_NOISE & scsi_debug_opts)
3886		sdev_printk(KERN_INFO, SCpnt->device,
3887			    "%s: %d device(s) found\n", __func__, k);
3888	return SUCCESS;
3889}
3890
3891static void __init sdebug_build_parts(unsigned char *ramp,
3892				      unsigned long store_size)
3893{
3894	struct partition * pp;
3895	int starts[SDEBUG_MAX_PARTS + 2];
3896	int sectors_per_part, num_sectors, k;
3897	int heads_by_sects, start_sec, end_sec;
3898
3899	/* assume partition table already zeroed */
3900	if ((scsi_debug_num_parts < 1) || (store_size < 1048576))
3901		return;
3902	if (scsi_debug_num_parts > SDEBUG_MAX_PARTS) {
3903		scsi_debug_num_parts = SDEBUG_MAX_PARTS;
3904		pr_warn("%s: reducing partitions to %d\n", __func__,
3905			SDEBUG_MAX_PARTS);
3906	}
3907	num_sectors = (int)sdebug_store_sectors;
3908	sectors_per_part = (num_sectors - sdebug_sectors_per)
3909			   / scsi_debug_num_parts;
3910	heads_by_sects = sdebug_heads * sdebug_sectors_per;
3911        starts[0] = sdebug_sectors_per;
3912	for (k = 1; k < scsi_debug_num_parts; ++k)
3913		starts[k] = ((k * sectors_per_part) / heads_by_sects)
3914			    * heads_by_sects;
3915	starts[scsi_debug_num_parts] = num_sectors;
3916	starts[scsi_debug_num_parts + 1] = 0;
3917
3918	ramp[510] = 0x55;	/* magic partition markings */
3919	ramp[511] = 0xAA;
3920	pp = (struct partition *)(ramp + 0x1be);
3921	for (k = 0; starts[k + 1]; ++k, ++pp) {
3922		start_sec = starts[k];
3923		end_sec = starts[k + 1] - 1;
3924		pp->boot_ind = 0;
3925
3926		pp->cyl = start_sec / heads_by_sects;
3927		pp->head = (start_sec - (pp->cyl * heads_by_sects))
3928			   / sdebug_sectors_per;
3929		pp->sector = (start_sec % sdebug_sectors_per) + 1;
3930
3931		pp->end_cyl = end_sec / heads_by_sects;
3932		pp->end_head = (end_sec - (pp->end_cyl * heads_by_sects))
3933			       / sdebug_sectors_per;
3934		pp->end_sector = (end_sec % sdebug_sectors_per) + 1;
3935
3936		pp->start_sect = cpu_to_le32(start_sec);
3937		pp->nr_sects = cpu_to_le32(end_sec - start_sec + 1);
3938		pp->sys_ind = 0x83;	/* plain Linux partition */
3939	}
3940}
3941
3942static int
3943schedule_resp(struct scsi_cmnd *cmnd, struct sdebug_dev_info *devip,
3944	      int scsi_result, int delta_jiff)
3945{
3946	unsigned long iflags;
3947	int k, num_in_q, qdepth, inject;
3948	struct sdebug_queued_cmd *sqcp = NULL;
3949	struct scsi_device *sdp = cmnd->device;
3950
3951	if (NULL == cmnd || NULL == devip) {
3952		pr_warn("%s: called with NULL cmnd or devip pointer\n",
3953			__func__);
3954		/* no particularly good error to report back */
3955		return SCSI_MLQUEUE_HOST_BUSY;
3956	}
3957	if ((scsi_result) && (SCSI_DEBUG_OPT_NOISE & scsi_debug_opts))
3958		sdev_printk(KERN_INFO, sdp, "%s: non-zero result=0x%x\n",
3959			    __func__, scsi_result);
3960	if (delta_jiff == 0)
3961		goto respond_in_thread;
3962
3963	/* schedule the response at a later time if resources permit */
3964	spin_lock_irqsave(&queued_arr_lock, iflags);
3965	num_in_q = atomic_read(&devip->num_in_q);
3966	qdepth = cmnd->device->queue_depth;
3967	inject = 0;
3968	if ((qdepth > 0) && (num_in_q >= qdepth)) {
3969		if (scsi_result) {
3970			spin_unlock_irqrestore(&queued_arr_lock, iflags);
3971			goto respond_in_thread;
3972		} else
3973			scsi_result = device_qfull_result;
3974	} else if ((scsi_debug_every_nth != 0) &&
3975		   (SCSI_DEBUG_OPT_RARE_TSF & scsi_debug_opts) &&
3976		   (scsi_result == 0)) {
3977		if ((num_in_q == (qdepth - 1)) &&
3978		    (atomic_inc_return(&sdebug_a_tsf) >=
3979		     abs(scsi_debug_every_nth))) {
3980			atomic_set(&sdebug_a_tsf, 0);
3981			inject = 1;
3982			scsi_result = device_qfull_result;
3983		}
3984	}
3985
3986	k = find_first_zero_bit(queued_in_use_bm, scsi_debug_max_queue);
3987	if (k >= scsi_debug_max_queue) {
3988		spin_unlock_irqrestore(&queued_arr_lock, iflags);
3989		if (scsi_result)
3990			goto respond_in_thread;
3991		else if (SCSI_DEBUG_OPT_ALL_TSF & scsi_debug_opts)
3992			scsi_result = device_qfull_result;
3993		if (SCSI_DEBUG_OPT_Q_NOISE & scsi_debug_opts)
3994			sdev_printk(KERN_INFO, sdp,
3995				    "%s: max_queue=%d exceeded, %s\n",
3996				    __func__, scsi_debug_max_queue,
3997				    (scsi_result ?  "status: TASK SET FULL" :
3998						    "report: host busy"));
3999		if (scsi_result)
4000			goto respond_in_thread;
4001		else
4002			return SCSI_MLQUEUE_HOST_BUSY;
4003	}
4004	__set_bit(k, queued_in_use_bm);
4005	atomic_inc(&devip->num_in_q);
4006	sqcp = &queued_arr[k];
4007	sqcp->a_cmnd = cmnd;
4008	cmnd->result = scsi_result;
4009	spin_unlock_irqrestore(&queued_arr_lock, iflags);
4010	if (delta_jiff > 0) {
4011		if (NULL == sqcp->cmnd_timerp) {
4012			sqcp->cmnd_timerp = kmalloc(sizeof(struct timer_list),
4013						    GFP_ATOMIC);
4014			if (NULL == sqcp->cmnd_timerp)
4015				return SCSI_MLQUEUE_HOST_BUSY;
4016			init_timer(sqcp->cmnd_timerp);
4017		}
4018		sqcp->cmnd_timerp->function = sdebug_q_cmd_complete;
4019		sqcp->cmnd_timerp->data = k;
4020		sqcp->cmnd_timerp->expires = get_jiffies_64() + delta_jiff;
4021		add_timer(sqcp->cmnd_timerp);
4022	} else if (scsi_debug_ndelay > 0) {
4023		ktime_t kt = ktime_set(0, scsi_debug_ndelay);
4024		struct sdebug_hrtimer *sd_hp = sqcp->sd_hrtp;
4025
4026		if (NULL == sd_hp) {
4027			sd_hp = kmalloc(sizeof(*sd_hp), GFP_ATOMIC);
4028			if (NULL == sd_hp)
4029				return SCSI_MLQUEUE_HOST_BUSY;
4030			sqcp->sd_hrtp = sd_hp;
4031			hrtimer_init(&sd_hp->hrt, CLOCK_MONOTONIC,
4032				     HRTIMER_MODE_REL);
4033			sd_hp->hrt.function = sdebug_q_cmd_hrt_complete;
4034			sd_hp->qa_indx = k;
4035		}
4036		hrtimer_start(&sd_hp->hrt, kt, HRTIMER_MODE_REL);
4037	} else {	/* delay < 0 */
4038		if (NULL == sqcp->tletp) {
4039			sqcp->tletp = kmalloc(sizeof(*sqcp->tletp),
4040					      GFP_ATOMIC);
4041			if (NULL == sqcp->tletp)
4042				return SCSI_MLQUEUE_HOST_BUSY;
4043			tasklet_init(sqcp->tletp,
4044				     sdebug_q_cmd_complete, k);
4045		}
4046		if (-1 == delta_jiff)
4047			tasklet_hi_schedule(sqcp->tletp);
4048		else
4049			tasklet_schedule(sqcp->tletp);
4050	}
4051	if ((SCSI_DEBUG_OPT_Q_NOISE & scsi_debug_opts) &&
4052	    (scsi_result == device_qfull_result))
4053		sdev_printk(KERN_INFO, sdp,
4054			    "%s: num_in_q=%d +1, %s%s\n", __func__,
4055			    num_in_q, (inject ? "<inject> " : ""),
4056			    "status: TASK SET FULL");
4057	return 0;
4058
4059respond_in_thread:	/* call back to mid-layer using invocation thread */
4060	cmnd->result = scsi_result;
4061	cmnd->scsi_done(cmnd);
4062	return 0;
4063}
4064
4065/* Note: The following macros create attribute files in the
4066   /sys/module/scsi_debug/parameters directory. Unfortunately this
4067   driver is unaware of a change and cannot trigger auxiliary actions
4068   as it can when the corresponding attribute in the
4069   /sys/bus/pseudo/drivers/scsi_debug directory is changed.
4070 */
4071module_param_named(add_host, scsi_debug_add_host, int, S_IRUGO | S_IWUSR);
4072module_param_named(ato, scsi_debug_ato, int, S_IRUGO);
4073module_param_named(clustering, scsi_debug_clustering, bool, S_IRUGO | S_IWUSR);
4074module_param_named(delay, scsi_debug_delay, int, S_IRUGO | S_IWUSR);
4075module_param_named(dev_size_mb, scsi_debug_dev_size_mb, int, S_IRUGO);
4076module_param_named(dif, scsi_debug_dif, int, S_IRUGO);
4077module_param_named(dix, scsi_debug_dix, int, S_IRUGO);
4078module_param_named(dsense, scsi_debug_dsense, int, S_IRUGO | S_IWUSR);
4079module_param_named(every_nth, scsi_debug_every_nth, int, S_IRUGO | S_IWUSR);
4080module_param_named(fake_rw, scsi_debug_fake_rw, int, S_IRUGO | S_IWUSR);
4081module_param_named(guard, scsi_debug_guard, uint, S_IRUGO);
4082module_param_named(host_lock, scsi_debug_host_lock, bool, S_IRUGO | S_IWUSR);
4083module_param_named(lbpu, scsi_debug_lbpu, int, S_IRUGO);
4084module_param_named(lbpws, scsi_debug_lbpws, int, S_IRUGO);
4085module_param_named(lbpws10, scsi_debug_lbpws10, int, S_IRUGO);
4086module_param_named(lbprz, scsi_debug_lbprz, int, S_IRUGO);
4087module_param_named(lowest_aligned, scsi_debug_lowest_aligned, int, S_IRUGO);
4088module_param_named(max_luns, scsi_debug_max_luns, int, S_IRUGO | S_IWUSR);
4089module_param_named(max_queue, scsi_debug_max_queue, int, S_IRUGO | S_IWUSR);
4090module_param_named(ndelay, scsi_debug_ndelay, int, S_IRUGO | S_IWUSR);
4091module_param_named(no_lun_0, scsi_debug_no_lun_0, int, S_IRUGO | S_IWUSR);
4092module_param_named(no_uld, scsi_debug_no_uld, int, S_IRUGO);
4093module_param_named(num_parts, scsi_debug_num_parts, int, S_IRUGO);
4094module_param_named(num_tgts, scsi_debug_num_tgts, int, S_IRUGO | S_IWUSR);
4095module_param_named(opt_blks, scsi_debug_opt_blks, int, S_IRUGO);
4096module_param_named(opts, scsi_debug_opts, int, S_IRUGO | S_IWUSR);
4097module_param_named(physblk_exp, scsi_debug_physblk_exp, int, S_IRUGO);
4098module_param_named(ptype, scsi_debug_ptype, int, S_IRUGO | S_IWUSR);
4099module_param_named(removable, scsi_debug_removable, bool, S_IRUGO | S_IWUSR);
4100module_param_named(scsi_level, scsi_debug_scsi_level, int, S_IRUGO);
4101module_param_named(sector_size, scsi_debug_sector_size, int, S_IRUGO);
4102module_param_named(strict, scsi_debug_strict, bool, S_IRUGO | S_IWUSR);
4103module_param_named(unmap_alignment, scsi_debug_unmap_alignment, int, S_IRUGO);
4104module_param_named(unmap_granularity, scsi_debug_unmap_granularity, int, S_IRUGO);
4105module_param_named(unmap_max_blocks, scsi_debug_unmap_max_blocks, int, S_IRUGO);
4106module_param_named(unmap_max_desc, scsi_debug_unmap_max_desc, int, S_IRUGO);
4107module_param_named(virtual_gb, scsi_debug_virtual_gb, int, S_IRUGO | S_IWUSR);
4108module_param_named(vpd_use_hostno, scsi_debug_vpd_use_hostno, int,
4109		   S_IRUGO | S_IWUSR);
4110module_param_named(write_same_length, scsi_debug_write_same_length, int,
4111		   S_IRUGO | S_IWUSR);
4112
4113MODULE_AUTHOR("Eric Youngdale + Douglas Gilbert");
4114MODULE_DESCRIPTION("SCSI debug adapter driver");
4115MODULE_LICENSE("GPL");
4116MODULE_VERSION(SCSI_DEBUG_VERSION);
4117
4118MODULE_PARM_DESC(add_host, "0..127 hosts allowed(def=1)");
4119MODULE_PARM_DESC(ato, "application tag ownership: 0=disk 1=host (def=1)");
4120MODULE_PARM_DESC(clustering, "when set enables larger transfers (def=0)");
4121MODULE_PARM_DESC(delay, "response delay (def=1 jiffy); 0:imm, -1,-2:tiny");
4122MODULE_PARM_DESC(dev_size_mb, "size in MiB of ram shared by devs(def=8)");
4123MODULE_PARM_DESC(dif, "data integrity field type: 0-3 (def=0)");
4124MODULE_PARM_DESC(dix, "data integrity extensions mask (def=0)");
4125MODULE_PARM_DESC(dsense, "use descriptor sense format(def=0 -> fixed)");
4126MODULE_PARM_DESC(every_nth, "timeout every nth command(def=0)");
4127MODULE_PARM_DESC(fake_rw, "fake reads/writes instead of copying (def=0)");
4128MODULE_PARM_DESC(guard, "protection checksum: 0=crc, 1=ip (def=0)");
4129MODULE_PARM_DESC(host_lock, "use host_lock around all commands (def=0)");
4130MODULE_PARM_DESC(lbpu, "enable LBP, support UNMAP command (def=0)");
4131MODULE_PARM_DESC(lbpws, "enable LBP, support WRITE SAME(16) with UNMAP bit (def=0)");
4132MODULE_PARM_DESC(lbpws10, "enable LBP, support WRITE SAME(10) with UNMAP bit (def=0)");
4133MODULE_PARM_DESC(lbprz, "unmapped blocks return 0 on read (def=1)");
4134MODULE_PARM_DESC(lowest_aligned, "lowest aligned lba (def=0)");
4135MODULE_PARM_DESC(max_luns, "number of LUNs per target to simulate(def=1)");
4136MODULE_PARM_DESC(max_queue, "max number of queued commands (1 to max(def))");
4137MODULE_PARM_DESC(ndelay, "response delay in nanoseconds (def=0 -> ignore)");
4138MODULE_PARM_DESC(no_lun_0, "no LU number 0 (def=0 -> have lun 0)");
4139MODULE_PARM_DESC(no_uld, "stop ULD (e.g. sd driver) attaching (def=0))");
4140MODULE_PARM_DESC(num_parts, "number of partitions(def=0)");
4141MODULE_PARM_DESC(num_tgts, "number of targets per host to simulate(def=1)");
4142MODULE_PARM_DESC(opt_blks, "optimal transfer length in block (def=64)");
4143MODULE_PARM_DESC(opts, "1->noise, 2->medium_err, 4->timeout, 8->recovered_err... (def=0)");
4144MODULE_PARM_DESC(physblk_exp, "physical block exponent (def=0)");
4145MODULE_PARM_DESC(ptype, "SCSI peripheral type(def=0[disk])");
4146MODULE_PARM_DESC(removable, "claim to have removable media (def=0)");
4147MODULE_PARM_DESC(scsi_level, "SCSI level to simulate(def=6[SPC-4])");
4148MODULE_PARM_DESC(sector_size, "logical block size in bytes (def=512)");
4149MODULE_PARM_DESC(strict, "stricter checks: reserved field in cdb (def=0)");
4150MODULE_PARM_DESC(unmap_alignment, "lowest aligned thin provisioning lba (def=0)");
4151MODULE_PARM_DESC(unmap_granularity, "thin provisioning granularity in blocks (def=1)");
4152MODULE_PARM_DESC(unmap_max_blocks, "max # of blocks can be unmapped in one cmd (def=0xffffffff)");
4153MODULE_PARM_DESC(unmap_max_desc, "max # of ranges that can be unmapped in one cmd (def=256)");
4154MODULE_PARM_DESC(virtual_gb, "virtual gigabyte (GiB) size (def=0 -> use dev_size_mb)");
4155MODULE_PARM_DESC(vpd_use_hostno, "0 -> dev ids ignore hostno (def=1 -> unique dev ids)");
4156MODULE_PARM_DESC(write_same_length, "Maximum blocks per WRITE SAME cmd (def=0xffff)");
4157
4158static char sdebug_info[256];
4159
4160static const char * scsi_debug_info(struct Scsi_Host * shp)
4161{
4162	sprintf(sdebug_info, "scsi_debug, version %s [%s], "
4163		"dev_size_mb=%d, opts=0x%x", SCSI_DEBUG_VERSION,
4164		scsi_debug_version_date, scsi_debug_dev_size_mb,
4165		scsi_debug_opts);
4166	return sdebug_info;
4167}
4168
4169/* 'echo <val> > /proc/scsi/scsi_debug/<host_id>' writes to opts */
4170static int scsi_debug_write_info(struct Scsi_Host *host, char *buffer, int length)
4171{
4172	char arr[16];
4173	int opts;
4174	int minLen = length > 15 ? 15 : length;
4175
4176	if (!capable(CAP_SYS_ADMIN) || !capable(CAP_SYS_RAWIO))
4177		return -EACCES;
4178	memcpy(arr, buffer, minLen);
4179	arr[minLen] = '\0';
4180	if (1 != sscanf(arr, "%d", &opts))
4181		return -EINVAL;
4182	scsi_debug_opts = opts;
4183	if (scsi_debug_every_nth != 0)
4184		atomic_set(&sdebug_cmnd_count, 0);
4185	return length;
4186}
4187
4188/* Output seen with 'cat /proc/scsi/scsi_debug/<host_id>'. It will be the
4189 * same for each scsi_debug host (if more than one). Some of the counters
4190 * output are not atomics so might be inaccurate in a busy system. */
4191static int scsi_debug_show_info(struct seq_file *m, struct Scsi_Host *host)
4192{
4193	int f, l;
4194	char b[32];
4195
4196	if (scsi_debug_every_nth > 0)
4197		snprintf(b, sizeof(b), " (curr:%d)",
4198			 ((SCSI_DEBUG_OPT_RARE_TSF & scsi_debug_opts) ?
4199				atomic_read(&sdebug_a_tsf) :
4200				atomic_read(&sdebug_cmnd_count)));
4201	else
4202		b[0] = '\0';
4203
4204	seq_printf(m, "scsi_debug adapter driver, version %s [%s]\n"
4205		"num_tgts=%d, shared (ram) size=%d MB, opts=0x%x, "
4206		"every_nth=%d%s\n"
4207		"delay=%d, ndelay=%d, max_luns=%d, q_completions=%d\n"
4208		"sector_size=%d bytes, cylinders=%d, heads=%d, sectors=%d\n"
4209		"command aborts=%d; RESETs: device=%d, target=%d, bus=%d, "
4210		"host=%d\ndix_reads=%d dix_writes=%d dif_errors=%d "
4211		"usec_in_jiffy=%lu\n",
4212		SCSI_DEBUG_VERSION, scsi_debug_version_date,
4213		scsi_debug_num_tgts, scsi_debug_dev_size_mb, scsi_debug_opts,
4214		scsi_debug_every_nth, b, scsi_debug_delay, scsi_debug_ndelay,
4215		scsi_debug_max_luns, atomic_read(&sdebug_completions),
4216		scsi_debug_sector_size, sdebug_cylinders_per, sdebug_heads,
4217		sdebug_sectors_per, num_aborts, num_dev_resets,
4218		num_target_resets, num_bus_resets, num_host_resets,
4219		dix_reads, dix_writes, dif_errors, TICK_NSEC / 1000);
4220
4221	f = find_first_bit(queued_in_use_bm, scsi_debug_max_queue);
4222	if (f != scsi_debug_max_queue) {
4223		l = find_last_bit(queued_in_use_bm, scsi_debug_max_queue);
4224		seq_printf(m, "   %s BUSY: first,last bits set: %d,%d\n",
4225			   "queued_in_use_bm", f, l);
4226	}
4227	return 0;
4228}
4229
4230static ssize_t delay_show(struct device_driver *ddp, char *buf)
4231{
4232        return scnprintf(buf, PAGE_SIZE, "%d\n", scsi_debug_delay);
4233}
4234/* Returns -EBUSY if delay is being changed and commands are queued */
4235static ssize_t delay_store(struct device_driver *ddp, const char *buf,
4236			   size_t count)
4237{
4238	int delay, res;
4239
4240	if ((count > 0) && (1 == sscanf(buf, "%d", &delay))) {
4241		res = count;
4242		if (scsi_debug_delay != delay) {
4243			unsigned long iflags;
4244			int k;
4245
4246			spin_lock_irqsave(&queued_arr_lock, iflags);
4247			k = find_first_bit(queued_in_use_bm,
4248					   scsi_debug_max_queue);
4249			if (k != scsi_debug_max_queue)
4250				res = -EBUSY;	/* have queued commands */
4251			else {
4252				scsi_debug_delay = delay;
4253				scsi_debug_ndelay = 0;
4254			}
4255			spin_unlock_irqrestore(&queued_arr_lock, iflags);
4256		}
4257		return res;
4258	}
4259	return -EINVAL;
4260}
4261static DRIVER_ATTR_RW(delay);
4262
4263static ssize_t ndelay_show(struct device_driver *ddp, char *buf)
4264{
4265	return scnprintf(buf, PAGE_SIZE, "%d\n", scsi_debug_ndelay);
4266}
4267/* Returns -EBUSY if ndelay is being changed and commands are queued */
4268/* If > 0 and accepted then scsi_debug_delay is set to DELAY_OVERRIDDEN */
4269static ssize_t ndelay_store(struct device_driver *ddp, const char *buf,
4270			   size_t count)
4271{
4272	unsigned long iflags;
4273	int ndelay, res, k;
4274
4275	if ((count > 0) && (1 == sscanf(buf, "%d", &ndelay)) &&
4276	    (ndelay >= 0) && (ndelay < 1000000000)) {
4277		res = count;
4278		if (scsi_debug_ndelay != ndelay) {
4279			spin_lock_irqsave(&queued_arr_lock, iflags);
4280			k = find_first_bit(queued_in_use_bm,
4281					   scsi_debug_max_queue);
4282			if (k != scsi_debug_max_queue)
4283				res = -EBUSY;	/* have queued commands */
4284			else {
4285				scsi_debug_ndelay = ndelay;
4286				scsi_debug_delay = ndelay ? DELAY_OVERRIDDEN
4287							  : DEF_DELAY;
4288			}
4289			spin_unlock_irqrestore(&queued_arr_lock, iflags);
4290		}
4291		return res;
4292	}
4293	return -EINVAL;
4294}
4295static DRIVER_ATTR_RW(ndelay);
4296
4297static ssize_t opts_show(struct device_driver *ddp, char *buf)
4298{
4299        return scnprintf(buf, PAGE_SIZE, "0x%x\n", scsi_debug_opts);
4300}
4301
4302static ssize_t opts_store(struct device_driver *ddp, const char *buf,
4303			  size_t count)
4304{
4305        int opts;
4306	char work[20];
4307
4308        if (1 == sscanf(buf, "%10s", work)) {
4309		if (0 == strncasecmp(work,"0x", 2)) {
4310			if (1 == sscanf(&work[2], "%x", &opts))
4311				goto opts_done;
4312		} else {
4313			if (1 == sscanf(work, "%d", &opts))
4314				goto opts_done;
4315		}
4316	}
4317	return -EINVAL;
4318opts_done:
4319	scsi_debug_opts = opts;
4320	if (SCSI_DEBUG_OPT_RECOVERED_ERR & opts)
4321		sdebug_any_injecting_opt = true;
4322	else if (SCSI_DEBUG_OPT_TRANSPORT_ERR & opts)
4323		sdebug_any_injecting_opt = true;
4324	else if (SCSI_DEBUG_OPT_DIF_ERR & opts)
4325		sdebug_any_injecting_opt = true;
4326	else if (SCSI_DEBUG_OPT_DIX_ERR & opts)
4327		sdebug_any_injecting_opt = true;
4328	else if (SCSI_DEBUG_OPT_SHORT_TRANSFER & opts)
4329		sdebug_any_injecting_opt = true;
4330	atomic_set(&sdebug_cmnd_count, 0);
4331	atomic_set(&sdebug_a_tsf, 0);
4332	return count;
4333}
4334static DRIVER_ATTR_RW(opts);
4335
4336static ssize_t ptype_show(struct device_driver *ddp, char *buf)
4337{
4338        return scnprintf(buf, PAGE_SIZE, "%d\n", scsi_debug_ptype);
4339}
4340static ssize_t ptype_store(struct device_driver *ddp, const char *buf,
4341			   size_t count)
4342{
4343        int n;
4344
4345	if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
4346		scsi_debug_ptype = n;
4347		return count;
4348	}
4349	return -EINVAL;
4350}
4351static DRIVER_ATTR_RW(ptype);
4352
4353static ssize_t dsense_show(struct device_driver *ddp, char *buf)
4354{
4355        return scnprintf(buf, PAGE_SIZE, "%d\n", scsi_debug_dsense);
4356}
4357static ssize_t dsense_store(struct device_driver *ddp, const char *buf,
4358			    size_t count)
4359{
4360        int n;
4361
4362	if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
4363		scsi_debug_dsense = n;
4364		return count;
4365	}
4366	return -EINVAL;
4367}
4368static DRIVER_ATTR_RW(dsense);
4369
4370static ssize_t fake_rw_show(struct device_driver *ddp, char *buf)
4371{
4372        return scnprintf(buf, PAGE_SIZE, "%d\n", scsi_debug_fake_rw);
4373}
4374static ssize_t fake_rw_store(struct device_driver *ddp, const char *buf,
4375			     size_t count)
4376{
4377        int n;
4378
4379	if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
4380		n = (n > 0);
4381		scsi_debug_fake_rw = (scsi_debug_fake_rw > 0);
4382		if (scsi_debug_fake_rw != n) {
4383			if ((0 == n) && (NULL == fake_storep)) {
4384				unsigned long sz =
4385					(unsigned long)scsi_debug_dev_size_mb *
4386					1048576;
4387
4388				fake_storep = vmalloc(sz);
4389				if (NULL == fake_storep) {
4390					pr_err("%s: out of memory, 9\n",
4391					       __func__);
4392					return -ENOMEM;
4393				}
4394				memset(fake_storep, 0, sz);
4395			}
4396			scsi_debug_fake_rw = n;
4397		}
4398		return count;
4399	}
4400	return -EINVAL;
4401}
4402static DRIVER_ATTR_RW(fake_rw);
4403
4404static ssize_t no_lun_0_show(struct device_driver *ddp, char *buf)
4405{
4406        return scnprintf(buf, PAGE_SIZE, "%d\n", scsi_debug_no_lun_0);
4407}
4408static ssize_t no_lun_0_store(struct device_driver *ddp, const char *buf,
4409			      size_t count)
4410{
4411        int n;
4412
4413	if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
4414		scsi_debug_no_lun_0 = n;
4415		return count;
4416	}
4417	return -EINVAL;
4418}
4419static DRIVER_ATTR_RW(no_lun_0);
4420
4421static ssize_t num_tgts_show(struct device_driver *ddp, char *buf)
4422{
4423        return scnprintf(buf, PAGE_SIZE, "%d\n", scsi_debug_num_tgts);
4424}
4425static ssize_t num_tgts_store(struct device_driver *ddp, const char *buf,
4426			      size_t count)
4427{
4428        int n;
4429
4430	if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
4431		scsi_debug_num_tgts = n;
4432		sdebug_max_tgts_luns();
4433		return count;
4434	}
4435	return -EINVAL;
4436}
4437static DRIVER_ATTR_RW(num_tgts);
4438
4439static ssize_t dev_size_mb_show(struct device_driver *ddp, char *buf)
4440{
4441        return scnprintf(buf, PAGE_SIZE, "%d\n", scsi_debug_dev_size_mb);
4442}
4443static DRIVER_ATTR_RO(dev_size_mb);
4444
4445static ssize_t num_parts_show(struct device_driver *ddp, char *buf)
4446{
4447        return scnprintf(buf, PAGE_SIZE, "%d\n", scsi_debug_num_parts);
4448}
4449static DRIVER_ATTR_RO(num_parts);
4450
4451static ssize_t every_nth_show(struct device_driver *ddp, char *buf)
4452{
4453        return scnprintf(buf, PAGE_SIZE, "%d\n", scsi_debug_every_nth);
4454}
4455static ssize_t every_nth_store(struct device_driver *ddp, const char *buf,
4456			       size_t count)
4457{
4458        int nth;
4459
4460	if ((count > 0) && (1 == sscanf(buf, "%d", &nth))) {
4461		scsi_debug_every_nth = nth;
4462		atomic_set(&sdebug_cmnd_count, 0);
4463		return count;
4464	}
4465	return -EINVAL;
4466}
4467static DRIVER_ATTR_RW(every_nth);
4468
4469static ssize_t max_luns_show(struct device_driver *ddp, char *buf)
4470{
4471        return scnprintf(buf, PAGE_SIZE, "%d\n", scsi_debug_max_luns);
4472}
4473static ssize_t max_luns_store(struct device_driver *ddp, const char *buf,
4474			      size_t count)
4475{
4476        int n;
4477	bool changed;
4478
4479	if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
4480		changed = (scsi_debug_max_luns != n);
4481		scsi_debug_max_luns = n;
4482		sdebug_max_tgts_luns();
4483		if (changed && (scsi_debug_scsi_level >= 5)) {	/* >= SPC-3 */
4484			struct sdebug_host_info *sdhp;
4485			struct sdebug_dev_info *dp;
4486
4487			spin_lock(&sdebug_host_list_lock);
4488			list_for_each_entry(sdhp, &sdebug_host_list,
4489					    host_list) {
4490				list_for_each_entry(dp, &sdhp->dev_info_list,
4491						    dev_list) {
4492					set_bit(SDEBUG_UA_LUNS_CHANGED,
4493						dp->uas_bm);
4494				}
4495			}
4496			spin_unlock(&sdebug_host_list_lock);
4497		}
4498		return count;
4499	}
4500	return -EINVAL;
4501}
4502static DRIVER_ATTR_RW(max_luns);
4503
4504static ssize_t max_queue_show(struct device_driver *ddp, char *buf)
4505{
4506        return scnprintf(buf, PAGE_SIZE, "%d\n", scsi_debug_max_queue);
4507}
4508/* N.B. max_queue can be changed while there are queued commands. In flight
4509 * commands beyond the new max_queue will be completed. */
4510static ssize_t max_queue_store(struct device_driver *ddp, const char *buf,
4511			       size_t count)
4512{
4513	unsigned long iflags;
4514	int n, k;
4515
4516	if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n > 0) &&
4517	    (n <= SCSI_DEBUG_CANQUEUE)) {
4518		spin_lock_irqsave(&queued_arr_lock, iflags);
4519		k = find_last_bit(queued_in_use_bm, SCSI_DEBUG_CANQUEUE);
4520		scsi_debug_max_queue = n;
4521		if (SCSI_DEBUG_CANQUEUE == k)
4522			atomic_set(&retired_max_queue, 0);
4523		else if (k >= n)
4524			atomic_set(&retired_max_queue, k + 1);
4525		else
4526			atomic_set(&retired_max_queue, 0);
4527		spin_unlock_irqrestore(&queued_arr_lock, iflags);
4528		return count;
4529	}
4530	return -EINVAL;
4531}
4532static DRIVER_ATTR_RW(max_queue);
4533
4534static ssize_t no_uld_show(struct device_driver *ddp, char *buf)
4535{
4536        return scnprintf(buf, PAGE_SIZE, "%d\n", scsi_debug_no_uld);
4537}
4538static DRIVER_ATTR_RO(no_uld);
4539
4540static ssize_t scsi_level_show(struct device_driver *ddp, char *buf)
4541{
4542        return scnprintf(buf, PAGE_SIZE, "%d\n", scsi_debug_scsi_level);
4543}
4544static DRIVER_ATTR_RO(scsi_level);
4545
4546static ssize_t virtual_gb_show(struct device_driver *ddp, char *buf)
4547{
4548        return scnprintf(buf, PAGE_SIZE, "%d\n", scsi_debug_virtual_gb);
4549}
4550static ssize_t virtual_gb_store(struct device_driver *ddp, const char *buf,
4551				size_t count)
4552{
4553        int n;
4554	bool changed;
4555
4556	if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
4557		changed = (scsi_debug_virtual_gb != n);
4558		scsi_debug_virtual_gb = n;
4559		sdebug_capacity = get_sdebug_capacity();
4560		if (changed) {
4561			struct sdebug_host_info *sdhp;
4562			struct sdebug_dev_info *dp;
4563
4564			spin_lock(&sdebug_host_list_lock);
4565			list_for_each_entry(sdhp, &sdebug_host_list,
4566					    host_list) {
4567				list_for_each_entry(dp, &sdhp->dev_info_list,
4568						    dev_list) {
4569					set_bit(SDEBUG_UA_CAPACITY_CHANGED,
4570						dp->uas_bm);
4571				}
4572			}
4573			spin_unlock(&sdebug_host_list_lock);
4574		}
4575		return count;
4576	}
4577	return -EINVAL;
4578}
4579static DRIVER_ATTR_RW(virtual_gb);
4580
4581static ssize_t add_host_show(struct device_driver *ddp, char *buf)
4582{
4583        return scnprintf(buf, PAGE_SIZE, "%d\n", scsi_debug_add_host);
4584}
4585
4586static ssize_t add_host_store(struct device_driver *ddp, const char *buf,
4587			      size_t count)
4588{
4589	int delta_hosts;
4590
4591	if (sscanf(buf, "%d", &delta_hosts) != 1)
4592		return -EINVAL;
4593	if (delta_hosts > 0) {
4594		do {
4595			sdebug_add_adapter();
4596		} while (--delta_hosts);
4597	} else if (delta_hosts < 0) {
4598		do {
4599			sdebug_remove_adapter();
4600		} while (++delta_hosts);
4601	}
4602	return count;
4603}
4604static DRIVER_ATTR_RW(add_host);
4605
4606static ssize_t vpd_use_hostno_show(struct device_driver *ddp, char *buf)
4607{
4608	return scnprintf(buf, PAGE_SIZE, "%d\n", scsi_debug_vpd_use_hostno);
4609}
4610static ssize_t vpd_use_hostno_store(struct device_driver *ddp, const char *buf,
4611				    size_t count)
4612{
4613	int n;
4614
4615	if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
4616		scsi_debug_vpd_use_hostno = n;
4617		return count;
4618	}
4619	return -EINVAL;
4620}
4621static DRIVER_ATTR_RW(vpd_use_hostno);
4622
4623static ssize_t sector_size_show(struct device_driver *ddp, char *buf)
4624{
4625	return scnprintf(buf, PAGE_SIZE, "%u\n", scsi_debug_sector_size);
4626}
4627static DRIVER_ATTR_RO(sector_size);
4628
4629static ssize_t dix_show(struct device_driver *ddp, char *buf)
4630{
4631	return scnprintf(buf, PAGE_SIZE, "%d\n", scsi_debug_dix);
4632}
4633static DRIVER_ATTR_RO(dix);
4634
4635static ssize_t dif_show(struct device_driver *ddp, char *buf)
4636{
4637	return scnprintf(buf, PAGE_SIZE, "%d\n", scsi_debug_dif);
4638}
4639static DRIVER_ATTR_RO(dif);
4640
4641static ssize_t guard_show(struct device_driver *ddp, char *buf)
4642{
4643	return scnprintf(buf, PAGE_SIZE, "%u\n", scsi_debug_guard);
4644}
4645static DRIVER_ATTR_RO(guard);
4646
4647static ssize_t ato_show(struct device_driver *ddp, char *buf)
4648{
4649	return scnprintf(buf, PAGE_SIZE, "%d\n", scsi_debug_ato);
4650}
4651static DRIVER_ATTR_RO(ato);
4652
4653static ssize_t map_show(struct device_driver *ddp, char *buf)
4654{
4655	ssize_t count;
4656
4657	if (!scsi_debug_lbp())
4658		return scnprintf(buf, PAGE_SIZE, "0-%u\n",
4659				 sdebug_store_sectors);
4660
4661	count = scnprintf(buf, PAGE_SIZE - 1, "%*pbl",
4662			  (int)map_size, map_storep);
4663	buf[count++] = '\n';
4664	buf[count] = '\0';
4665
4666	return count;
4667}
4668static DRIVER_ATTR_RO(map);
4669
4670static ssize_t removable_show(struct device_driver *ddp, char *buf)
4671{
4672	return scnprintf(buf, PAGE_SIZE, "%d\n", scsi_debug_removable ? 1 : 0);
4673}
4674static ssize_t removable_store(struct device_driver *ddp, const char *buf,
4675			       size_t count)
4676{
4677	int n;
4678
4679	if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
4680		scsi_debug_removable = (n > 0);
4681		return count;
4682	}
4683	return -EINVAL;
4684}
4685static DRIVER_ATTR_RW(removable);
4686
4687static ssize_t host_lock_show(struct device_driver *ddp, char *buf)
4688{
4689	return scnprintf(buf, PAGE_SIZE, "%d\n", !!scsi_debug_host_lock);
4690}
4691/* Returns -EBUSY if host_lock is being changed and commands are queued */
4692static ssize_t host_lock_store(struct device_driver *ddp, const char *buf,
4693			       size_t count)
4694{
4695	int n, res;
4696
4697	if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
4698		bool new_host_lock = (n > 0);
4699
4700		res = count;
4701		if (new_host_lock != scsi_debug_host_lock) {
4702			unsigned long iflags;
4703			int k;
4704
4705			spin_lock_irqsave(&queued_arr_lock, iflags);
4706			k = find_first_bit(queued_in_use_bm,
4707					   scsi_debug_max_queue);
4708			if (k != scsi_debug_max_queue)
4709				res = -EBUSY;	/* have queued commands */
4710			else
4711				scsi_debug_host_lock = new_host_lock;
4712			spin_unlock_irqrestore(&queued_arr_lock, iflags);
4713		}
4714		return res;
4715	}
4716	return -EINVAL;
4717}
4718static DRIVER_ATTR_RW(host_lock);
4719
4720static ssize_t strict_show(struct device_driver *ddp, char *buf)
4721{
4722	return scnprintf(buf, PAGE_SIZE, "%d\n", !!scsi_debug_strict);
4723}
4724static ssize_t strict_store(struct device_driver *ddp, const char *buf,
4725			    size_t count)
4726{
4727	int n;
4728
4729	if ((count > 0) && (1 == sscanf(buf, "%d", &n)) && (n >= 0)) {
4730		scsi_debug_strict = (n > 0);
4731		return count;
4732	}
4733	return -EINVAL;
4734}
4735static DRIVER_ATTR_RW(strict);
4736
4737
4738/* Note: The following array creates attribute files in the
4739   /sys/bus/pseudo/drivers/scsi_debug directory. The advantage of these
4740   files (over those found in the /sys/module/scsi_debug/parameters
4741   directory) is that auxiliary actions can be triggered when an attribute
4742   is changed. For example see: sdebug_add_host_store() above.
4743 */
4744
4745static struct attribute *sdebug_drv_attrs[] = {
4746	&driver_attr_delay.attr,
4747	&driver_attr_opts.attr,
4748	&driver_attr_ptype.attr,
4749	&driver_attr_dsense.attr,
4750	&driver_attr_fake_rw.attr,
4751	&driver_attr_no_lun_0.attr,
4752	&driver_attr_num_tgts.attr,
4753	&driver_attr_dev_size_mb.attr,
4754	&driver_attr_num_parts.attr,
4755	&driver_attr_every_nth.attr,
4756	&driver_attr_max_luns.attr,
4757	&driver_attr_max_queue.attr,
4758	&driver_attr_no_uld.attr,
4759	&driver_attr_scsi_level.attr,
4760	&driver_attr_virtual_gb.attr,
4761	&driver_attr_add_host.attr,
4762	&driver_attr_vpd_use_hostno.attr,
4763	&driver_attr_sector_size.attr,
4764	&driver_attr_dix.attr,
4765	&driver_attr_dif.attr,
4766	&driver_attr_guard.attr,
4767	&driver_attr_ato.attr,
4768	&driver_attr_map.attr,
4769	&driver_attr_removable.attr,
4770	&driver_attr_host_lock.attr,
4771	&driver_attr_ndelay.attr,
4772	&driver_attr_strict.attr,
4773	NULL,
4774};
4775ATTRIBUTE_GROUPS(sdebug_drv);
4776
4777static struct device *pseudo_primary;
4778
4779static int __init scsi_debug_init(void)
4780{
4781	unsigned long sz;
4782	int host_to_add;
4783	int k;
4784	int ret;
4785
4786	atomic_set(&sdebug_cmnd_count, 0);
4787	atomic_set(&sdebug_completions, 0);
4788	atomic_set(&retired_max_queue, 0);
4789
4790	if (scsi_debug_ndelay >= 1000000000) {
4791		pr_warn("%s: ndelay must be less than 1 second, ignored\n",
4792			__func__);
4793		scsi_debug_ndelay = 0;
4794	} else if (scsi_debug_ndelay > 0)
4795		scsi_debug_delay = DELAY_OVERRIDDEN;
4796
4797	switch (scsi_debug_sector_size) {
4798	case  512:
4799	case 1024:
4800	case 2048:
4801	case 4096:
4802		break;
4803	default:
4804		pr_err("%s: invalid sector_size %d\n", __func__,
4805		       scsi_debug_sector_size);
4806		return -EINVAL;
4807	}
4808
4809	switch (scsi_debug_dif) {
4810
4811	case SD_DIF_TYPE0_PROTECTION:
4812	case SD_DIF_TYPE1_PROTECTION:
4813	case SD_DIF_TYPE2_PROTECTION:
4814	case SD_DIF_TYPE3_PROTECTION:
4815		break;
4816
4817	default:
4818		pr_err("%s: dif must be 0, 1, 2 or 3\n", __func__);
4819		return -EINVAL;
4820	}
4821
4822	if (scsi_debug_guard > 1) {
4823		pr_err("%s: guard must be 0 or 1\n", __func__);
4824		return -EINVAL;
4825	}
4826
4827	if (scsi_debug_ato > 1) {
4828		pr_err("%s: ato must be 0 or 1\n", __func__);
4829		return -EINVAL;
4830	}
4831
4832	if (scsi_debug_physblk_exp > 15) {
4833		pr_err("%s: invalid physblk_exp %u\n", __func__,
4834		       scsi_debug_physblk_exp);
4835		return -EINVAL;
4836	}
4837
4838	if (scsi_debug_lowest_aligned > 0x3fff) {
4839		pr_err("%s: lowest_aligned too big: %u\n", __func__,
4840		       scsi_debug_lowest_aligned);
4841		return -EINVAL;
4842	}
4843
4844	if (scsi_debug_dev_size_mb < 1)
4845		scsi_debug_dev_size_mb = 1;  /* force minimum 1 MB ramdisk */
4846	sz = (unsigned long)scsi_debug_dev_size_mb * 1048576;
4847	sdebug_store_sectors = sz / scsi_debug_sector_size;
4848	sdebug_capacity = get_sdebug_capacity();
4849
4850	/* play around with geometry, don't waste too much on track 0 */
4851	sdebug_heads = 8;
4852	sdebug_sectors_per = 32;
4853	if (scsi_debug_dev_size_mb >= 16)
4854		sdebug_heads = 32;
4855	else if (scsi_debug_dev_size_mb >= 256)
4856		sdebug_heads = 64;
4857	sdebug_cylinders_per = (unsigned long)sdebug_capacity /
4858			       (sdebug_sectors_per * sdebug_heads);
4859	if (sdebug_cylinders_per >= 1024) {
4860		/* other LLDs do this; implies >= 1GB ram disk ... */
4861		sdebug_heads = 255;
4862		sdebug_sectors_per = 63;
4863		sdebug_cylinders_per = (unsigned long)sdebug_capacity /
4864			       (sdebug_sectors_per * sdebug_heads);
4865	}
4866
4867	if (0 == scsi_debug_fake_rw) {
4868		fake_storep = vmalloc(sz);
4869		if (NULL == fake_storep) {
4870			pr_err("%s: out of memory, 1\n", __func__);
4871			return -ENOMEM;
4872		}
4873		memset(fake_storep, 0, sz);
4874		if (scsi_debug_num_parts > 0)
4875			sdebug_build_parts(fake_storep, sz);
4876	}
4877
4878	if (scsi_debug_dix) {
4879		int dif_size;
4880
4881		dif_size = sdebug_store_sectors * sizeof(struct sd_dif_tuple);
4882		dif_storep = vmalloc(dif_size);
4883
4884		pr_err("%s: dif_storep %u bytes @ %p\n", __func__, dif_size,
4885			dif_storep);
4886
4887		if (dif_storep == NULL) {
4888			pr_err("%s: out of mem. (DIX)\n", __func__);
4889			ret = -ENOMEM;
4890			goto free_vm;
4891		}
4892
4893		memset(dif_storep, 0xff, dif_size);
4894	}
4895
4896	/* Logical Block Provisioning */
4897	if (scsi_debug_lbp()) {
4898		scsi_debug_unmap_max_blocks =
4899			clamp(scsi_debug_unmap_max_blocks, 0U, 0xffffffffU);
4900
4901		scsi_debug_unmap_max_desc =
4902			clamp(scsi_debug_unmap_max_desc, 0U, 256U);
4903
4904		scsi_debug_unmap_granularity =
4905			clamp(scsi_debug_unmap_granularity, 1U, 0xffffffffU);
4906
4907		if (scsi_debug_unmap_alignment &&
4908		    scsi_debug_unmap_granularity <=
4909		    scsi_debug_unmap_alignment) {
4910			pr_err("%s: ERR: unmap_granularity <= unmap_alignment\n",
4911			       __func__);
4912			return -EINVAL;
4913		}
4914
4915		map_size = lba_to_map_index(sdebug_store_sectors - 1) + 1;
4916		map_storep = vmalloc(BITS_TO_LONGS(map_size) * sizeof(long));
4917
4918		pr_info("%s: %lu provisioning blocks\n", __func__, map_size);
4919
4920		if (map_storep == NULL) {
4921			pr_err("%s: out of mem. (MAP)\n", __func__);
4922			ret = -ENOMEM;
4923			goto free_vm;
4924		}
4925
4926		bitmap_zero(map_storep, map_size);
4927
4928		/* Map first 1KB for partition table */
4929		if (scsi_debug_num_parts)
4930			map_region(0, 2);
4931	}
4932
4933	pseudo_primary = root_device_register("pseudo_0");
4934	if (IS_ERR(pseudo_primary)) {
4935		pr_warn("%s: root_device_register() error\n", __func__);
4936		ret = PTR_ERR(pseudo_primary);
4937		goto free_vm;
4938	}
4939	ret = bus_register(&pseudo_lld_bus);
4940	if (ret < 0) {
4941		pr_warn("%s: bus_register error: %d\n", __func__, ret);
4942		goto dev_unreg;
4943	}
4944	ret = driver_register(&sdebug_driverfs_driver);
4945	if (ret < 0) {
4946		pr_warn("%s: driver_register error: %d\n", __func__, ret);
4947		goto bus_unreg;
4948	}
4949
4950	host_to_add = scsi_debug_add_host;
4951        scsi_debug_add_host = 0;
4952
4953        for (k = 0; k < host_to_add; k++) {
4954                if (sdebug_add_adapter()) {
4955			pr_err("%s: sdebug_add_adapter failed k=%d\n",
4956				__func__, k);
4957                        break;
4958                }
4959        }
4960
4961	if (SCSI_DEBUG_OPT_NOISE & scsi_debug_opts) {
4962		pr_info("%s: built %d host(s)\n", __func__,
4963			scsi_debug_add_host);
4964	}
4965	return 0;
4966
4967bus_unreg:
4968	bus_unregister(&pseudo_lld_bus);
4969dev_unreg:
4970	root_device_unregister(pseudo_primary);
4971free_vm:
4972	if (map_storep)
4973		vfree(map_storep);
4974	if (dif_storep)
4975		vfree(dif_storep);
4976	vfree(fake_storep);
4977
4978	return ret;
4979}
4980
4981static void __exit scsi_debug_exit(void)
4982{
4983	int k = scsi_debug_add_host;
4984
4985	stop_all_queued();
4986	free_all_queued();
4987	for (; k; k--)
4988		sdebug_remove_adapter();
4989	driver_unregister(&sdebug_driverfs_driver);
4990	bus_unregister(&pseudo_lld_bus);
4991	root_device_unregister(pseudo_primary);
4992
4993	if (dif_storep)
4994		vfree(dif_storep);
4995
4996	vfree(fake_storep);
4997}
4998
4999device_initcall(scsi_debug_init);
5000module_exit(scsi_debug_exit);
5001
5002static void sdebug_release_adapter(struct device * dev)
5003{
5004        struct sdebug_host_info *sdbg_host;
5005
5006	sdbg_host = to_sdebug_host(dev);
5007        kfree(sdbg_host);
5008}
5009
5010static int sdebug_add_adapter(void)
5011{
5012	int k, devs_per_host;
5013        int error = 0;
5014        struct sdebug_host_info *sdbg_host;
5015	struct sdebug_dev_info *sdbg_devinfo, *tmp;
5016
5017        sdbg_host = kzalloc(sizeof(*sdbg_host),GFP_KERNEL);
5018        if (NULL == sdbg_host) {
5019                printk(KERN_ERR "%s: out of memory at line %d\n",
5020                       __func__, __LINE__);
5021                return -ENOMEM;
5022        }
5023
5024        INIT_LIST_HEAD(&sdbg_host->dev_info_list);
5025
5026	devs_per_host = scsi_debug_num_tgts * scsi_debug_max_luns;
5027        for (k = 0; k < devs_per_host; k++) {
5028		sdbg_devinfo = sdebug_device_create(sdbg_host, GFP_KERNEL);
5029		if (!sdbg_devinfo) {
5030                        printk(KERN_ERR "%s: out of memory at line %d\n",
5031                               __func__, __LINE__);
5032                        error = -ENOMEM;
5033			goto clean;
5034                }
5035        }
5036
5037        spin_lock(&sdebug_host_list_lock);
5038        list_add_tail(&sdbg_host->host_list, &sdebug_host_list);
5039        spin_unlock(&sdebug_host_list_lock);
5040
5041        sdbg_host->dev.bus = &pseudo_lld_bus;
5042        sdbg_host->dev.parent = pseudo_primary;
5043        sdbg_host->dev.release = &sdebug_release_adapter;
5044        dev_set_name(&sdbg_host->dev, "adapter%d", scsi_debug_add_host);
5045
5046        error = device_register(&sdbg_host->dev);
5047
5048        if (error)
5049		goto clean;
5050
5051	++scsi_debug_add_host;
5052        return error;
5053
5054clean:
5055	list_for_each_entry_safe(sdbg_devinfo, tmp, &sdbg_host->dev_info_list,
5056				 dev_list) {
5057		list_del(&sdbg_devinfo->dev_list);
5058		kfree(sdbg_devinfo);
5059	}
5060
5061	kfree(sdbg_host);
5062        return error;
5063}
5064
5065static void sdebug_remove_adapter(void)
5066{
5067        struct sdebug_host_info * sdbg_host = NULL;
5068
5069        spin_lock(&sdebug_host_list_lock);
5070        if (!list_empty(&sdebug_host_list)) {
5071                sdbg_host = list_entry(sdebug_host_list.prev,
5072                                       struct sdebug_host_info, host_list);
5073		list_del(&sdbg_host->host_list);
5074	}
5075        spin_unlock(&sdebug_host_list_lock);
5076
5077	if (!sdbg_host)
5078		return;
5079
5080        device_unregister(&sdbg_host->dev);
5081        --scsi_debug_add_host;
5082}
5083
5084static int
5085sdebug_change_qdepth(struct scsi_device *sdev, int qdepth)
5086{
5087	int num_in_q = 0;
5088	unsigned long iflags;
5089	struct sdebug_dev_info *devip;
5090
5091	spin_lock_irqsave(&queued_arr_lock, iflags);
5092	devip = (struct sdebug_dev_info *)sdev->hostdata;
5093	if (NULL == devip) {
5094		spin_unlock_irqrestore(&queued_arr_lock, iflags);
5095		return	-ENODEV;
5096	}
5097	num_in_q = atomic_read(&devip->num_in_q);
5098	spin_unlock_irqrestore(&queued_arr_lock, iflags);
5099
5100	if (qdepth < 1)
5101		qdepth = 1;
5102	/* allow to exceed max host queued_arr elements for testing */
5103	if (qdepth > SCSI_DEBUG_CANQUEUE + 10)
5104		qdepth = SCSI_DEBUG_CANQUEUE + 10;
5105	scsi_change_queue_depth(sdev, qdepth);
5106
5107	if (SCSI_DEBUG_OPT_Q_NOISE & scsi_debug_opts) {
5108		sdev_printk(KERN_INFO, sdev,
5109			    "%s: qdepth=%d, num_in_q=%d\n",
5110			    __func__, qdepth, num_in_q);
5111	}
5112	return sdev->queue_depth;
5113}
5114
5115static int
5116check_inject(struct scsi_cmnd *scp)
5117{
5118	struct sdebug_scmd_extra_t *ep = scsi_cmd_priv(scp);
5119
5120	memset(ep, 0, sizeof(struct sdebug_scmd_extra_t));
5121
5122	if (atomic_inc_return(&sdebug_cmnd_count) >=
5123	    abs(scsi_debug_every_nth)) {
5124		atomic_set(&sdebug_cmnd_count, 0);
5125		if (scsi_debug_every_nth < -1)
5126			scsi_debug_every_nth = -1;
5127		if (SCSI_DEBUG_OPT_TIMEOUT & scsi_debug_opts)
5128			return 1; /* ignore command causing timeout */
5129		else if (SCSI_DEBUG_OPT_MAC_TIMEOUT & scsi_debug_opts &&
5130			 scsi_medium_access_command(scp))
5131			return 1; /* time out reads and writes */
5132		if (sdebug_any_injecting_opt) {
5133			int opts = scsi_debug_opts;
5134
5135			if (SCSI_DEBUG_OPT_RECOVERED_ERR & opts)
5136				ep->inj_recovered = true;
5137			else if (SCSI_DEBUG_OPT_TRANSPORT_ERR & opts)
5138				ep->inj_transport = true;
5139			else if (SCSI_DEBUG_OPT_DIF_ERR & opts)
5140				ep->inj_dif = true;
5141			else if (SCSI_DEBUG_OPT_DIX_ERR & opts)
5142				ep->inj_dix = true;
5143			else if (SCSI_DEBUG_OPT_SHORT_TRANSFER & opts)
5144				ep->inj_short = true;
5145		}
5146	}
5147	return 0;
5148}
5149
5150static int
5151scsi_debug_queuecommand(struct scsi_cmnd *scp)
5152{
5153	u8 sdeb_i;
5154	struct scsi_device *sdp = scp->device;
5155	const struct opcode_info_t *oip;
5156	const struct opcode_info_t *r_oip;
5157	struct sdebug_dev_info *devip;
5158	u8 *cmd = scp->cmnd;
5159	int (*r_pfp)(struct scsi_cmnd *, struct sdebug_dev_info *);
5160	int k, na;
5161	int errsts = 0;
5162	int errsts_no_connect = DID_NO_CONNECT << 16;
5163	u32 flags;
5164	u16 sa;
5165	u8 opcode = cmd[0];
5166	bool has_wlun_rl;
5167	bool debug = !!(SCSI_DEBUG_OPT_NOISE & scsi_debug_opts);
5168
5169	scsi_set_resid(scp, 0);
5170	if (debug && !(SCSI_DEBUG_OPT_NO_CDB_NOISE & scsi_debug_opts)) {
5171		char b[120];
5172		int n, len, sb;
5173
5174		len = scp->cmd_len;
5175		sb = (int)sizeof(b);
5176		if (len > 32)
5177			strcpy(b, "too long, over 32 bytes");
5178		else {
5179			for (k = 0, n = 0; k < len && n < sb; ++k)
5180				n += scnprintf(b + n, sb - n, "%02x ",
5181					       (u32)cmd[k]);
5182		}
5183		sdev_printk(KERN_INFO, sdp, "%s: cmd %s\n", my_name, b);
5184	}
5185	has_wlun_rl = (sdp->lun == SAM2_WLUN_REPORT_LUNS);
5186	if ((sdp->lun >= scsi_debug_max_luns) && !has_wlun_rl)
5187		return schedule_resp(scp, NULL, errsts_no_connect, 0);
5188
5189	sdeb_i = opcode_ind_arr[opcode];	/* fully mapped */
5190	oip = &opcode_info_arr[sdeb_i];		/* safe if table consistent */
5191	devip = (struct sdebug_dev_info *)sdp->hostdata;
5192	if (!devip) {
5193		devip = devInfoReg(sdp);
5194		if (NULL == devip)
5195			return schedule_resp(scp, NULL, errsts_no_connect, 0);
5196	}
5197	na = oip->num_attached;
5198	r_pfp = oip->pfp;
5199	if (na) {	/* multiple commands with this opcode */
5200		r_oip = oip;
5201		if (FF_SA & r_oip->flags) {
5202			if (F_SA_LOW & oip->flags)
5203				sa = 0x1f & cmd[1];
5204			else
5205				sa = get_unaligned_be16(cmd + 8);
5206			for (k = 0; k <= na; oip = r_oip->arrp + k++) {
5207				if (opcode == oip->opcode && sa == oip->sa)
5208					break;
5209			}
5210		} else {   /* since no service action only check opcode */
5211			for (k = 0; k <= na; oip = r_oip->arrp + k++) {
5212				if (opcode == oip->opcode)
5213					break;
5214			}
5215		}
5216		if (k > na) {
5217			if (F_SA_LOW & r_oip->flags)
5218				mk_sense_invalid_fld(scp, SDEB_IN_CDB, 1, 4);
5219			else if (F_SA_HIGH & r_oip->flags)
5220				mk_sense_invalid_fld(scp, SDEB_IN_CDB, 8, 7);
5221			else
5222				mk_sense_invalid_opcode(scp);
5223			goto check_cond;
5224		}
5225	}	/* else (when na==0) we assume the oip is a match */
5226	flags = oip->flags;
5227	if (F_INV_OP & flags) {
5228		mk_sense_invalid_opcode(scp);
5229		goto check_cond;
5230	}
5231	if (has_wlun_rl && !(F_RL_WLUN_OK & flags)) {
5232		if (debug)
5233			sdev_printk(KERN_INFO, sdp, "scsi_debug: Opcode: "
5234				    "0x%x not supported for wlun\n", opcode);
5235		mk_sense_invalid_opcode(scp);
5236		goto check_cond;
5237	}
5238	if (scsi_debug_strict) {	/* check cdb against mask */
5239		u8 rem;
5240		int j;
5241
5242		for (k = 1; k < oip->len_mask[0] && k < 16; ++k) {
5243			rem = ~oip->len_mask[k] & cmd[k];
5244			if (rem) {
5245				for (j = 7; j >= 0; --j, rem <<= 1) {
5246					if (0x80 & rem)
5247						break;
5248				}
5249				mk_sense_invalid_fld(scp, SDEB_IN_CDB, k, j);
5250				goto check_cond;
5251			}
5252		}
5253	}
5254	if (!(F_SKIP_UA & flags) &&
5255	    SDEBUG_NUM_UAS != find_first_bit(devip->uas_bm, SDEBUG_NUM_UAS)) {
5256		errsts = check_readiness(scp, UAS_ONLY, devip);
5257		if (errsts)
5258			goto check_cond;
5259	}
5260	if ((F_M_ACCESS & flags) && devip->stopped) {
5261		mk_sense_buffer(scp, NOT_READY, LOGICAL_UNIT_NOT_READY, 0x2);
5262		if (debug)
5263			sdev_printk(KERN_INFO, sdp, "%s reports: Not ready: "
5264				    "%s\n", my_name, "initializing command "
5265				    "required");
5266		errsts = check_condition_result;
5267		goto fini;
5268	}
5269	if (scsi_debug_fake_rw && (F_FAKE_RW & flags))
5270		goto fini;
5271	if (scsi_debug_every_nth) {
5272		if (check_inject(scp))
5273			return 0;	/* ignore command: make trouble */
5274	}
5275	if (oip->pfp)	/* if this command has a resp_* function, call it */
5276		errsts = oip->pfp(scp, devip);
5277	else if (r_pfp)	/* if leaf function ptr NULL, try the root's */
5278		errsts = r_pfp(scp, devip);
5279
5280fini:
5281	return schedule_resp(scp, devip, errsts,
5282			     ((F_DELAY_OVERR & flags) ? 0 : scsi_debug_delay));
5283check_cond:
5284	return schedule_resp(scp, devip, check_condition_result, 0);
5285}
5286
5287static int
5288sdebug_queuecommand_lock_or_not(struct Scsi_Host *shost, struct scsi_cmnd *cmd)
5289{
5290	if (scsi_debug_host_lock) {
5291		unsigned long iflags;
5292		int rc;
5293
5294		spin_lock_irqsave(shost->host_lock, iflags);
5295		rc = scsi_debug_queuecommand(cmd);
5296		spin_unlock_irqrestore(shost->host_lock, iflags);
5297		return rc;
5298	} else
5299		return scsi_debug_queuecommand(cmd);
5300}
5301
5302static struct scsi_host_template sdebug_driver_template = {
5303	.show_info =		scsi_debug_show_info,
5304	.write_info =		scsi_debug_write_info,
5305	.proc_name =		sdebug_proc_name,
5306	.name =			"SCSI DEBUG",
5307	.info =			scsi_debug_info,
5308	.slave_alloc =		scsi_debug_slave_alloc,
5309	.slave_configure =	scsi_debug_slave_configure,
5310	.slave_destroy =	scsi_debug_slave_destroy,
5311	.ioctl =		scsi_debug_ioctl,
5312	.queuecommand =		sdebug_queuecommand_lock_or_not,
5313	.change_queue_depth =	sdebug_change_qdepth,
5314	.eh_abort_handler =	scsi_debug_abort,
5315	.eh_device_reset_handler = scsi_debug_device_reset,
5316	.eh_target_reset_handler = scsi_debug_target_reset,
5317	.eh_bus_reset_handler = scsi_debug_bus_reset,
5318	.eh_host_reset_handler = scsi_debug_host_reset,
5319	.can_queue =		SCSI_DEBUG_CANQUEUE,
5320	.this_id =		7,
5321	.sg_tablesize =		SCSI_MAX_SG_CHAIN_SEGMENTS,
5322	.cmd_per_lun =		DEF_CMD_PER_LUN,
5323	.max_sectors =		-1U,
5324	.use_clustering = 	DISABLE_CLUSTERING,
5325	.module =		THIS_MODULE,
5326	.track_queue_depth =	1,
5327	.cmd_size =		sizeof(struct sdebug_scmd_extra_t),
5328};
5329
5330static int sdebug_driver_probe(struct device * dev)
5331{
5332	int error = 0;
5333	int opts;
5334	struct sdebug_host_info *sdbg_host;
5335	struct Scsi_Host *hpnt;
5336	int host_prot;
5337
5338	sdbg_host = to_sdebug_host(dev);
5339
5340	sdebug_driver_template.can_queue = scsi_debug_max_queue;
5341	if (scsi_debug_clustering)
5342		sdebug_driver_template.use_clustering = ENABLE_CLUSTERING;
5343	hpnt = scsi_host_alloc(&sdebug_driver_template, sizeof(sdbg_host));
5344	if (NULL == hpnt) {
5345		pr_err("%s: scsi_host_alloc failed\n", __func__);
5346		error = -ENODEV;
5347		return error;
5348	}
5349
5350        sdbg_host->shost = hpnt;
5351	*((struct sdebug_host_info **)hpnt->hostdata) = sdbg_host;
5352	if ((hpnt->this_id >= 0) && (scsi_debug_num_tgts > hpnt->this_id))
5353		hpnt->max_id = scsi_debug_num_tgts + 1;
5354	else
5355		hpnt->max_id = scsi_debug_num_tgts;
5356	hpnt->max_lun = SAM2_WLUN_REPORT_LUNS;	/* = scsi_debug_max_luns; */
5357
5358	host_prot = 0;
5359
5360	switch (scsi_debug_dif) {
5361
5362	case SD_DIF_TYPE1_PROTECTION:
5363		host_prot = SHOST_DIF_TYPE1_PROTECTION;
5364		if (scsi_debug_dix)
5365			host_prot |= SHOST_DIX_TYPE1_PROTECTION;
5366		break;
5367
5368	case SD_DIF_TYPE2_PROTECTION:
5369		host_prot = SHOST_DIF_TYPE2_PROTECTION;
5370		if (scsi_debug_dix)
5371			host_prot |= SHOST_DIX_TYPE2_PROTECTION;
5372		break;
5373
5374	case SD_DIF_TYPE3_PROTECTION:
5375		host_prot = SHOST_DIF_TYPE3_PROTECTION;
5376		if (scsi_debug_dix)
5377			host_prot |= SHOST_DIX_TYPE3_PROTECTION;
5378		break;
5379
5380	default:
5381		if (scsi_debug_dix)
5382			host_prot |= SHOST_DIX_TYPE0_PROTECTION;
5383		break;
5384	}
5385
5386	scsi_host_set_prot(hpnt, host_prot);
5387
5388	printk(KERN_INFO "scsi_debug: host protection%s%s%s%s%s%s%s\n",
5389	       (host_prot & SHOST_DIF_TYPE1_PROTECTION) ? " DIF1" : "",
5390	       (host_prot & SHOST_DIF_TYPE2_PROTECTION) ? " DIF2" : "",
5391	       (host_prot & SHOST_DIF_TYPE3_PROTECTION) ? " DIF3" : "",
5392	       (host_prot & SHOST_DIX_TYPE0_PROTECTION) ? " DIX0" : "",
5393	       (host_prot & SHOST_DIX_TYPE1_PROTECTION) ? " DIX1" : "",
5394	       (host_prot & SHOST_DIX_TYPE2_PROTECTION) ? " DIX2" : "",
5395	       (host_prot & SHOST_DIX_TYPE3_PROTECTION) ? " DIX3" : "");
5396
5397	if (scsi_debug_guard == 1)
5398		scsi_host_set_guard(hpnt, SHOST_DIX_GUARD_IP);
5399	else
5400		scsi_host_set_guard(hpnt, SHOST_DIX_GUARD_CRC);
5401
5402	opts = scsi_debug_opts;
5403	if (SCSI_DEBUG_OPT_RECOVERED_ERR & opts)
5404		sdebug_any_injecting_opt = true;
5405	else if (SCSI_DEBUG_OPT_TRANSPORT_ERR & opts)
5406		sdebug_any_injecting_opt = true;
5407	else if (SCSI_DEBUG_OPT_DIF_ERR & opts)
5408		sdebug_any_injecting_opt = true;
5409	else if (SCSI_DEBUG_OPT_DIX_ERR & opts)
5410		sdebug_any_injecting_opt = true;
5411	else if (SCSI_DEBUG_OPT_SHORT_TRANSFER & opts)
5412		sdebug_any_injecting_opt = true;
5413
5414        error = scsi_add_host(hpnt, &sdbg_host->dev);
5415        if (error) {
5416                printk(KERN_ERR "%s: scsi_add_host failed\n", __func__);
5417                error = -ENODEV;
5418		scsi_host_put(hpnt);
5419        } else
5420		scsi_scan_host(hpnt);
5421
5422	return error;
5423}
5424
5425static int sdebug_driver_remove(struct device * dev)
5426{
5427        struct sdebug_host_info *sdbg_host;
5428	struct sdebug_dev_info *sdbg_devinfo, *tmp;
5429
5430	sdbg_host = to_sdebug_host(dev);
5431
5432	if (!sdbg_host) {
5433		printk(KERN_ERR "%s: Unable to locate host info\n",
5434		       __func__);
5435		return -ENODEV;
5436	}
5437
5438        scsi_remove_host(sdbg_host->shost);
5439
5440	list_for_each_entry_safe(sdbg_devinfo, tmp, &sdbg_host->dev_info_list,
5441				 dev_list) {
5442                list_del(&sdbg_devinfo->dev_list);
5443                kfree(sdbg_devinfo);
5444        }
5445
5446        scsi_host_put(sdbg_host->shost);
5447        return 0;
5448}
5449
5450static int pseudo_lld_bus_match(struct device *dev,
5451				struct device_driver *dev_driver)
5452{
5453	return 1;
5454}
5455
5456static struct bus_type pseudo_lld_bus = {
5457	.name = "pseudo",
5458	.match = pseudo_lld_bus_match,
5459	.probe = sdebug_driver_probe,
5460	.remove = sdebug_driver_remove,
5461	.drv_groups = sdebug_drv_groups,
5462};
5463