0001
0002 #ifndef _SCSI_PRIV_H
0003 #define _SCSI_PRIV_H
0004
0005 #include <linux/device.h>
0006 #include <scsi/scsi_device.h>
0007 #include <linux/sbitmap.h>
0008
0009 struct bsg_device;
0010 struct request_queue;
0011 struct request;
0012 struct scsi_cmnd;
0013 struct scsi_device;
0014 struct scsi_target;
0015 struct scsi_host_template;
0016 struct Scsi_Host;
0017 struct scsi_nl_hdr;
0018
0019 #define SCSI_CMD_RETRIES_NO_LIMIT -1
0020
0021
0022
0023
0024 #define SCSI_EH_ABORT_SCHEDULED 0x0002
0025
0026 #define SCSI_SENSE_VALID(scmd) \
0027 (((scmd)->sense_buffer[0] & 0x70) == 0x70)
0028
0029
0030 extern int scsi_init_hosts(void);
0031 extern void scsi_exit_hosts(void);
0032
0033
0034 int scsi_init_sense_cache(struct Scsi_Host *shost);
0035 void scsi_init_command(struct scsi_device *dev, struct scsi_cmnd *cmd);
0036 #ifdef CONFIG_SCSI_LOGGING
0037 void scsi_log_send(struct scsi_cmnd *cmd);
0038 void scsi_log_completion(struct scsi_cmnd *cmd, int disposition);
0039 #else
0040 static inline void scsi_log_send(struct scsi_cmnd *cmd)
0041 { };
0042 static inline void scsi_log_completion(struct scsi_cmnd *cmd, int disposition)
0043 { };
0044 #endif
0045
0046
0047
0048
0049 enum scsi_devinfo_key {
0050 SCSI_DEVINFO_GLOBAL = 0,
0051 SCSI_DEVINFO_SPI,
0052 };
0053
0054 extern blist_flags_t scsi_get_device_flags(struct scsi_device *sdev,
0055 const unsigned char *vendor,
0056 const unsigned char *model);
0057 extern blist_flags_t scsi_get_device_flags_keyed(struct scsi_device *sdev,
0058 const unsigned char *vendor,
0059 const unsigned char *model,
0060 enum scsi_devinfo_key key);
0061 extern int scsi_dev_info_list_add_keyed(int compatible, char *vendor,
0062 char *model, char *strflags,
0063 blist_flags_t flags,
0064 enum scsi_devinfo_key key);
0065 extern int scsi_dev_info_list_del_keyed(char *vendor, char *model,
0066 enum scsi_devinfo_key key);
0067 extern int scsi_dev_info_add_list(enum scsi_devinfo_key key, const char *name);
0068 extern int scsi_dev_info_remove_list(enum scsi_devinfo_key key);
0069
0070 extern int __init scsi_init_devinfo(void);
0071 extern void scsi_exit_devinfo(void);
0072
0073
0074 extern void scmd_eh_abort_handler(struct work_struct *work);
0075 extern enum blk_eh_timer_return scsi_timeout(struct request *req);
0076 extern int scsi_error_handler(void *host);
0077 extern enum scsi_disposition scsi_decide_disposition(struct scsi_cmnd *cmd);
0078 extern void scsi_eh_wakeup(struct Scsi_Host *shost);
0079 extern void scsi_eh_scmd_add(struct scsi_cmnd *);
0080 void scsi_eh_ready_devs(struct Scsi_Host *shost,
0081 struct list_head *work_q,
0082 struct list_head *done_q);
0083 int scsi_eh_get_sense(struct list_head *work_q,
0084 struct list_head *done_q);
0085 bool scsi_noretry_cmd(struct scsi_cmnd *scmd);
0086 void scsi_eh_done(struct scsi_cmnd *scmd);
0087
0088
0089 extern int scsi_maybe_unblock_host(struct scsi_device *sdev);
0090 extern void scsi_device_unbusy(struct scsi_device *sdev, struct scsi_cmnd *cmd);
0091 extern void scsi_queue_insert(struct scsi_cmnd *cmd, int reason);
0092 extern void scsi_io_completion(struct scsi_cmnd *, unsigned int);
0093 extern void scsi_run_host_queues(struct Scsi_Host *shost);
0094 extern void scsi_requeue_run_queue(struct work_struct *work);
0095 extern void scsi_start_queue(struct scsi_device *sdev);
0096 extern int scsi_mq_setup_tags(struct Scsi_Host *shost);
0097 extern void scsi_mq_free_tags(struct kref *kref);
0098 extern void scsi_exit_queue(void);
0099 extern void scsi_evt_thread(struct work_struct *work);
0100
0101
0102 #ifdef CONFIG_SCSI_PROC_FS
0103 extern void scsi_proc_hostdir_add(struct scsi_host_template *);
0104 extern void scsi_proc_hostdir_rm(struct scsi_host_template *);
0105 extern void scsi_proc_host_add(struct Scsi_Host *);
0106 extern void scsi_proc_host_rm(struct Scsi_Host *);
0107 extern int scsi_init_procfs(void);
0108 extern void scsi_exit_procfs(void);
0109 #else
0110 # define scsi_proc_hostdir_add(sht) do { } while (0)
0111 # define scsi_proc_hostdir_rm(sht) do { } while (0)
0112 # define scsi_proc_host_add(shost) do { } while (0)
0113 # define scsi_proc_host_rm(shost) do { } while (0)
0114 # define scsi_init_procfs() (0)
0115 # define scsi_exit_procfs() do { } while (0)
0116 #endif
0117
0118
0119 void scsi_enable_async_suspend(struct device *dev);
0120 extern int scsi_complete_async_scans(void);
0121 extern int scsi_scan_host_selected(struct Scsi_Host *, unsigned int,
0122 unsigned int, u64, enum scsi_scan_mode);
0123 extern void scsi_forget_host(struct Scsi_Host *);
0124 extern void scsi_rescan_device(struct device *);
0125
0126
0127 #ifdef CONFIG_SYSCTL
0128 extern int scsi_init_sysctl(void);
0129 extern void scsi_exit_sysctl(void);
0130 #else
0131 # define scsi_init_sysctl() (0)
0132 # define scsi_exit_sysctl() do { } while (0)
0133 #endif
0134
0135
0136 extern int scsi_sysfs_add_sdev(struct scsi_device *);
0137 extern int scsi_sysfs_add_host(struct Scsi_Host *);
0138 extern int scsi_sysfs_register(void);
0139 extern void scsi_sysfs_unregister(void);
0140 extern void scsi_sysfs_device_initialize(struct scsi_device *);
0141 extern int scsi_sysfs_target_initialize(struct scsi_device *);
0142 extern struct scsi_transport_template blank_transport_template;
0143 extern void __scsi_remove_device(struct scsi_device *);
0144
0145 extern struct bus_type scsi_bus_type;
0146 extern const struct attribute_group *scsi_shost_groups[];
0147
0148
0149 #ifdef CONFIG_SCSI_NETLINK
0150 extern void scsi_netlink_init(void);
0151 extern void scsi_netlink_exit(void);
0152 extern struct sock *scsi_nl_sock;
0153 #else
0154 static inline void scsi_netlink_init(void) {}
0155 static inline void scsi_netlink_exit(void) {}
0156 #endif
0157
0158
0159 #ifdef CONFIG_PM
0160 extern const struct dev_pm_ops scsi_bus_pm_ops;
0161
0162 extern void scsi_autopm_get_target(struct scsi_target *);
0163 extern void scsi_autopm_put_target(struct scsi_target *);
0164 extern int scsi_autopm_get_host(struct Scsi_Host *);
0165 extern void scsi_autopm_put_host(struct Scsi_Host *);
0166 #else
0167 static inline void scsi_autopm_get_target(struct scsi_target *t) {}
0168 static inline void scsi_autopm_put_target(struct scsi_target *t) {}
0169 static inline int scsi_autopm_get_host(struct Scsi_Host *h) { return 0; }
0170 static inline void scsi_autopm_put_host(struct Scsi_Host *h) {}
0171 #endif
0172
0173
0174 #ifdef CONFIG_SCSI_DH
0175 void scsi_dh_add_device(struct scsi_device *sdev);
0176 void scsi_dh_release_device(struct scsi_device *sdev);
0177 #else
0178 static inline void scsi_dh_add_device(struct scsi_device *sdev) { }
0179 static inline void scsi_dh_release_device(struct scsi_device *sdev) { }
0180 #endif
0181
0182 struct bsg_device *scsi_bsg_register_queue(struct scsi_device *sdev);
0183
0184 extern int scsi_device_max_queue_depth(struct scsi_device *sdev);
0185
0186
0187
0188
0189
0190
0191 #define SCSI_DEVICE_BLOCK_MAX_TIMEOUT 600
0192
0193 #endif