#ifndef _SCSI_SCSI_HOST_H
#define _SCSI_SCSI_HOST_H
#include <linux/device.h>
#include <linux/list.h>
#include <linux/types.h>
#include <linux/workqueue.h>
#include <linux/mutex.h>
#include <linux/seq_file.h>
#include <linux/blk-mq.h>
#include <scsi/scsi.h>
struct block_device;
struct completion;
struct module;
struct scsi_cmnd;
struct scsi_device;
struct scsi_target;
struct Scsi_Host;
struct scsi_transport_template;
#define SG_ALL …
#define MODE_UNKNOWN …
#define MODE_INITIATOR …
#define MODE_TARGET …
enum scsi_timeout_action { … };
struct scsi_host_template { … };
#define DEF_SCSI_QCMD(func_name) …
enum scsi_host_state { … };
struct Scsi_Host { … };
#define class_to_shost(d) …
#define shost_printk(prefix, shost, fmt, a...) …
static inline void *shost_priv(struct Scsi_Host *shost)
{ … }
int scsi_is_host_device(const struct device *);
static inline struct Scsi_Host *dev_to_shost(struct device *dev)
{ … }
static inline int scsi_host_in_recovery(struct Scsi_Host *shost)
{ … }
extern int scsi_queue_work(struct Scsi_Host *, struct work_struct *);
extern void scsi_flush_work(struct Scsi_Host *);
extern struct Scsi_Host *scsi_host_alloc(const struct scsi_host_template *, int);
extern int __must_check scsi_add_host_with_dma(struct Scsi_Host *,
struct device *,
struct device *);
#if defined(CONFIG_SCSI_PROC_FS)
struct proc_dir_entry *
scsi_template_proc_dir(const struct scsi_host_template *sht);
#else
#define scsi_template_proc_dir …
#endif
extern void scsi_scan_host(struct Scsi_Host *);
extern int scsi_resume_device(struct scsi_device *sdev);
extern int scsi_rescan_device(struct scsi_device *sdev);
extern void scsi_remove_host(struct Scsi_Host *);
extern struct Scsi_Host *scsi_host_get(struct Scsi_Host *);
extern int scsi_host_busy(struct Scsi_Host *shost);
extern void scsi_host_put(struct Scsi_Host *t);
extern struct Scsi_Host *scsi_host_lookup(unsigned int hostnum);
extern const char *scsi_host_state_name(enum scsi_host_state);
extern void scsi_host_complete_all_commands(struct Scsi_Host *shost,
enum scsi_host_status status);
static inline int __must_check scsi_add_host(struct Scsi_Host *host,
struct device *dev)
{ … }
static inline struct device *scsi_get_device(struct Scsi_Host *shost)
{ … }
static inline int scsi_host_scan_allowed(struct Scsi_Host *shost)
{ … }
extern void scsi_unblock_requests(struct Scsi_Host *);
extern void scsi_block_requests(struct Scsi_Host *);
extern int scsi_host_block(struct Scsi_Host *shost);
extern int scsi_host_unblock(struct Scsi_Host *shost, int new_state);
void scsi_host_busy_iter(struct Scsi_Host *,
bool (*fn)(struct scsi_cmnd *, void *), void *priv);
struct class_container;
enum scsi_host_prot_capabilities { … };
static inline void scsi_host_set_prot(struct Scsi_Host *shost, unsigned int mask)
{ … }
static inline unsigned int scsi_host_get_prot(struct Scsi_Host *shost)
{ … }
static inline int scsi_host_prot_dma(struct Scsi_Host *shost)
{ … }
static inline unsigned int scsi_host_dif_capable(struct Scsi_Host *shost, unsigned int target_type)
{ … }
static inline unsigned int scsi_host_dix_capable(struct Scsi_Host *shost, unsigned int target_type)
{ … }
enum scsi_host_guard_type { … };
static inline void scsi_host_set_guard(struct Scsi_Host *shost, unsigned char type)
{ … }
static inline unsigned char scsi_host_get_guard(struct Scsi_Host *shost)
{ … }
extern int scsi_host_set_state(struct Scsi_Host *, enum scsi_host_state);
#endif