root/include/scsi/scsi_device.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. scsi_execute_req
  2. scsi_autopm_get_device
  3. scsi_autopm_put_device
  4. scsi_device_reprobe
  5. sdev_channel
  6. sdev_id
  7. scsi_device_online
  8. scsi_device_blocked
  9. scsi_device_created
  10. scsi_device_sync
  11. scsi_device_wide
  12. scsi_device_dt
  13. scsi_device_dt_only
  14. scsi_device_ius
  15. scsi_device_qas
  16. scsi_device_enclosure
  17. scsi_device_protection
  18. scsi_device_tpgs
  19. scsi_device_supports_vpd

   1 /* SPDX-License-Identifier: GPL-2.0 */
   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 
  12 struct device;
  13 struct request_queue;
  14 struct scsi_cmnd;
  15 struct scsi_lun;
  16 struct scsi_sense_hdr;
  17 
  18 typedef __u64 __bitwise blist_flags_t;
  19 
  20 #define SCSI_SENSE_BUFFERSIZE   96
  21 
  22 struct scsi_mode_data {
  23         __u32   length;
  24         __u16   block_descriptor_length;
  25         __u8    medium_type;
  26         __u8    device_specific;
  27         __u8    header_length;
  28         __u8    longlba:1;
  29 };
  30 
  31 /*
  32  * sdev state: If you alter this, you also need to alter scsi_sysfs.c
  33  * (for the ascii descriptions) and the state model enforcer:
  34  * scsi_lib:scsi_device_set_state().
  35  */
  36 enum scsi_device_state {
  37         SDEV_CREATED = 1,       /* device created but not added to sysfs
  38                                  * Only internal commands allowed (for inq) */
  39         SDEV_RUNNING,           /* device properly configured
  40                                  * All commands allowed */
  41         SDEV_CANCEL,            /* beginning to delete device
  42                                  * Only error handler commands allowed */
  43         SDEV_DEL,               /* device deleted 
  44                                  * no commands allowed */
  45         SDEV_QUIESCE,           /* Device quiescent.  No block commands
  46                                  * will be accepted, only specials (which
  47                                  * originate in the mid-layer) */
  48         SDEV_OFFLINE,           /* Device offlined (by error handling or
  49                                  * user request */
  50         SDEV_TRANSPORT_OFFLINE, /* Offlined by transport class error handler */
  51         SDEV_BLOCK,             /* Device blocked by scsi lld.  No
  52                                  * scsi commands from user or midlayer
  53                                  * should be issued to the scsi
  54                                  * lld. */
  55         SDEV_CREATED_BLOCK,     /* same as above but for created devices */
  56 };
  57 
  58 enum scsi_scan_mode {
  59         SCSI_SCAN_INITIAL = 0,
  60         SCSI_SCAN_RESCAN,
  61         SCSI_SCAN_MANUAL,
  62 };
  63 
  64 enum scsi_device_event {
  65         SDEV_EVT_MEDIA_CHANGE   = 1,    /* media has changed */
  66         SDEV_EVT_INQUIRY_CHANGE_REPORTED,               /* 3F 03  UA reported */
  67         SDEV_EVT_CAPACITY_CHANGE_REPORTED,              /* 2A 09  UA reported */
  68         SDEV_EVT_SOFT_THRESHOLD_REACHED_REPORTED,       /* 38 07  UA reported */
  69         SDEV_EVT_MODE_PARAMETER_CHANGE_REPORTED,        /* 2A 01  UA reported */
  70         SDEV_EVT_LUN_CHANGE_REPORTED,                   /* 3F 0E  UA reported */
  71         SDEV_EVT_ALUA_STATE_CHANGE_REPORTED,            /* 2A 06  UA reported */
  72         SDEV_EVT_POWER_ON_RESET_OCCURRED,               /* 29 00  UA reported */
  73 
  74         SDEV_EVT_FIRST          = SDEV_EVT_MEDIA_CHANGE,
  75         SDEV_EVT_LAST           = SDEV_EVT_POWER_ON_RESET_OCCURRED,
  76 
  77         SDEV_EVT_MAXBITS        = SDEV_EVT_LAST + 1
  78 };
  79 
  80 struct scsi_event {
  81         enum scsi_device_event  evt_type;
  82         struct list_head        node;
  83 
  84         /* put union of data structures, for non-simple event types,
  85          * here
  86          */
  87 };
  88 
  89 /**
  90  * struct scsi_vpd - SCSI Vital Product Data
  91  * @rcu: For kfree_rcu().
  92  * @len: Length in bytes of @data.
  93  * @data: VPD data as defined in various T10 SCSI standard documents.
  94  */
  95 struct scsi_vpd {
  96         struct rcu_head rcu;
  97         int             len;
  98         unsigned char   data[];
  99 };
 100 
 101 struct scsi_device {
 102         struct Scsi_Host *host;
 103         struct request_queue *request_queue;
 104 
 105         /* the next two are protected by the host->host_lock */
 106         struct list_head    siblings;   /* list of all devices on this host */
 107         struct list_head    same_target_siblings; /* just the devices sharing same target id */
 108 
 109         atomic_t device_busy;           /* commands actually active on LLDD */
 110         atomic_t device_blocked;        /* Device returned QUEUE_FULL. */
 111 
 112         spinlock_t list_lock;
 113         struct list_head cmd_list;      /* queue of in use SCSI Command structures */
 114         struct list_head starved_entry;
 115         unsigned short queue_depth;     /* How deep of a queue we want */
 116         unsigned short max_queue_depth; /* max queue depth */
 117         unsigned short last_queue_full_depth; /* These two are used by */
 118         unsigned short last_queue_full_count; /* scsi_track_queue_full() */
 119         unsigned long last_queue_full_time;     /* last queue full time */
 120         unsigned long queue_ramp_up_period;     /* ramp up period in jiffies */
 121 #define SCSI_DEFAULT_RAMP_UP_PERIOD     (120 * HZ)
 122 
 123         unsigned long last_queue_ramp_up;       /* last queue ramp up time */
 124 
 125         unsigned int id, channel;
 126         u64 lun;
 127         unsigned int manufacturer;      /* Manufacturer of device, for using 
 128                                          * vendor-specific cmd's */
 129         unsigned sector_size;   /* size in bytes */
 130 
 131         void *hostdata;         /* available to low-level driver */
 132         unsigned char type;
 133         char scsi_level;
 134         char inq_periph_qual;   /* PQ from INQUIRY data */      
 135         struct mutex inquiry_mutex;
 136         unsigned char inquiry_len;      /* valid bytes in 'inquiry' */
 137         unsigned char * inquiry;        /* INQUIRY response data */
 138         const char * vendor;            /* [back_compat] point into 'inquiry' ... */
 139         const char * model;             /* ... after scan; point to static string */
 140         const char * rev;               /* ... "nullnullnullnull" before scan */
 141 
 142 #define SCSI_VPD_PG_LEN                255
 143         struct scsi_vpd __rcu *vpd_pg83;
 144         struct scsi_vpd __rcu *vpd_pg80;
 145         unsigned char current_tag;      /* current tag */
 146         struct scsi_target      *sdev_target;   /* used only for single_lun */
 147 
 148         blist_flags_t           sdev_bflags; /* black/white flags as also found in
 149                                  * scsi_devinfo.[hc]. For now used only to
 150                                  * pass settings from slave_alloc to scsi
 151                                  * core. */
 152         unsigned int eh_timeout; /* Error handling timeout */
 153         unsigned removable:1;
 154         unsigned changed:1;     /* Data invalid due to media change */
 155         unsigned busy:1;        /* Used to prevent races */
 156         unsigned lockable:1;    /* Able to prevent media removal */
 157         unsigned locked:1;      /* Media removal disabled */
 158         unsigned borken:1;      /* Tell the Seagate driver to be 
 159                                  * painfully slow on this device */
 160         unsigned disconnect:1;  /* can disconnect */
 161         unsigned soft_reset:1;  /* Uses soft reset option */
 162         unsigned sdtr:1;        /* Device supports SDTR messages */
 163         unsigned wdtr:1;        /* Device supports WDTR messages */
 164         unsigned ppr:1;         /* Device supports PPR messages */
 165         unsigned tagged_supported:1;    /* Supports SCSI-II tagged queuing */
 166         unsigned simple_tags:1; /* simple queue tag messages are enabled */
 167         unsigned was_reset:1;   /* There was a bus reset on the bus for 
 168                                  * this device */
 169         unsigned expecting_cc_ua:1; /* Expecting a CHECK_CONDITION/UNIT_ATTN
 170                                      * because we did a bus reset. */
 171         unsigned use_10_for_rw:1; /* first try 10-byte read / write */
 172         unsigned use_10_for_ms:1; /* first try 10-byte mode sense/select */
 173         unsigned no_report_opcodes:1;   /* no REPORT SUPPORTED OPERATION CODES */
 174         unsigned no_write_same:1;       /* no WRITE SAME command */
 175         unsigned use_16_for_rw:1; /* Use read/write(16) over read/write(10) */
 176         unsigned skip_ms_page_8:1;      /* do not use MODE SENSE page 0x08 */
 177         unsigned skip_ms_page_3f:1;     /* do not use MODE SENSE page 0x3f */
 178         unsigned skip_vpd_pages:1;      /* do not read VPD pages */
 179         unsigned try_vpd_pages:1;       /* attempt to read VPD pages */
 180         unsigned use_192_bytes_for_3f:1; /* ask for 192 bytes from page 0x3f */
 181         unsigned no_start_on_add:1;     /* do not issue start on add */
 182         unsigned allow_restart:1; /* issue START_UNIT in error handler */
 183         unsigned manage_start_stop:1;   /* Let HLD (sd) manage start/stop */
 184         unsigned start_stop_pwr_cond:1; /* Set power cond. in START_STOP_UNIT */
 185         unsigned no_uld_attach:1; /* disable connecting to upper level drivers */
 186         unsigned select_no_atn:1;
 187         unsigned fix_capacity:1;        /* READ_CAPACITY is too high by 1 */
 188         unsigned guess_capacity:1;      /* READ_CAPACITY might be too high by 1 */
 189         unsigned retry_hwerror:1;       /* Retry HARDWARE_ERROR */
 190         unsigned last_sector_bug:1;     /* do not use multisector accesses on
 191                                            SD_LAST_BUGGY_SECTORS */
 192         unsigned no_read_disc_info:1;   /* Avoid READ_DISC_INFO cmds */
 193         unsigned no_read_capacity_16:1; /* Avoid READ_CAPACITY_16 cmds */
 194         unsigned try_rc_10_first:1;     /* Try READ_CAPACACITY_10 first */
 195         unsigned security_supported:1;  /* Supports Security Protocols */
 196         unsigned is_visible:1;  /* is the device visible in sysfs */
 197         unsigned wce_default_on:1;      /* Cache is ON by default */
 198         unsigned no_dif:1;      /* T10 PI (DIF) should be disabled */
 199         unsigned broken_fua:1;          /* Don't set FUA bit */
 200         unsigned lun_in_cdb:1;          /* Store LUN bits in CDB[1] */
 201         unsigned unmap_limit_for_ws:1;  /* Use the UNMAP limit for WRITE SAME */
 202 
 203         atomic_t disk_events_disable_depth; /* disable depth for disk events */
 204 
 205         DECLARE_BITMAP(supported_events, SDEV_EVT_MAXBITS); /* supported events */
 206         DECLARE_BITMAP(pending_events, SDEV_EVT_MAXBITS); /* pending events */
 207         struct list_head event_list;    /* asserted events */
 208         struct work_struct event_work;
 209 
 210         unsigned int max_device_blocked; /* what device_blocked counts down from  */
 211 #define SCSI_DEFAULT_DEVICE_BLOCKED     3
 212 
 213         atomic_t iorequest_cnt;
 214         atomic_t iodone_cnt;
 215         atomic_t ioerr_cnt;
 216 
 217         struct device           sdev_gendev,
 218                                 sdev_dev;
 219 
 220         struct execute_work     ew; /* used to get process context on put */
 221         struct work_struct      requeue_work;
 222 
 223         struct scsi_device_handler *handler;
 224         void                    *handler_data;
 225 
 226         unsigned char           access_state;
 227         struct mutex            state_mutex;
 228         enum scsi_device_state sdev_state;
 229         struct task_struct      *quiesced_by;
 230         unsigned long           sdev_data[0];
 231 } __attribute__((aligned(sizeof(unsigned long))));
 232 
 233 #define to_scsi_device(d)       \
 234         container_of(d, struct scsi_device, sdev_gendev)
 235 #define class_to_sdev(d)        \
 236         container_of(d, struct scsi_device, sdev_dev)
 237 #define transport_class_to_sdev(class_dev) \
 238         to_scsi_device(class_dev->parent)
 239 
 240 #define sdev_dbg(sdev, fmt, a...) \
 241         dev_dbg(&(sdev)->sdev_gendev, fmt, ##a)
 242 
 243 /*
 244  * like scmd_printk, but the device name is passed in
 245  * as a string pointer
 246  */
 247 __printf(4, 5) void
 248 sdev_prefix_printk(const char *, const struct scsi_device *, const char *,
 249                 const char *, ...);
 250 
 251 #define sdev_printk(l, sdev, fmt, a...)                         \
 252         sdev_prefix_printk(l, sdev, NULL, fmt, ##a)
 253 
 254 __printf(3, 4) void
 255 scmd_printk(const char *, const struct scsi_cmnd *, const char *, ...);
 256 
 257 #define scmd_dbg(scmd, fmt, a...)                                          \
 258         do {                                                               \
 259                 if ((scmd)->request->rq_disk)                              \
 260                         sdev_dbg((scmd)->device, "[%s] " fmt,              \
 261                                  (scmd)->request->rq_disk->disk_name, ##a);\
 262                 else                                                       \
 263                         sdev_dbg((scmd)->device, fmt, ##a);                \
 264         } while (0)
 265 
 266 enum scsi_target_state {
 267         STARGET_CREATED = 1,
 268         STARGET_RUNNING,
 269         STARGET_REMOVE,
 270         STARGET_CREATED_REMOVE,
 271         STARGET_DEL,
 272 };
 273 
 274 /*
 275  * scsi_target: representation of a scsi target, for now, this is only
 276  * used for single_lun devices. If no one has active IO to the target,
 277  * starget_sdev_user is NULL, else it points to the active sdev.
 278  */
 279 struct scsi_target {
 280         struct scsi_device      *starget_sdev_user;
 281         struct list_head        siblings;
 282         struct list_head        devices;
 283         struct device           dev;
 284         struct kref             reap_ref; /* last put renders target invisible */
 285         unsigned int            channel;
 286         unsigned int            id; /* target id ... replace
 287                                      * scsi_device.id eventually */
 288         unsigned int            create:1; /* signal that it needs to be added */
 289         unsigned int            single_lun:1;   /* Indicates we should only
 290                                                  * allow I/O to one of the luns
 291                                                  * for the device at a time. */
 292         unsigned int            pdt_1f_for_no_lun:1;    /* PDT = 0x1f
 293                                                  * means no lun present. */
 294         unsigned int            no_report_luns:1;       /* Don't use
 295                                                  * REPORT LUNS for scanning. */
 296         unsigned int            expecting_lun_change:1; /* A device has reported
 297                                                  * a 3F/0E UA, other devices on
 298                                                  * the same target will also. */
 299         /* commands actually active on LLD. */
 300         atomic_t                target_busy;
 301         atomic_t                target_blocked;
 302 
 303         /*
 304          * LLDs should set this in the slave_alloc host template callout.
 305          * If set to zero then there is not limit.
 306          */
 307         unsigned int            can_queue;
 308         unsigned int            max_target_blocked;
 309 #define SCSI_DEFAULT_TARGET_BLOCKED     3
 310 
 311         char                    scsi_level;
 312         enum scsi_target_state  state;
 313         void                    *hostdata; /* available to low-level driver */
 314         unsigned long           starget_data[0]; /* for the transport */
 315         /* starget_data must be the last element!!!! */
 316 } __attribute__((aligned(sizeof(unsigned long))));
 317 
 318 #define to_scsi_target(d)       container_of(d, struct scsi_target, dev)
 319 static inline struct scsi_target *scsi_target(struct scsi_device *sdev)
 320 {
 321         return to_scsi_target(sdev->sdev_gendev.parent);
 322 }
 323 #define transport_class_to_starget(class_dev) \
 324         to_scsi_target(class_dev->parent)
 325 
 326 #define starget_printk(prefix, starget, fmt, a...)      \
 327         dev_printk(prefix, &(starget)->dev, fmt, ##a)
 328 
 329 extern struct scsi_device *__scsi_add_device(struct Scsi_Host *,
 330                 uint, uint, u64, void *hostdata);
 331 extern int scsi_add_device(struct Scsi_Host *host, uint channel,
 332                            uint target, u64 lun);
 333 extern int scsi_register_device_handler(struct scsi_device_handler *scsi_dh);
 334 extern void scsi_remove_device(struct scsi_device *);
 335 extern int scsi_unregister_device_handler(struct scsi_device_handler *scsi_dh);
 336 void scsi_attach_vpd(struct scsi_device *sdev);
 337 
 338 extern struct scsi_device *scsi_device_from_queue(struct request_queue *q);
 339 extern int __must_check scsi_device_get(struct scsi_device *);
 340 extern void scsi_device_put(struct scsi_device *);
 341 extern struct scsi_device *scsi_device_lookup(struct Scsi_Host *,
 342                                               uint, uint, u64);
 343 extern struct scsi_device *__scsi_device_lookup(struct Scsi_Host *,
 344                                                 uint, uint, u64);
 345 extern struct scsi_device *scsi_device_lookup_by_target(struct scsi_target *,
 346                                                         u64);
 347 extern struct scsi_device *__scsi_device_lookup_by_target(struct scsi_target *,
 348                                                           u64);
 349 extern void starget_for_each_device(struct scsi_target *, void *,
 350                      void (*fn)(struct scsi_device *, void *));
 351 extern void __starget_for_each_device(struct scsi_target *, void *,
 352                                       void (*fn)(struct scsi_device *,
 353                                                  void *));
 354 
 355 /* only exposed to implement shost_for_each_device */
 356 extern struct scsi_device *__scsi_iterate_devices(struct Scsi_Host *,
 357                                                   struct scsi_device *);
 358 
 359 /**
 360  * shost_for_each_device - iterate over all devices of a host
 361  * @sdev: the &struct scsi_device to use as a cursor
 362  * @shost: the &struct scsi_host to iterate over
 363  *
 364  * Iterator that returns each device attached to @shost.  This loop
 365  * takes a reference on each device and releases it at the end.  If
 366  * you break out of the loop, you must call scsi_device_put(sdev).
 367  */
 368 #define shost_for_each_device(sdev, shost) \
 369         for ((sdev) = __scsi_iterate_devices((shost), NULL); \
 370              (sdev); \
 371              (sdev) = __scsi_iterate_devices((shost), (sdev)))
 372 
 373 /**
 374  * __shost_for_each_device - iterate over all devices of a host (UNLOCKED)
 375  * @sdev: the &struct scsi_device to use as a cursor
 376  * @shost: the &struct scsi_host to iterate over
 377  *
 378  * Iterator that returns each device attached to @shost.  It does _not_
 379  * take a reference on the scsi_device, so the whole loop must be
 380  * protected by shost->host_lock.
 381  *
 382  * Note: The only reason to use this is because you need to access the
 383  * device list in interrupt context.  Otherwise you really want to use
 384  * shost_for_each_device instead.
 385  */
 386 #define __shost_for_each_device(sdev, shost) \
 387         list_for_each_entry((sdev), &((shost)->__devices), siblings)
 388 
 389 extern int scsi_change_queue_depth(struct scsi_device *, int);
 390 extern int scsi_track_queue_full(struct scsi_device *, int);
 391 
 392 extern int scsi_set_medium_removal(struct scsi_device *, char);
 393 
 394 extern int scsi_mode_sense(struct scsi_device *sdev, int dbd, int modepage,
 395                            unsigned char *buffer, int len, int timeout,
 396                            int retries, struct scsi_mode_data *data,
 397                            struct scsi_sense_hdr *);
 398 extern int scsi_mode_select(struct scsi_device *sdev, int pf, int sp,
 399                             int modepage, unsigned char *buffer, int len,
 400                             int timeout, int retries,
 401                             struct scsi_mode_data *data,
 402                             struct scsi_sense_hdr *);
 403 extern int scsi_test_unit_ready(struct scsi_device *sdev, int timeout,
 404                                 int retries, struct scsi_sense_hdr *sshdr);
 405 extern int scsi_get_vpd_page(struct scsi_device *, u8 page, unsigned char *buf,
 406                              int buf_len);
 407 extern int scsi_report_opcode(struct scsi_device *sdev, unsigned char *buffer,
 408                               unsigned int len, unsigned char opcode);
 409 extern int scsi_device_set_state(struct scsi_device *sdev,
 410                                  enum scsi_device_state state);
 411 extern struct scsi_event *sdev_evt_alloc(enum scsi_device_event evt_type,
 412                                           gfp_t gfpflags);
 413 extern void sdev_evt_send(struct scsi_device *sdev, struct scsi_event *evt);
 414 extern void sdev_evt_send_simple(struct scsi_device *sdev,
 415                           enum scsi_device_event evt_type, gfp_t gfpflags);
 416 extern int scsi_device_quiesce(struct scsi_device *sdev);
 417 extern void scsi_device_resume(struct scsi_device *sdev);
 418 extern void scsi_target_quiesce(struct scsi_target *);
 419 extern void scsi_target_resume(struct scsi_target *);
 420 extern void scsi_scan_target(struct device *parent, unsigned int channel,
 421                              unsigned int id, u64 lun,
 422                              enum scsi_scan_mode rescan);
 423 extern void scsi_target_reap(struct scsi_target *);
 424 extern void scsi_target_block(struct device *);
 425 extern void scsi_target_unblock(struct device *, enum scsi_device_state);
 426 extern void scsi_remove_target(struct device *);
 427 extern const char *scsi_device_state_name(enum scsi_device_state);
 428 extern int scsi_is_sdev_device(const struct device *);
 429 extern int scsi_is_target_device(const struct device *);
 430 extern void scsi_sanitize_inquiry_string(unsigned char *s, int len);
 431 extern int __scsi_execute(struct scsi_device *sdev, const unsigned char *cmd,
 432                         int data_direction, void *buffer, unsigned bufflen,
 433                         unsigned char *sense, struct scsi_sense_hdr *sshdr,
 434                         int timeout, int retries, u64 flags,
 435                         req_flags_t rq_flags, int *resid);
 436 /* Make sure any sense buffer is the correct size. */
 437 #define scsi_execute(sdev, cmd, data_direction, buffer, bufflen, sense, \
 438                      sshdr, timeout, retries, flags, rq_flags, resid)   \
 439 ({                                                                      \
 440         BUILD_BUG_ON((sense) != NULL &&                                 \
 441                      sizeof(sense) != SCSI_SENSE_BUFFERSIZE);           \
 442         __scsi_execute(sdev, cmd, data_direction, buffer, bufflen,      \
 443                        sense, sshdr, timeout, retries, flags, rq_flags, \
 444                        resid);                                          \
 445 })
 446 static inline int scsi_execute_req(struct scsi_device *sdev,
 447         const unsigned char *cmd, int data_direction, void *buffer,
 448         unsigned bufflen, struct scsi_sense_hdr *sshdr, int timeout,
 449         int retries, int *resid)
 450 {
 451         return scsi_execute(sdev, cmd, data_direction, buffer,
 452                 bufflen, NULL, sshdr, timeout, retries,  0, 0, resid);
 453 }
 454 extern void sdev_disable_disk_events(struct scsi_device *sdev);
 455 extern void sdev_enable_disk_events(struct scsi_device *sdev);
 456 extern int scsi_vpd_lun_id(struct scsi_device *, char *, size_t);
 457 extern int scsi_vpd_tpg_id(struct scsi_device *, int *);
 458 
 459 #ifdef CONFIG_PM
 460 extern int scsi_autopm_get_device(struct scsi_device *);
 461 extern void scsi_autopm_put_device(struct scsi_device *);
 462 #else
 463 static inline int scsi_autopm_get_device(struct scsi_device *d) { return 0; }
 464 static inline void scsi_autopm_put_device(struct scsi_device *d) {}
 465 #endif /* CONFIG_PM */
 466 
 467 static inline int __must_check scsi_device_reprobe(struct scsi_device *sdev)
 468 {
 469         return device_reprobe(&sdev->sdev_gendev);
 470 }
 471 
 472 static inline unsigned int sdev_channel(struct scsi_device *sdev)
 473 {
 474         return sdev->channel;
 475 }
 476 
 477 static inline unsigned int sdev_id(struct scsi_device *sdev)
 478 {
 479         return sdev->id;
 480 }
 481 
 482 #define scmd_id(scmd) sdev_id((scmd)->device)
 483 #define scmd_channel(scmd) sdev_channel((scmd)->device)
 484 
 485 /*
 486  * checks for positions of the SCSI state machine
 487  */
 488 static inline int scsi_device_online(struct scsi_device *sdev)
 489 {
 490         return (sdev->sdev_state != SDEV_OFFLINE &&
 491                 sdev->sdev_state != SDEV_TRANSPORT_OFFLINE &&
 492                 sdev->sdev_state != SDEV_DEL);
 493 }
 494 static inline int scsi_device_blocked(struct scsi_device *sdev)
 495 {
 496         return sdev->sdev_state == SDEV_BLOCK ||
 497                 sdev->sdev_state == SDEV_CREATED_BLOCK;
 498 }
 499 static inline int scsi_device_created(struct scsi_device *sdev)
 500 {
 501         return sdev->sdev_state == SDEV_CREATED ||
 502                 sdev->sdev_state == SDEV_CREATED_BLOCK;
 503 }
 504 
 505 int scsi_internal_device_block_nowait(struct scsi_device *sdev);
 506 int scsi_internal_device_unblock_nowait(struct scsi_device *sdev,
 507                                         enum scsi_device_state new_state);
 508 
 509 /* accessor functions for the SCSI parameters */
 510 static inline int scsi_device_sync(struct scsi_device *sdev)
 511 {
 512         return sdev->sdtr;
 513 }
 514 static inline int scsi_device_wide(struct scsi_device *sdev)
 515 {
 516         return sdev->wdtr;
 517 }
 518 static inline int scsi_device_dt(struct scsi_device *sdev)
 519 {
 520         return sdev->ppr;
 521 }
 522 static inline int scsi_device_dt_only(struct scsi_device *sdev)
 523 {
 524         if (sdev->inquiry_len < 57)
 525                 return 0;
 526         return (sdev->inquiry[56] & 0x0c) == 0x04;
 527 }
 528 static inline int scsi_device_ius(struct scsi_device *sdev)
 529 {
 530         if (sdev->inquiry_len < 57)
 531                 return 0;
 532         return sdev->inquiry[56] & 0x01;
 533 }
 534 static inline int scsi_device_qas(struct scsi_device *sdev)
 535 {
 536         if (sdev->inquiry_len < 57)
 537                 return 0;
 538         return sdev->inquiry[56] & 0x02;
 539 }
 540 static inline int scsi_device_enclosure(struct scsi_device *sdev)
 541 {
 542         return sdev->inquiry ? (sdev->inquiry[6] & (1<<6)) : 1;
 543 }
 544 
 545 static inline int scsi_device_protection(struct scsi_device *sdev)
 546 {
 547         if (sdev->no_dif)
 548                 return 0;
 549 
 550         return sdev->scsi_level > SCSI_2 && sdev->inquiry[5] & (1<<0);
 551 }
 552 
 553 static inline int scsi_device_tpgs(struct scsi_device *sdev)
 554 {
 555         return sdev->inquiry ? (sdev->inquiry[5] >> 4) & 0x3 : 0;
 556 }
 557 
 558 /**
 559  * scsi_device_supports_vpd - test if a device supports VPD pages
 560  * @sdev: the &struct scsi_device to test
 561  *
 562  * If the 'try_vpd_pages' flag is set it takes precedence.
 563  * Otherwise we will assume VPD pages are supported if the
 564  * SCSI level is at least SPC-3 and 'skip_vpd_pages' is not set.
 565  */
 566 static inline int scsi_device_supports_vpd(struct scsi_device *sdev)
 567 {
 568         /* Attempt VPD inquiry if the device blacklist explicitly calls
 569          * for it.
 570          */
 571         if (sdev->try_vpd_pages)
 572                 return 1;
 573         /*
 574          * Although VPD inquiries can go to SCSI-2 type devices,
 575          * some USB ones crash on receiving them, and the pages
 576          * we currently ask for are mandatory for SPC-2 and beyond
 577          */
 578         if (sdev->scsi_level >= SCSI_SPC_2 && !sdev->skip_vpd_pages)
 579                 return 1;
 580         return 0;
 581 }
 582 
 583 #define MODULE_ALIAS_SCSI_DEVICE(type) \
 584         MODULE_ALIAS("scsi:t-" __stringify(type) "*")
 585 #define SCSI_DEVICE_MODALIAS_FMT "scsi:t-0x%02x"
 586 
 587 #endif /* _SCSI_SCSI_DEVICE_H */

/* [<][>][^][v][top][bottom][index][help] */