#ifndef _SCSI_SCSI_DEVICE_H
#define _SCSI_SCSI_DEVICE_H
#include <linux/list.h>
#include <linux/spinlock.h>
#include <linux/workqueue.h>
#include <linux/blk-mq.h>
#include <scsi/scsi.h>
#include <linux/atomic.h>
#include <linux/sbitmap.h>
struct bsg_device;
struct device;
struct request_queue;
struct scsi_cmnd;
struct scsi_lun;
struct scsi_sense_hdr;
blist_flags_t;
#define SCSI_SENSE_BUFFERSIZE …
struct scsi_mode_data { … };
enum scsi_device_state { … };
enum scsi_scan_mode { … };
enum scsi_device_event { … };
struct scsi_event { … };
struct scsi_vpd { … };
struct scsi_device { … } __attribute__((aligned …));
#define to_scsi_device(d) …
#define class_to_sdev(d) …
#define transport_class_to_sdev(class_dev) …
#define sdev_dbg(sdev, fmt, a...) …
__printf(4, 5) void
sdev_prefix_printk(const char *, const struct scsi_device *, const char *,
const char *, ...);
#define sdev_printk(l, sdev, fmt, a...) …
__printf(3, 4) void
scmd_printk(const char *, const struct scsi_cmnd *, const char *, ...);
#define scmd_dbg(scmd, fmt, a...) …
enum scsi_target_state { … };
struct scsi_target { … } __attribute__((aligned …));
#define to_scsi_target(d) …
static inline struct scsi_target *scsi_target(struct scsi_device *sdev)
{ … }
#define transport_class_to_starget(class_dev) …
#define starget_printk(prefix, starget, fmt, a...) …
extern struct scsi_device *__scsi_add_device(struct Scsi_Host *,
uint, uint, u64, void *hostdata);
extern int scsi_add_device(struct Scsi_Host *host, uint channel,
uint target, u64 lun);
extern int scsi_register_device_handler(struct scsi_device_handler *scsi_dh);
extern void scsi_remove_device(struct scsi_device *);
extern int scsi_unregister_device_handler(struct scsi_device_handler *scsi_dh);
void scsi_attach_vpd(struct scsi_device *sdev);
void scsi_cdl_check(struct scsi_device *sdev);
int scsi_cdl_enable(struct scsi_device *sdev, bool enable);
extern struct scsi_device *scsi_device_from_queue(struct request_queue *q);
extern int __must_check scsi_device_get(struct scsi_device *);
extern void scsi_device_put(struct scsi_device *);
extern struct scsi_device *scsi_device_lookup(struct Scsi_Host *,
uint, uint, u64);
extern struct scsi_device *__scsi_device_lookup(struct Scsi_Host *,
uint, uint, u64);
extern struct scsi_device *scsi_device_lookup_by_target(struct scsi_target *,
u64);
extern struct scsi_device *__scsi_device_lookup_by_target(struct scsi_target *,
u64);
extern void starget_for_each_device(struct scsi_target *, void *,
void (*fn)(struct scsi_device *, void *));
extern void __starget_for_each_device(struct scsi_target *, void *,
void (*fn)(struct scsi_device *,
void *));
extern struct scsi_device *__scsi_iterate_devices(struct Scsi_Host *,
struct scsi_device *);
#define shost_for_each_device(sdev, shost) …
#define __shost_for_each_device(sdev, shost) …
extern int scsi_change_queue_depth(struct scsi_device *, int);
extern int scsi_track_queue_full(struct scsi_device *, int);
extern int scsi_set_medium_removal(struct scsi_device *, char);
int scsi_mode_sense(struct scsi_device *sdev, int dbd, int modepage,
int subpage, unsigned char *buffer, int len, int timeout,
int retries, struct scsi_mode_data *data,
struct scsi_sense_hdr *);
extern int scsi_mode_select(struct scsi_device *sdev, int pf, int sp,
unsigned char *buffer, int len, int timeout,
int retries, struct scsi_mode_data *data,
struct scsi_sense_hdr *);
extern int scsi_test_unit_ready(struct scsi_device *sdev, int timeout,
int retries, struct scsi_sense_hdr *sshdr);
extern int scsi_get_vpd_page(struct scsi_device *, u8 page, unsigned char *buf,
int buf_len);
int scsi_report_opcode(struct scsi_device *sdev, unsigned char *buffer,
unsigned int len, unsigned char opcode,
unsigned short sa);
extern int scsi_device_set_state(struct scsi_device *sdev,
enum scsi_device_state state);
extern struct scsi_event *sdev_evt_alloc(enum scsi_device_event evt_type,
gfp_t gfpflags);
extern void sdev_evt_send(struct scsi_device *sdev, struct scsi_event *evt);
extern void sdev_evt_send_simple(struct scsi_device *sdev,
enum scsi_device_event evt_type, gfp_t gfpflags);
extern int scsi_device_quiesce(struct scsi_device *sdev);
extern void scsi_device_resume(struct scsi_device *sdev);
extern void scsi_target_quiesce(struct scsi_target *);
extern void scsi_target_resume(struct scsi_target *);
extern void scsi_scan_target(struct device *parent, unsigned int channel,
unsigned int id, u64 lun,
enum scsi_scan_mode rescan);
extern void scsi_target_reap(struct scsi_target *);
void scsi_block_targets(struct Scsi_Host *shost, struct device *dev);
extern void scsi_target_unblock(struct device *, enum scsi_device_state);
extern void scsi_remove_target(struct device *);
extern const char *scsi_device_state_name(enum scsi_device_state);
extern int scsi_is_sdev_device(const struct device *);
extern int scsi_is_target_device(const struct device *);
extern void scsi_sanitize_inquiry_string(unsigned char *s, int len);
#define SCMD_FAILURE_RESULT_ANY …
#define SCMD_FAILURE_STAT_ANY …
#define SCMD_FAILURE_SENSE_ANY …
#define SCMD_FAILURE_ASC_ANY …
#define SCMD_FAILURE_ASCQ_ANY …
#define SCMD_FAILURE_NO_LIMIT …
struct scsi_failure { … };
struct scsi_failures { … };
struct scsi_exec_args { … };
int scsi_execute_cmd(struct scsi_device *sdev, const unsigned char *cmd,
blk_opf_t opf, void *buffer, unsigned int bufflen,
int timeout, int retries,
const struct scsi_exec_args *args);
void scsi_failures_reset_retries(struct scsi_failures *failures);
extern void sdev_disable_disk_events(struct scsi_device *sdev);
extern void sdev_enable_disk_events(struct scsi_device *sdev);
extern int scsi_vpd_lun_id(struct scsi_device *, char *, size_t);
extern int scsi_vpd_tpg_id(struct scsi_device *, int *);
#ifdef CONFIG_PM
extern int scsi_autopm_get_device(struct scsi_device *);
extern void scsi_autopm_put_device(struct scsi_device *);
#else
static inline int scsi_autopm_get_device(struct scsi_device *d) { return 0; }
static inline void scsi_autopm_put_device(struct scsi_device *d) {}
#endif
static inline int __must_check scsi_device_reprobe(struct scsi_device *sdev)
{ … }
static inline unsigned int sdev_channel(struct scsi_device *sdev)
{ … }
static inline unsigned int sdev_id(struct scsi_device *sdev)
{ … }
#define scmd_id(scmd) …
#define scmd_channel(scmd) …
static inline int scsi_device_online(struct scsi_device *sdev)
{ … }
static inline int scsi_device_blocked(struct scsi_device *sdev)
{ … }
static inline int scsi_device_created(struct scsi_device *sdev)
{ … }
int scsi_internal_device_block_nowait(struct scsi_device *sdev);
int scsi_internal_device_unblock_nowait(struct scsi_device *sdev,
enum scsi_device_state new_state);
static inline int scsi_device_sync(struct scsi_device *sdev)
{ … }
static inline int scsi_device_wide(struct scsi_device *sdev)
{ … }
static inline int scsi_device_dt(struct scsi_device *sdev)
{ … }
static inline int scsi_device_dt_only(struct scsi_device *sdev)
{ … }
static inline int scsi_device_ius(struct scsi_device *sdev)
{ … }
static inline int scsi_device_qas(struct scsi_device *sdev)
{ … }
static inline int scsi_device_enclosure(struct scsi_device *sdev)
{ … }
static inline int scsi_device_protection(struct scsi_device *sdev)
{ … }
static inline int scsi_device_tpgs(struct scsi_device *sdev)
{ … }
static inline int scsi_device_supports_vpd(struct scsi_device *sdev)
{ … }
static inline int scsi_device_busy(struct scsi_device *sdev)
{ … }
#define MODULE_ALIAS_SCSI_DEVICE(type) …
#define SCSI_DEVICE_MODALIAS_FMT …
#endif