1
2#ifndef _SCSI_SCSI_DEVICE_H
3#define _SCSI_SCSI_DEVICE_H
4
5#include <linux/list.h>
6#include <linux/spinlock.h>
7#include <linux/workqueue.h>
8#include <linux/blkdev.h>
9#include <scsi/scsi.h>
10#include <linux/atomic.h>
11
12struct device;
13struct request_queue;
14struct scsi_cmnd;
15struct scsi_lun;
16struct scsi_sense_hdr;
17
18struct scsi_mode_data {
19 __u32 length;
20 __u16 block_descriptor_length;
21 __u8 medium_type;
22 __u8 device_specific;
23 __u8 header_length;
24 __u8 longlba:1;
25};
26
27
28
29
30
31
32enum scsi_device_state {
33 SDEV_CREATED = 1,
34
35 SDEV_RUNNING,
36
37 SDEV_CANCEL,
38
39 SDEV_DEL,
40
41 SDEV_QUIESCE,
42
43
44 SDEV_OFFLINE,
45
46 SDEV_TRANSPORT_OFFLINE,
47 SDEV_BLOCK,
48
49
50
51 SDEV_CREATED_BLOCK,
52};
53
54enum scsi_scan_mode {
55 SCSI_SCAN_INITIAL = 0,
56 SCSI_SCAN_RESCAN,
57 SCSI_SCAN_MANUAL,
58};
59
60enum scsi_device_event {
61 SDEV_EVT_MEDIA_CHANGE = 1,
62 SDEV_EVT_INQUIRY_CHANGE_REPORTED,
63 SDEV_EVT_CAPACITY_CHANGE_REPORTED,
64 SDEV_EVT_SOFT_THRESHOLD_REACHED_REPORTED,
65 SDEV_EVT_MODE_PARAMETER_CHANGE_REPORTED,
66 SDEV_EVT_LUN_CHANGE_REPORTED,
67 SDEV_EVT_ALUA_STATE_CHANGE_REPORTED,
68
69 SDEV_EVT_FIRST = SDEV_EVT_MEDIA_CHANGE,
70 SDEV_EVT_LAST = SDEV_EVT_ALUA_STATE_CHANGE_REPORTED,
71
72 SDEV_EVT_MAXBITS = SDEV_EVT_LAST + 1
73};
74
75struct scsi_event {
76 enum scsi_device_event evt_type;
77 struct list_head node;
78
79
80
81
82};
83
84
85
86
87
88
89
90struct scsi_vpd {
91 struct rcu_head rcu;
92 int len;
93 unsigned char data[];
94};
95
96struct scsi_device {
97 struct Scsi_Host *host;
98 struct request_queue *request_queue;
99
100
101 struct list_head siblings;
102 struct list_head same_target_siblings;
103
104 atomic_t device_busy;
105 atomic_t device_blocked;
106
107 spinlock_t list_lock;
108 struct list_head cmd_list;
109 struct list_head starved_entry;
110 unsigned short queue_depth;
111 unsigned short max_queue_depth;
112 unsigned short last_queue_full_depth;
113 unsigned short last_queue_full_count;
114 unsigned long last_queue_full_time;
115 unsigned long queue_ramp_up_period;
116#define SCSI_DEFAULT_RAMP_UP_PERIOD (120 * HZ)
117
118 unsigned long last_queue_ramp_up;
119
120 unsigned int id, channel;
121 u64 lun;
122 unsigned int manufacturer;
123
124 unsigned sector_size;
125
126 void *hostdata;
127 unsigned char type;
128 char scsi_level;
129 char inq_periph_qual;
130 struct mutex inquiry_mutex;
131 unsigned char inquiry_len;
132 unsigned char * inquiry;
133 const char * vendor;
134 const char * model;
135 const char * rev;
136
137#define SCSI_VPD_PG_LEN 255
138 struct scsi_vpd __rcu *vpd_pg83;
139 struct scsi_vpd __rcu *vpd_pg80;
140 unsigned char current_tag;
141 struct scsi_target *sdev_target;
142
143 unsigned int sdev_bflags;
144
145
146
147 unsigned int eh_timeout;
148 unsigned removable:1;
149 unsigned changed:1;
150 unsigned busy:1;
151 unsigned lockable:1;
152 unsigned locked:1;
153 unsigned borken:1;
154
155 unsigned disconnect:1;
156 unsigned soft_reset:1;
157 unsigned sdtr:1;
158 unsigned wdtr:1;
159 unsigned ppr:1;
160 unsigned tagged_supported:1;
161 unsigned simple_tags:1;
162 unsigned was_reset:1;
163
164 unsigned expecting_cc_ua:1;
165
166 unsigned use_10_for_rw:1;
167 unsigned use_10_for_ms:1;
168 unsigned no_report_opcodes:1;
169 unsigned no_write_same:1;
170 unsigned use_16_for_rw:1;
171 unsigned skip_ms_page_8:1;
172 unsigned skip_ms_page_3f:1;
173 unsigned skip_vpd_pages:1;
174 unsigned try_vpd_pages:1;
175 unsigned use_192_bytes_for_3f:1;
176 unsigned no_start_on_add:1;
177 unsigned allow_restart:1;
178 unsigned manage_start_stop:1;
179 unsigned start_stop_pwr_cond:1;
180 unsigned no_uld_attach:1;
181 unsigned select_no_atn:1;
182 unsigned fix_capacity:1;
183 unsigned guess_capacity:1;
184 unsigned retry_hwerror:1;
185 unsigned last_sector_bug:1;
186
187 unsigned no_read_disc_info:1;
188 unsigned no_read_capacity_16:1;
189 unsigned try_rc_10_first:1;
190 unsigned security_supported:1;
191 unsigned is_visible:1;
192 unsigned wce_default_on:1;
193 unsigned no_dif:1;
194 unsigned broken_fua:1;
195 unsigned lun_in_cdb:1;
196 unsigned unmap_limit_for_ws:1;
197
198 atomic_t disk_events_disable_depth;
199
200 DECLARE_BITMAP(supported_events, SDEV_EVT_MAXBITS);
201 DECLARE_BITMAP(pending_events, SDEV_EVT_MAXBITS);
202 struct list_head event_list;
203 struct work_struct event_work;
204
205 unsigned int max_device_blocked;
206#define SCSI_DEFAULT_DEVICE_BLOCKED 3
207
208 atomic_t iorequest_cnt;
209 atomic_t iodone_cnt;
210 atomic_t ioerr_cnt;
211
212 struct device sdev_gendev,
213 sdev_dev;
214
215 struct execute_work ew;
216 struct work_struct requeue_work;
217
218 struct scsi_device_handler *handler;
219 void *handler_data;
220
221 unsigned char access_state;
222 struct mutex state_mutex;
223 enum scsi_device_state sdev_state;
224 unsigned long sdev_data[0];
225} __attribute__((aligned(sizeof(unsigned long))));
226
227#define to_scsi_device(d) \
228 container_of(d, struct scsi_device, sdev_gendev)
229#define class_to_sdev(d) \
230 container_of(d, struct scsi_device, sdev_dev)
231#define transport_class_to_sdev(class_dev) \
232 to_scsi_device(class_dev->parent)
233
234#define sdev_dbg(sdev, fmt, a...) \
235 dev_dbg(&(sdev)->sdev_gendev, fmt, ##a)
236
237
238
239
240
241__printf(4, 5) void
242sdev_prefix_printk(const char *, const struct scsi_device *, const char *,
243 const char *, ...);
244
245#define sdev_printk(l, sdev, fmt, a...) \
246 sdev_prefix_printk(l, sdev, NULL, fmt, ##a)
247
248__printf(3, 4) void
249scmd_printk(const char *, const struct scsi_cmnd *, const char *, ...);
250
251#define scmd_dbg(scmd, fmt, a...) \
252 do { \
253 if ((scmd)->request->rq_disk) \
254 sdev_dbg((scmd)->device, "[%s] " fmt, \
255 (scmd)->request->rq_disk->disk_name, ##a);\
256 else \
257 sdev_dbg((scmd)->device, fmt, ##a); \
258 } while (0)
259
260enum scsi_target_state {
261 STARGET_CREATED = 1,
262 STARGET_RUNNING,
263 STARGET_REMOVE,
264 STARGET_CREATED_REMOVE,
265 STARGET_DEL,
266};
267
268
269
270
271
272
273struct scsi_target {
274 struct scsi_device *starget_sdev_user;
275 struct list_head siblings;
276 struct list_head devices;
277 struct device dev;
278 struct kref reap_ref;
279 unsigned int channel;
280 unsigned int id;
281
282 unsigned int create:1;
283 unsigned int single_lun:1;
284
285
286 unsigned int pdt_1f_for_no_lun:1;
287
288 unsigned int no_report_luns:1;
289
290 unsigned int expecting_lun_change:1;
291
292
293
294 atomic_t target_busy;
295 atomic_t target_blocked;
296
297
298
299
300
301 unsigned int can_queue;
302 unsigned int max_target_blocked;
303#define SCSI_DEFAULT_TARGET_BLOCKED 3
304
305 char scsi_level;
306 enum scsi_target_state state;
307 void *hostdata;
308 unsigned long starget_data[0];
309
310} __attribute__((aligned(sizeof(unsigned long))));
311
312#define to_scsi_target(d) container_of(d, struct scsi_target, dev)
313static inline struct scsi_target *scsi_target(struct scsi_device *sdev)
314{
315 return to_scsi_target(sdev->sdev_gendev.parent);
316}
317#define transport_class_to_starget(class_dev) \
318 to_scsi_target(class_dev->parent)
319
320#define starget_printk(prefix, starget, fmt, a...) \
321 dev_printk(prefix, &(starget)->dev, fmt, ##a)
322
323extern struct scsi_device *__scsi_add_device(struct Scsi_Host *,
324 uint, uint, u64, void *hostdata);
325extern int scsi_add_device(struct Scsi_Host *host, uint channel,
326 uint target, u64 lun);
327extern int scsi_register_device_handler(struct scsi_device_handler *scsi_dh);
328extern void scsi_remove_device(struct scsi_device *);
329extern int scsi_unregister_device_handler(struct scsi_device_handler *scsi_dh);
330void scsi_attach_vpd(struct scsi_device *sdev);
331
332extern struct scsi_device *scsi_device_from_queue(struct request_queue *q);
333extern int __must_check scsi_device_get(struct scsi_device *);
334extern void scsi_device_put(struct scsi_device *);
335extern struct scsi_device *scsi_device_lookup(struct Scsi_Host *,
336 uint, uint, u64);
337extern struct scsi_device *__scsi_device_lookup(struct Scsi_Host *,
338 uint, uint, u64);
339extern struct scsi_device *scsi_device_lookup_by_target(struct scsi_target *,
340 u64);
341extern struct scsi_device *__scsi_device_lookup_by_target(struct scsi_target *,
342 u64);
343extern void starget_for_each_device(struct scsi_target *, void *,
344 void (*fn)(struct scsi_device *, void *));
345extern void __starget_for_each_device(struct scsi_target *, void *,
346 void (*fn)(struct scsi_device *,
347 void *));
348
349
350extern struct scsi_device *__scsi_iterate_devices(struct Scsi_Host *,
351 struct scsi_device *);
352
353
354
355
356
357
358
359
360
361
362#define shost_for_each_device(sdev, shost) \
363 for ((sdev) = __scsi_iterate_devices((shost), NULL); \
364 (sdev); \
365 (sdev) = __scsi_iterate_devices((shost), (sdev)))
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380#define __shost_for_each_device(sdev, shost) \
381 list_for_each_entry((sdev), &((shost)->__devices), siblings)
382
383extern int scsi_change_queue_depth(struct scsi_device *, int);
384extern int scsi_track_queue_full(struct scsi_device *, int);
385
386extern int scsi_set_medium_removal(struct scsi_device *, char);
387
388extern int scsi_mode_sense(struct scsi_device *sdev, int dbd, int modepage,
389 unsigned char *buffer, int len, int timeout,
390 int retries, struct scsi_mode_data *data,
391 struct scsi_sense_hdr *);
392extern int scsi_mode_select(struct scsi_device *sdev, int pf, int sp,
393 int modepage, unsigned char *buffer, int len,
394 int timeout, int retries,
395 struct scsi_mode_data *data,
396 struct scsi_sense_hdr *);
397extern int scsi_test_unit_ready(struct scsi_device *sdev, int timeout,
398 int retries, struct scsi_sense_hdr *sshdr);
399extern int scsi_get_vpd_page(struct scsi_device *, u8 page, unsigned char *buf,
400 int buf_len);
401extern int scsi_report_opcode(struct scsi_device *sdev, unsigned char *buffer,
402 unsigned int len, unsigned char opcode);
403extern int scsi_device_set_state(struct scsi_device *sdev,
404 enum scsi_device_state state);
405extern struct scsi_event *sdev_evt_alloc(enum scsi_device_event evt_type,
406 gfp_t gfpflags);
407extern void sdev_evt_send(struct scsi_device *sdev, struct scsi_event *evt);
408extern void sdev_evt_send_simple(struct scsi_device *sdev,
409 enum scsi_device_event evt_type, gfp_t gfpflags);
410extern int scsi_device_quiesce(struct scsi_device *sdev);
411extern void scsi_device_resume(struct scsi_device *sdev);
412extern void scsi_target_quiesce(struct scsi_target *);
413extern void scsi_target_resume(struct scsi_target *);
414extern void scsi_scan_target(struct device *parent, unsigned int channel,
415 unsigned int id, u64 lun,
416 enum scsi_scan_mode rescan);
417extern void scsi_target_reap(struct scsi_target *);
418extern void scsi_target_block(struct device *);
419extern void scsi_target_unblock(struct device *, enum scsi_device_state);
420extern void scsi_remove_target(struct device *);
421extern const char *scsi_device_state_name(enum scsi_device_state);
422extern int scsi_is_sdev_device(const struct device *);
423extern int scsi_is_target_device(const struct device *);
424extern void scsi_sanitize_inquiry_string(unsigned char *s, int len);
425extern int scsi_execute(struct scsi_device *sdev, const unsigned char *cmd,
426 int data_direction, void *buffer, unsigned bufflen,
427 unsigned char *sense, struct scsi_sense_hdr *sshdr,
428 int timeout, int retries, u64 flags,
429 req_flags_t rq_flags, int *resid);
430static inline int scsi_execute_req(struct scsi_device *sdev,
431 const unsigned char *cmd, int data_direction, void *buffer,
432 unsigned bufflen, struct scsi_sense_hdr *sshdr, int timeout,
433 int retries, int *resid)
434{
435 return scsi_execute(sdev, cmd, data_direction, buffer,
436 bufflen, NULL, sshdr, timeout, retries, 0, 0, resid);
437}
438extern void sdev_disable_disk_events(struct scsi_device *sdev);
439extern void sdev_enable_disk_events(struct scsi_device *sdev);
440extern int scsi_vpd_lun_id(struct scsi_device *, char *, size_t);
441extern int scsi_vpd_tpg_id(struct scsi_device *, int *);
442
443#ifdef CONFIG_PM
444extern int scsi_autopm_get_device(struct scsi_device *);
445extern void scsi_autopm_put_device(struct scsi_device *);
446#else
447static inline int scsi_autopm_get_device(struct scsi_device *d) { return 0; }
448static inline void scsi_autopm_put_device(struct scsi_device *d) {}
449#endif
450
451static inline int __must_check scsi_device_reprobe(struct scsi_device *sdev)
452{
453 return device_reprobe(&sdev->sdev_gendev);
454}
455
456static inline unsigned int sdev_channel(struct scsi_device *sdev)
457{
458 return sdev->channel;
459}
460
461static inline unsigned int sdev_id(struct scsi_device *sdev)
462{
463 return sdev->id;
464}
465
466#define scmd_id(scmd) sdev_id((scmd)->device)
467#define scmd_channel(scmd) sdev_channel((scmd)->device)
468
469
470
471
472static inline int scsi_device_online(struct scsi_device *sdev)
473{
474 return (sdev->sdev_state != SDEV_OFFLINE &&
475 sdev->sdev_state != SDEV_TRANSPORT_OFFLINE &&
476 sdev->sdev_state != SDEV_DEL);
477}
478static inline int scsi_device_blocked(struct scsi_device *sdev)
479{
480 return sdev->sdev_state == SDEV_BLOCK ||
481 sdev->sdev_state == SDEV_CREATED_BLOCK;
482}
483static inline int scsi_device_created(struct scsi_device *sdev)
484{
485 return sdev->sdev_state == SDEV_CREATED ||
486 sdev->sdev_state == SDEV_CREATED_BLOCK;
487}
488
489int scsi_internal_device_block_nowait(struct scsi_device *sdev);
490int scsi_internal_device_unblock_nowait(struct scsi_device *sdev,
491 enum scsi_device_state new_state);
492
493
494static inline int scsi_device_sync(struct scsi_device *sdev)
495{
496 return sdev->sdtr;
497}
498static inline int scsi_device_wide(struct scsi_device *sdev)
499{
500 return sdev->wdtr;
501}
502static inline int scsi_device_dt(struct scsi_device *sdev)
503{
504 return sdev->ppr;
505}
506static inline int scsi_device_dt_only(struct scsi_device *sdev)
507{
508 if (sdev->inquiry_len < 57)
509 return 0;
510 return (sdev->inquiry[56] & 0x0c) == 0x04;
511}
512static inline int scsi_device_ius(struct scsi_device *sdev)
513{
514 if (sdev->inquiry_len < 57)
515 return 0;
516 return sdev->inquiry[56] & 0x01;
517}
518static inline int scsi_device_qas(struct scsi_device *sdev)
519{
520 if (sdev->inquiry_len < 57)
521 return 0;
522 return sdev->inquiry[56] & 0x02;
523}
524static inline int scsi_device_enclosure(struct scsi_device *sdev)
525{
526 return sdev->inquiry ? (sdev->inquiry[6] & (1<<6)) : 1;
527}
528
529static inline int scsi_device_protection(struct scsi_device *sdev)
530{
531 if (sdev->no_dif)
532 return 0;
533
534 return sdev->scsi_level > SCSI_2 && sdev->inquiry[5] & (1<<0);
535}
536
537static inline int scsi_device_tpgs(struct scsi_device *sdev)
538{
539 return sdev->inquiry ? (sdev->inquiry[5] >> 4) & 0x3 : 0;
540}
541
542
543
544
545
546
547
548
549
550static inline int scsi_device_supports_vpd(struct scsi_device *sdev)
551{
552
553
554
555 if (sdev->try_vpd_pages)
556 return 1;
557
558
559
560
561
562 if (sdev->scsi_level >= SCSI_SPC_2 && !sdev->skip_vpd_pages)
563 return 1;
564 return 0;
565}
566
567#define MODULE_ALIAS_SCSI_DEVICE(type) \
568 MODULE_ALIAS("scsi:t-" __stringify(type) "*")
569#define SCSI_DEVICE_MODALIAS_FMT "scsi:t-0x%02x"
570
571#endif
572