Line data Source code
1 : /* SPDX-License-Identifier: GPL-2.0 */ 2 : #ifndef _SCSI_PRIV_H 3 : #define _SCSI_PRIV_H 4 : 5 : #include <linux/device.h> 6 : #include <linux/async.h> 7 : #include <scsi/scsi_device.h> 8 : 9 : struct request_queue; 10 : struct request; 11 : struct scsi_cmnd; 12 : struct scsi_device; 13 : struct scsi_target; 14 : struct scsi_host_template; 15 : struct Scsi_Host; 16 : struct scsi_nl_hdr; 17 : 18 : #define SCSI_CMD_RETRIES_NO_LIMIT -1 19 : 20 : /* 21 : * Scsi Error Handler Flags 22 : */ 23 : #define SCSI_EH_ABORT_SCHEDULED 0x0002 /* Abort has been scheduled */ 24 : 25 : #define SCSI_SENSE_VALID(scmd) \ 26 : (((scmd)->sense_buffer[0] & 0x70) == 0x70) 27 : 28 : /* hosts.c */ 29 : extern int scsi_init_hosts(void); 30 : extern void scsi_exit_hosts(void); 31 : 32 : /* scsi.c */ 33 : int scsi_init_sense_cache(struct Scsi_Host *shost); 34 : void scsi_init_command(struct scsi_device *dev, struct scsi_cmnd *cmd); 35 : #ifdef CONFIG_SCSI_LOGGING 36 : void scsi_log_send(struct scsi_cmnd *cmd); 37 : void scsi_log_completion(struct scsi_cmnd *cmd, int disposition); 38 : #else 39 0 : static inline void scsi_log_send(struct scsi_cmnd *cmd) 40 0 : { }; 41 0 : static inline void scsi_log_completion(struct scsi_cmnd *cmd, int disposition) 42 0 : { }; 43 : #endif 44 : 45 : /* scsi_devinfo.c */ 46 : 47 : /* list of keys for the lists */ 48 : enum scsi_devinfo_key { 49 : SCSI_DEVINFO_GLOBAL = 0, 50 : SCSI_DEVINFO_SPI, 51 : }; 52 : 53 : extern blist_flags_t scsi_get_device_flags(struct scsi_device *sdev, 54 : const unsigned char *vendor, 55 : const unsigned char *model); 56 : extern blist_flags_t scsi_get_device_flags_keyed(struct scsi_device *sdev, 57 : const unsigned char *vendor, 58 : const unsigned char *model, 59 : enum scsi_devinfo_key key); 60 : extern int scsi_dev_info_list_add_keyed(int compatible, char *vendor, 61 : char *model, char *strflags, 62 : blist_flags_t flags, 63 : enum scsi_devinfo_key key); 64 : extern int scsi_dev_info_list_del_keyed(char *vendor, char *model, 65 : enum scsi_devinfo_key key); 66 : extern int scsi_dev_info_add_list(enum scsi_devinfo_key key, const char *name); 67 : extern int scsi_dev_info_remove_list(enum scsi_devinfo_key key); 68 : 69 : extern int __init scsi_init_devinfo(void); 70 : extern void scsi_exit_devinfo(void); 71 : 72 : /* scsi_error.c */ 73 : extern void scmd_eh_abort_handler(struct work_struct *work); 74 : extern enum blk_eh_timer_return scsi_times_out(struct request *req); 75 : extern int scsi_error_handler(void *host); 76 : extern int scsi_decide_disposition(struct scsi_cmnd *cmd); 77 : extern void scsi_eh_wakeup(struct Scsi_Host *shost); 78 : extern void scsi_eh_scmd_add(struct scsi_cmnd *); 79 : void scsi_eh_ready_devs(struct Scsi_Host *shost, 80 : struct list_head *work_q, 81 : struct list_head *done_q); 82 : int scsi_eh_get_sense(struct list_head *work_q, 83 : struct list_head *done_q); 84 : int scsi_noretry_cmd(struct scsi_cmnd *scmd); 85 : 86 : /* scsi_lib.c */ 87 : extern int scsi_maybe_unblock_host(struct scsi_device *sdev); 88 : extern void scsi_device_unbusy(struct scsi_device *sdev, struct scsi_cmnd *cmd); 89 : extern void scsi_queue_insert(struct scsi_cmnd *cmd, int reason); 90 : extern void scsi_io_completion(struct scsi_cmnd *, unsigned int); 91 : extern void scsi_run_host_queues(struct Scsi_Host *shost); 92 : extern void scsi_requeue_run_queue(struct work_struct *work); 93 : extern struct request_queue *scsi_mq_alloc_queue(struct scsi_device *sdev); 94 : extern void scsi_start_queue(struct scsi_device *sdev); 95 : extern int scsi_mq_setup_tags(struct Scsi_Host *shost); 96 : extern void scsi_mq_destroy_tags(struct Scsi_Host *shost); 97 : extern void scsi_exit_queue(void); 98 : extern void scsi_evt_thread(struct work_struct *work); 99 : struct request_queue; 100 : struct request; 101 : 102 : /* scsi_proc.c */ 103 : #ifdef CONFIG_SCSI_PROC_FS 104 : extern void scsi_proc_hostdir_add(struct scsi_host_template *); 105 : extern void scsi_proc_hostdir_rm(struct scsi_host_template *); 106 : extern void scsi_proc_host_add(struct Scsi_Host *); 107 : extern void scsi_proc_host_rm(struct Scsi_Host *); 108 : extern int scsi_init_procfs(void); 109 : extern void scsi_exit_procfs(void); 110 : #else 111 : # define scsi_proc_hostdir_add(sht) do { } while (0) 112 : # define scsi_proc_hostdir_rm(sht) do { } while (0) 113 : # define scsi_proc_host_add(shost) do { } while (0) 114 : # define scsi_proc_host_rm(shost) do { } while (0) 115 : # define scsi_init_procfs() (0) 116 : # define scsi_exit_procfs() do { } while (0) 117 : #endif /* CONFIG_PROC_FS */ 118 : 119 : /* scsi_scan.c */ 120 : extern char scsi_scan_type[]; 121 : extern int scsi_complete_async_scans(void); 122 : extern int scsi_scan_host_selected(struct Scsi_Host *, unsigned int, 123 : unsigned int, u64, enum scsi_scan_mode); 124 : extern void scsi_forget_host(struct Scsi_Host *); 125 : extern void scsi_rescan_device(struct device *); 126 : 127 : /* scsi_sysctl.c */ 128 : #ifdef CONFIG_SYSCTL 129 : extern int scsi_init_sysctl(void); 130 : extern void scsi_exit_sysctl(void); 131 : #else 132 : # define scsi_init_sysctl() (0) 133 : # define scsi_exit_sysctl() do { } while (0) 134 : #endif /* CONFIG_SYSCTL */ 135 : 136 : /* scsi_sysfs.c */ 137 : extern int scsi_sysfs_add_sdev(struct scsi_device *); 138 : extern int scsi_sysfs_add_host(struct Scsi_Host *); 139 : extern int scsi_sysfs_register(void); 140 : extern void scsi_sysfs_unregister(void); 141 : extern void scsi_sysfs_device_initialize(struct scsi_device *); 142 : extern int scsi_sysfs_target_initialize(struct scsi_device *); 143 : extern struct scsi_transport_template blank_transport_template; 144 : extern void __scsi_remove_device(struct scsi_device *); 145 : 146 : extern struct bus_type scsi_bus_type; 147 : extern const struct attribute_group *scsi_sysfs_shost_attr_groups[]; 148 : 149 : /* scsi_netlink.c */ 150 : #ifdef CONFIG_SCSI_NETLINK 151 : extern void scsi_netlink_init(void); 152 : extern void scsi_netlink_exit(void); 153 : extern struct sock *scsi_nl_sock; 154 : #else 155 1 : static inline void scsi_netlink_init(void) {} 156 0 : static inline void scsi_netlink_exit(void) {} 157 : #endif 158 : 159 : /* scsi_pm.c */ 160 : #ifdef CONFIG_PM 161 : extern const struct dev_pm_ops scsi_bus_pm_ops; 162 : 163 : extern void scsi_autopm_get_target(struct scsi_target *); 164 : extern void scsi_autopm_put_target(struct scsi_target *); 165 : extern int scsi_autopm_get_host(struct Scsi_Host *); 166 : extern void scsi_autopm_put_host(struct Scsi_Host *); 167 : #else 168 0 : static inline void scsi_autopm_get_target(struct scsi_target *t) {} 169 0 : static inline void scsi_autopm_put_target(struct scsi_target *t) {} 170 0 : static inline int scsi_autopm_get_host(struct Scsi_Host *h) { return 0; } 171 0 : static inline void scsi_autopm_put_host(struct Scsi_Host *h) {} 172 : #endif /* CONFIG_PM */ 173 : 174 : extern struct async_domain scsi_sd_pm_domain; 175 : 176 : /* scsi_dh.c */ 177 : #ifdef CONFIG_SCSI_DH 178 : void scsi_dh_add_device(struct scsi_device *sdev); 179 : void scsi_dh_release_device(struct scsi_device *sdev); 180 : #else 181 0 : static inline void scsi_dh_add_device(struct scsi_device *sdev) { } 182 0 : static inline void scsi_dh_release_device(struct scsi_device *sdev) { } 183 : #endif 184 : 185 : /* 186 : * internal scsi timeout functions: for use by mid-layer and transport 187 : * classes. 188 : */ 189 : 190 : #define SCSI_DEVICE_BLOCK_MAX_TIMEOUT 600 /* units in seconds */ 191 : 192 : #endif /* _SCSI_PRIV_H */