scsi_priv.h revision 5b7f16804ad90e7f7a10c05b6a2e782598d9745a
1#ifndef _SCSI_PRIV_H 2#define _SCSI_PRIV_H 3 4#include <linux/device.h> 5 6struct request_queue; 7struct scsi_cmnd; 8struct scsi_device; 9struct scsi_host_template; 10struct Scsi_Host; 11struct scsi_nl_hdr; 12 13 14/* 15 * Scsi Error Handler Flags 16 */ 17#define SCSI_EH_CANCEL_CMD 0x0001 /* Cancel this cmd */ 18 19#define SCSI_SENSE_VALID(scmd) \ 20 (((scmd)->sense_buffer[0] & 0x70) == 0x70) 21 22/* hosts.c */ 23extern int scsi_init_hosts(void); 24extern void scsi_exit_hosts(void); 25 26/* scsi.c */ 27extern int scsi_dispatch_cmd(struct scsi_cmnd *cmd); 28extern int scsi_setup_command_freelist(struct Scsi_Host *shost); 29extern void scsi_destroy_command_freelist(struct Scsi_Host *shost); 30extern void __scsi_done(struct scsi_cmnd *cmd); 31#ifdef CONFIG_SCSI_LOGGING 32void scsi_log_send(struct scsi_cmnd *cmd); 33void scsi_log_completion(struct scsi_cmnd *cmd, int disposition); 34#else 35static inline void scsi_log_send(struct scsi_cmnd *cmd) 36 { }; 37static inline void scsi_log_completion(struct scsi_cmnd *cmd, int disposition) 38 { }; 39#endif 40 41/* scsi_scan.c */ 42int scsi_complete_async_scans(void); 43 44/* scsi_devinfo.c */ 45extern int scsi_get_device_flags(struct scsi_device *sdev, 46 const unsigned char *vendor, 47 const unsigned char *model); 48extern int __init scsi_init_devinfo(void); 49extern void scsi_exit_devinfo(void); 50 51/* scsi_error.c */ 52extern void scsi_add_timer(struct scsi_cmnd *, int, 53 void (*)(struct scsi_cmnd *)); 54extern int scsi_delete_timer(struct scsi_cmnd *); 55extern void scsi_times_out(struct scsi_cmnd *cmd); 56extern int scsi_error_handler(void *host); 57extern int scsi_decide_disposition(struct scsi_cmnd *cmd); 58extern void scsi_eh_wakeup(struct Scsi_Host *shost); 59extern int scsi_eh_scmd_add(struct scsi_cmnd *, int); 60void scsi_eh_ready_devs(struct Scsi_Host *shost, 61 struct list_head *work_q, 62 struct list_head *done_q); 63int scsi_eh_get_sense(struct list_head *work_q, 64 struct list_head *done_q); 65 66/* scsi_lib.c */ 67extern int scsi_maybe_unblock_host(struct scsi_device *sdev); 68extern void scsi_device_unbusy(struct scsi_device *sdev); 69extern int scsi_queue_insert(struct scsi_cmnd *cmd, int reason); 70extern void scsi_next_command(struct scsi_cmnd *cmd); 71extern void scsi_io_completion(struct scsi_cmnd *, unsigned int); 72extern void scsi_run_host_queues(struct Scsi_Host *shost); 73extern struct request_queue *scsi_alloc_queue(struct scsi_device *sdev); 74extern void scsi_free_queue(struct request_queue *q); 75extern int scsi_init_queue(void); 76extern void scsi_exit_queue(void); 77struct request_queue; 78struct request; 79extern int scsi_prep_fn(struct request_queue *, struct request *); 80 81/* scsi_proc.c */ 82#ifdef CONFIG_SCSI_PROC_FS 83extern void scsi_proc_hostdir_add(struct scsi_host_template *); 84extern void scsi_proc_hostdir_rm(struct scsi_host_template *); 85extern void scsi_proc_host_add(struct Scsi_Host *); 86extern void scsi_proc_host_rm(struct Scsi_Host *); 87extern int scsi_init_procfs(void); 88extern void scsi_exit_procfs(void); 89#else 90# define scsi_proc_hostdir_add(sht) do { } while (0) 91# define scsi_proc_hostdir_rm(sht) do { } while (0) 92# define scsi_proc_host_add(shost) do { } while (0) 93# define scsi_proc_host_rm(shost) do { } while (0) 94# define scsi_init_procfs() (0) 95# define scsi_exit_procfs() do { } while (0) 96#endif /* CONFIG_PROC_FS */ 97 98/* scsi_scan.c */ 99extern int scsi_scan_host_selected(struct Scsi_Host *, unsigned int, 100 unsigned int, unsigned int, int); 101extern void scsi_forget_host(struct Scsi_Host *); 102extern void scsi_rescan_device(struct device *); 103 104/* scsi_sysctl.c */ 105#ifdef CONFIG_SYSCTL 106extern int scsi_init_sysctl(void); 107extern void scsi_exit_sysctl(void); 108#else 109# define scsi_init_sysctl() (0) 110# define scsi_exit_sysctl() do { } while (0) 111#endif /* CONFIG_SYSCTL */ 112 113/* scsi_sysfs.c */ 114extern int scsi_sysfs_add_sdev(struct scsi_device *); 115extern int scsi_sysfs_add_host(struct Scsi_Host *); 116extern int scsi_sysfs_register(void); 117extern void scsi_sysfs_unregister(void); 118extern void scsi_sysfs_device_initialize(struct scsi_device *); 119extern int scsi_sysfs_target_initialize(struct scsi_device *); 120extern struct scsi_transport_template blank_transport_template; 121extern void __scsi_remove_device(struct scsi_device *); 122 123extern struct bus_type scsi_bus_type; 124 125/* scsi_netlink.c */ 126#ifdef CONFIG_SCSI_NETLINK 127extern void scsi_netlink_init(void); 128extern void scsi_netlink_exit(void); 129extern struct sock *scsi_nl_sock; 130#else 131static inline void scsi_netlink_init(void) {} 132static inline void scsi_netlink_exit(void) {} 133#endif 134 135/* 136 * internal scsi timeout functions: for use by mid-layer and transport 137 * classes. 138 */ 139 140#define SCSI_DEVICE_BLOCK_MAX_TIMEOUT 600 /* units in seconds */ 141extern int scsi_internal_device_block(struct scsi_device *sdev); 142extern int scsi_internal_device_unblock(struct scsi_device *sdev); 143 144#endif /* _SCSI_PRIV_H */ 145