0001
0002 #ifndef _SCSI_SCSI_DEVICE_H
0003 #define _SCSI_SCSI_DEVICE_H
0004
0005 #include <linux/list.h>
0006 #include <linux/spinlock.h>
0007 #include <linux/workqueue.h>
0008 #include <linux/blk-mq.h>
0009 #include <scsi/scsi.h>
0010 #include <linux/atomic.h>
0011 #include <linux/sbitmap.h>
0012
0013 struct bsg_device;
0014 struct device;
0015 struct request_queue;
0016 struct scsi_cmnd;
0017 struct scsi_lun;
0018 struct scsi_sense_hdr;
0019
0020 typedef __u64 __bitwise blist_flags_t;
0021
0022 #define SCSI_SENSE_BUFFERSIZE 96
0023
0024 struct scsi_mode_data {
0025 __u32 length;
0026 __u16 block_descriptor_length;
0027 __u8 medium_type;
0028 __u8 device_specific;
0029 __u8 header_length;
0030 __u8 longlba:1;
0031 };
0032
0033
0034
0035
0036
0037
0038 enum scsi_device_state {
0039 SDEV_CREATED = 1,
0040
0041 SDEV_RUNNING,
0042
0043 SDEV_CANCEL,
0044
0045 SDEV_DEL,
0046
0047 SDEV_QUIESCE,
0048
0049
0050 SDEV_OFFLINE,
0051
0052 SDEV_TRANSPORT_OFFLINE,
0053 SDEV_BLOCK,
0054
0055
0056
0057 SDEV_CREATED_BLOCK,
0058 };
0059
0060 enum scsi_scan_mode {
0061 SCSI_SCAN_INITIAL = 0,
0062 SCSI_SCAN_RESCAN,
0063 SCSI_SCAN_MANUAL,
0064 };
0065
0066 enum scsi_device_event {
0067 SDEV_EVT_MEDIA_CHANGE = 1,
0068 SDEV_EVT_INQUIRY_CHANGE_REPORTED,
0069 SDEV_EVT_CAPACITY_CHANGE_REPORTED,
0070 SDEV_EVT_SOFT_THRESHOLD_REACHED_REPORTED,
0071 SDEV_EVT_MODE_PARAMETER_CHANGE_REPORTED,
0072 SDEV_EVT_LUN_CHANGE_REPORTED,
0073 SDEV_EVT_ALUA_STATE_CHANGE_REPORTED,
0074 SDEV_EVT_POWER_ON_RESET_OCCURRED,
0075
0076 SDEV_EVT_FIRST = SDEV_EVT_MEDIA_CHANGE,
0077 SDEV_EVT_LAST = SDEV_EVT_POWER_ON_RESET_OCCURRED,
0078
0079 SDEV_EVT_MAXBITS = SDEV_EVT_LAST + 1
0080 };
0081
0082 struct scsi_event {
0083 enum scsi_device_event evt_type;
0084 struct list_head node;
0085
0086
0087
0088
0089 };
0090
0091
0092
0093
0094
0095
0096
0097 struct scsi_vpd {
0098 struct rcu_head rcu;
0099 int len;
0100 unsigned char data[];
0101 };
0102
0103 enum scsi_vpd_parameters {
0104 SCSI_VPD_HEADER_SIZE = 4,
0105 };
0106
0107 struct scsi_device {
0108 struct Scsi_Host *host;
0109 struct request_queue *request_queue;
0110
0111
0112 struct list_head siblings;
0113 struct list_head same_target_siblings;
0114
0115 struct sbitmap budget_map;
0116 atomic_t device_blocked;
0117
0118 atomic_t restarts;
0119 spinlock_t list_lock;
0120 struct list_head starved_entry;
0121 unsigned short queue_depth;
0122 unsigned short max_queue_depth;
0123 unsigned short last_queue_full_depth;
0124 unsigned short last_queue_full_count;
0125 unsigned long last_queue_full_time;
0126 unsigned long queue_ramp_up_period;
0127 #define SCSI_DEFAULT_RAMP_UP_PERIOD (120 * HZ)
0128
0129 unsigned long last_queue_ramp_up;
0130
0131 unsigned int id, channel;
0132 u64 lun;
0133 unsigned int manufacturer;
0134
0135 unsigned sector_size;
0136
0137 void *hostdata;
0138 unsigned char type;
0139 char scsi_level;
0140 char inq_periph_qual;
0141 struct mutex inquiry_mutex;
0142 unsigned char inquiry_len;
0143 unsigned char * inquiry;
0144 const char * vendor;
0145 const char * model;
0146 const char * rev;
0147
0148 struct scsi_vpd __rcu *vpd_pg0;
0149 struct scsi_vpd __rcu *vpd_pg83;
0150 struct scsi_vpd __rcu *vpd_pg80;
0151 struct scsi_vpd __rcu *vpd_pg89;
0152 struct scsi_vpd __rcu *vpd_pgb0;
0153 struct scsi_vpd __rcu *vpd_pgb1;
0154 struct scsi_vpd __rcu *vpd_pgb2;
0155
0156 struct scsi_target *sdev_target;
0157
0158 blist_flags_t sdev_bflags;
0159
0160
0161
0162 unsigned int eh_timeout;
0163 unsigned removable:1;
0164 unsigned changed:1;
0165 unsigned busy:1;
0166 unsigned lockable:1;
0167 unsigned locked:1;
0168 unsigned borken:1;
0169
0170 unsigned disconnect:1;
0171 unsigned soft_reset:1;
0172 unsigned sdtr:1;
0173 unsigned wdtr:1;
0174 unsigned ppr:1;
0175 unsigned tagged_supported:1;
0176 unsigned simple_tags:1;
0177 unsigned was_reset:1;
0178
0179 unsigned expecting_cc_ua:1;
0180
0181 unsigned use_10_for_rw:1;
0182 unsigned use_10_for_ms:1;
0183 unsigned set_dbd_for_ms:1;
0184 unsigned no_report_opcodes:1;
0185 unsigned no_write_same:1;
0186 unsigned use_16_for_rw:1;
0187 unsigned skip_ms_page_8:1;
0188 unsigned skip_ms_page_3f:1;
0189 unsigned skip_vpd_pages:1;
0190 unsigned try_vpd_pages:1;
0191 unsigned use_192_bytes_for_3f:1;
0192 unsigned no_start_on_add:1;
0193 unsigned allow_restart:1;
0194 unsigned manage_start_stop:1;
0195 unsigned start_stop_pwr_cond:1;
0196 unsigned no_uld_attach:1;
0197 unsigned select_no_atn:1;
0198 unsigned fix_capacity:1;
0199 unsigned guess_capacity:1;
0200 unsigned retry_hwerror:1;
0201 unsigned last_sector_bug:1;
0202
0203 unsigned no_read_disc_info:1;
0204 unsigned no_read_capacity_16:1;
0205 unsigned try_rc_10_first:1;
0206 unsigned security_supported:1;
0207 unsigned is_visible:1;
0208 unsigned wce_default_on:1;
0209 unsigned no_dif:1;
0210 unsigned broken_fua:1;
0211 unsigned lun_in_cdb:1;
0212 unsigned unmap_limit_for_ws:1;
0213 unsigned rpm_autosuspend:1;
0214
0215 unsigned ignore_media_change:1;
0216 unsigned silence_suspend:1;
0217
0218 unsigned int queue_stopped;
0219 bool offline_already;
0220
0221 atomic_t disk_events_disable_depth;
0222
0223 DECLARE_BITMAP(supported_events, SDEV_EVT_MAXBITS);
0224 DECLARE_BITMAP(pending_events, SDEV_EVT_MAXBITS);
0225 struct list_head event_list;
0226 struct work_struct event_work;
0227
0228 unsigned int max_device_blocked;
0229 #define SCSI_DEFAULT_DEVICE_BLOCKED 3
0230
0231 atomic_t iorequest_cnt;
0232 atomic_t iodone_cnt;
0233 atomic_t ioerr_cnt;
0234
0235 struct device sdev_gendev,
0236 sdev_dev;
0237
0238 struct execute_work ew;
0239 struct work_struct requeue_work;
0240
0241 struct scsi_device_handler *handler;
0242 void *handler_data;
0243
0244 size_t dma_drain_len;
0245 void *dma_drain_buf;
0246
0247 unsigned int sg_timeout;
0248 unsigned int sg_reserved_size;
0249
0250 struct bsg_device *bsg_dev;
0251 unsigned char access_state;
0252 struct mutex state_mutex;
0253 enum scsi_device_state sdev_state;
0254 struct task_struct *quiesced_by;
0255 unsigned long sdev_data[];
0256 } __attribute__((aligned(sizeof(unsigned long))));
0257
0258 #define to_scsi_device(d) \
0259 container_of(d, struct scsi_device, sdev_gendev)
0260 #define class_to_sdev(d) \
0261 container_of(d, struct scsi_device, sdev_dev)
0262 #define transport_class_to_sdev(class_dev) \
0263 to_scsi_device(class_dev->parent)
0264
0265 #define sdev_dbg(sdev, fmt, a...) \
0266 dev_dbg(&(sdev)->sdev_gendev, fmt, ##a)
0267
0268
0269
0270
0271
0272 __printf(4, 5) void
0273 sdev_prefix_printk(const char *, const struct scsi_device *, const char *,
0274 const char *, ...);
0275
0276 #define sdev_printk(l, sdev, fmt, a...) \
0277 sdev_prefix_printk(l, sdev, NULL, fmt, ##a)
0278
0279 __printf(3, 4) void
0280 scmd_printk(const char *, const struct scsi_cmnd *, const char *, ...);
0281
0282 #define scmd_dbg(scmd, fmt, a...) \
0283 do { \
0284 struct request *__rq = scsi_cmd_to_rq((scmd)); \
0285 \
0286 if (__rq->q->disk) \
0287 sdev_dbg((scmd)->device, "[%s] " fmt, \
0288 __rq->q->disk->disk_name, ##a); \
0289 else \
0290 sdev_dbg((scmd)->device, fmt, ##a); \
0291 } while (0)
0292
0293 enum scsi_target_state {
0294 STARGET_CREATED = 1,
0295 STARGET_RUNNING,
0296 STARGET_REMOVE,
0297 STARGET_CREATED_REMOVE,
0298 STARGET_DEL,
0299 };
0300
0301
0302
0303
0304
0305
0306 struct scsi_target {
0307 struct scsi_device *starget_sdev_user;
0308 struct list_head siblings;
0309 struct list_head devices;
0310 struct device dev;
0311 struct kref reap_ref;
0312 unsigned int channel;
0313 unsigned int id;
0314
0315 unsigned int create:1;
0316 unsigned int single_lun:1;
0317
0318
0319 unsigned int pdt_1f_for_no_lun:1;
0320
0321 unsigned int no_report_luns:1;
0322
0323 unsigned int expecting_lun_change:1;
0324
0325
0326
0327 atomic_t target_busy;
0328 atomic_t target_blocked;
0329
0330
0331
0332
0333
0334 unsigned int can_queue;
0335 unsigned int max_target_blocked;
0336 #define SCSI_DEFAULT_TARGET_BLOCKED 3
0337
0338 char scsi_level;
0339 enum scsi_target_state state;
0340 void *hostdata;
0341 unsigned long starget_data[];
0342
0343 } __attribute__((aligned(sizeof(unsigned long))));
0344
0345 #define to_scsi_target(d) container_of(d, struct scsi_target, dev)
0346 static inline struct scsi_target *scsi_target(struct scsi_device *sdev)
0347 {
0348 return to_scsi_target(sdev->sdev_gendev.parent);
0349 }
0350 #define transport_class_to_starget(class_dev) \
0351 to_scsi_target(class_dev->parent)
0352
0353 #define starget_printk(prefix, starget, fmt, a...) \
0354 dev_printk(prefix, &(starget)->dev, fmt, ##a)
0355
0356 extern struct scsi_device *__scsi_add_device(struct Scsi_Host *,
0357 uint, uint, u64, void *hostdata);
0358 extern int scsi_add_device(struct Scsi_Host *host, uint channel,
0359 uint target, u64 lun);
0360 extern int scsi_register_device_handler(struct scsi_device_handler *scsi_dh);
0361 extern void scsi_remove_device(struct scsi_device *);
0362 extern int scsi_unregister_device_handler(struct scsi_device_handler *scsi_dh);
0363 void scsi_attach_vpd(struct scsi_device *sdev);
0364
0365 extern struct scsi_device *scsi_device_from_queue(struct request_queue *q);
0366 extern int __must_check scsi_device_get(struct scsi_device *);
0367 extern void scsi_device_put(struct scsi_device *);
0368 extern struct scsi_device *scsi_device_lookup(struct Scsi_Host *,
0369 uint, uint, u64);
0370 extern struct scsi_device *__scsi_device_lookup(struct Scsi_Host *,
0371 uint, uint, u64);
0372 extern struct scsi_device *scsi_device_lookup_by_target(struct scsi_target *,
0373 u64);
0374 extern struct scsi_device *__scsi_device_lookup_by_target(struct scsi_target *,
0375 u64);
0376 extern void starget_for_each_device(struct scsi_target *, void *,
0377 void (*fn)(struct scsi_device *, void *));
0378 extern void __starget_for_each_device(struct scsi_target *, void *,
0379 void (*fn)(struct scsi_device *,
0380 void *));
0381
0382
0383 extern struct scsi_device *__scsi_iterate_devices(struct Scsi_Host *,
0384 struct scsi_device *);
0385
0386
0387
0388
0389
0390
0391
0392
0393
0394
0395 #define shost_for_each_device(sdev, shost) \
0396 for ((sdev) = __scsi_iterate_devices((shost), NULL); \
0397 (sdev); \
0398 (sdev) = __scsi_iterate_devices((shost), (sdev)))
0399
0400
0401
0402
0403
0404
0405
0406
0407
0408
0409
0410
0411
0412
0413 #define __shost_for_each_device(sdev, shost) \
0414 list_for_each_entry((sdev), &((shost)->__devices), siblings)
0415
0416 extern int scsi_change_queue_depth(struct scsi_device *, int);
0417 extern int scsi_track_queue_full(struct scsi_device *, int);
0418
0419 extern int scsi_set_medium_removal(struct scsi_device *, char);
0420
0421 extern int scsi_mode_sense(struct scsi_device *sdev, int dbd, int modepage,
0422 unsigned char *buffer, int len, int timeout,
0423 int retries, struct scsi_mode_data *data,
0424 struct scsi_sense_hdr *);
0425 extern int scsi_mode_select(struct scsi_device *sdev, int pf, int sp,
0426 unsigned char *buffer, int len, int timeout,
0427 int retries, struct scsi_mode_data *data,
0428 struct scsi_sense_hdr *);
0429 extern int scsi_test_unit_ready(struct scsi_device *sdev, int timeout,
0430 int retries, struct scsi_sense_hdr *sshdr);
0431 extern int scsi_get_vpd_page(struct scsi_device *, u8 page, unsigned char *buf,
0432 int buf_len);
0433 extern int scsi_report_opcode(struct scsi_device *sdev, unsigned char *buffer,
0434 unsigned int len, unsigned char opcode);
0435 extern int scsi_device_set_state(struct scsi_device *sdev,
0436 enum scsi_device_state state);
0437 extern struct scsi_event *sdev_evt_alloc(enum scsi_device_event evt_type,
0438 gfp_t gfpflags);
0439 extern void sdev_evt_send(struct scsi_device *sdev, struct scsi_event *evt);
0440 extern void sdev_evt_send_simple(struct scsi_device *sdev,
0441 enum scsi_device_event evt_type, gfp_t gfpflags);
0442 extern int scsi_device_quiesce(struct scsi_device *sdev);
0443 extern void scsi_device_resume(struct scsi_device *sdev);
0444 extern void scsi_target_quiesce(struct scsi_target *);
0445 extern void scsi_target_resume(struct scsi_target *);
0446 extern void scsi_scan_target(struct device *parent, unsigned int channel,
0447 unsigned int id, u64 lun,
0448 enum scsi_scan_mode rescan);
0449 extern void scsi_target_reap(struct scsi_target *);
0450 extern void scsi_target_block(struct device *);
0451 extern void scsi_target_unblock(struct device *, enum scsi_device_state);
0452 extern void scsi_remove_target(struct device *);
0453 extern const char *scsi_device_state_name(enum scsi_device_state);
0454 extern int scsi_is_sdev_device(const struct device *);
0455 extern int scsi_is_target_device(const struct device *);
0456 extern void scsi_sanitize_inquiry_string(unsigned char *s, int len);
0457 extern int __scsi_execute(struct scsi_device *sdev, const unsigned char *cmd,
0458 int data_direction, void *buffer, unsigned bufflen,
0459 unsigned char *sense, struct scsi_sense_hdr *sshdr,
0460 int timeout, int retries, blk_opf_t flags,
0461 req_flags_t rq_flags, int *resid);
0462
0463 #define scsi_execute(sdev, cmd, data_direction, buffer, bufflen, sense, \
0464 sshdr, timeout, retries, flags, rq_flags, resid) \
0465 ({ \
0466 BUILD_BUG_ON((sense) != NULL && \
0467 sizeof(sense) != SCSI_SENSE_BUFFERSIZE); \
0468 __scsi_execute(sdev, cmd, data_direction, buffer, bufflen, \
0469 sense, sshdr, timeout, retries, flags, rq_flags, \
0470 resid); \
0471 })
0472 static inline int scsi_execute_req(struct scsi_device *sdev,
0473 const unsigned char *cmd, int data_direction, void *buffer,
0474 unsigned bufflen, struct scsi_sense_hdr *sshdr, int timeout,
0475 int retries, int *resid)
0476 {
0477 return scsi_execute(sdev, cmd, data_direction, buffer,
0478 bufflen, NULL, sshdr, timeout, retries, 0, 0, resid);
0479 }
0480 extern void sdev_disable_disk_events(struct scsi_device *sdev);
0481 extern void sdev_enable_disk_events(struct scsi_device *sdev);
0482 extern int scsi_vpd_lun_id(struct scsi_device *, char *, size_t);
0483 extern int scsi_vpd_tpg_id(struct scsi_device *, int *);
0484
0485 #ifdef CONFIG_PM
0486 extern int scsi_autopm_get_device(struct scsi_device *);
0487 extern void scsi_autopm_put_device(struct scsi_device *);
0488 #else
0489 static inline int scsi_autopm_get_device(struct scsi_device *d) { return 0; }
0490 static inline void scsi_autopm_put_device(struct scsi_device *d) {}
0491 #endif
0492
0493 static inline int __must_check scsi_device_reprobe(struct scsi_device *sdev)
0494 {
0495 return device_reprobe(&sdev->sdev_gendev);
0496 }
0497
0498 static inline unsigned int sdev_channel(struct scsi_device *sdev)
0499 {
0500 return sdev->channel;
0501 }
0502
0503 static inline unsigned int sdev_id(struct scsi_device *sdev)
0504 {
0505 return sdev->id;
0506 }
0507
0508 #define scmd_id(scmd) sdev_id((scmd)->device)
0509 #define scmd_channel(scmd) sdev_channel((scmd)->device)
0510
0511
0512
0513
0514 static inline int scsi_device_online(struct scsi_device *sdev)
0515 {
0516 return (sdev->sdev_state != SDEV_OFFLINE &&
0517 sdev->sdev_state != SDEV_TRANSPORT_OFFLINE &&
0518 sdev->sdev_state != SDEV_DEL);
0519 }
0520 static inline int scsi_device_blocked(struct scsi_device *sdev)
0521 {
0522 return sdev->sdev_state == SDEV_BLOCK ||
0523 sdev->sdev_state == SDEV_CREATED_BLOCK;
0524 }
0525 static inline int scsi_device_created(struct scsi_device *sdev)
0526 {
0527 return sdev->sdev_state == SDEV_CREATED ||
0528 sdev->sdev_state == SDEV_CREATED_BLOCK;
0529 }
0530
0531 int scsi_internal_device_block_nowait(struct scsi_device *sdev);
0532 int scsi_internal_device_unblock_nowait(struct scsi_device *sdev,
0533 enum scsi_device_state new_state);
0534
0535
0536 static inline int scsi_device_sync(struct scsi_device *sdev)
0537 {
0538 return sdev->sdtr;
0539 }
0540 static inline int scsi_device_wide(struct scsi_device *sdev)
0541 {
0542 return sdev->wdtr;
0543 }
0544 static inline int scsi_device_dt(struct scsi_device *sdev)
0545 {
0546 return sdev->ppr;
0547 }
0548 static inline int scsi_device_dt_only(struct scsi_device *sdev)
0549 {
0550 if (sdev->inquiry_len < 57)
0551 return 0;
0552 return (sdev->inquiry[56] & 0x0c) == 0x04;
0553 }
0554 static inline int scsi_device_ius(struct scsi_device *sdev)
0555 {
0556 if (sdev->inquiry_len < 57)
0557 return 0;
0558 return sdev->inquiry[56] & 0x01;
0559 }
0560 static inline int scsi_device_qas(struct scsi_device *sdev)
0561 {
0562 if (sdev->inquiry_len < 57)
0563 return 0;
0564 return sdev->inquiry[56] & 0x02;
0565 }
0566 static inline int scsi_device_enclosure(struct scsi_device *sdev)
0567 {
0568 return sdev->inquiry ? (sdev->inquiry[6] & (1<<6)) : 1;
0569 }
0570
0571 static inline int scsi_device_protection(struct scsi_device *sdev)
0572 {
0573 if (sdev->no_dif)
0574 return 0;
0575
0576 return sdev->scsi_level > SCSI_2 && sdev->inquiry[5] & (1<<0);
0577 }
0578
0579 static inline int scsi_device_tpgs(struct scsi_device *sdev)
0580 {
0581 return sdev->inquiry ? (sdev->inquiry[5] >> 4) & 0x3 : 0;
0582 }
0583
0584
0585
0586
0587
0588
0589
0590
0591
0592 static inline int scsi_device_supports_vpd(struct scsi_device *sdev)
0593 {
0594
0595
0596
0597 if (sdev->try_vpd_pages)
0598 return 1;
0599
0600
0601
0602
0603
0604 if (sdev->scsi_level >= SCSI_SPC_2 && !sdev->skip_vpd_pages)
0605 return 1;
0606 return 0;
0607 }
0608
0609 static inline int scsi_device_busy(struct scsi_device *sdev)
0610 {
0611 return sbitmap_weight(&sdev->budget_map);
0612 }
0613
0614 #define MODULE_ALIAS_SCSI_DEVICE(type) \
0615 MODULE_ALIAS("scsi:t-" __stringify(type) "*")
0616 #define SCSI_DEVICE_MODALIAS_FMT "scsi:t-0x%02x"
0617
0618 #endif