2005-04-17 02:20:36 +04:00
# ifndef _SCSI_SCSI_EH_H
# define _SCSI_SCSI_EH_H
2007-10-16 05:07:17 +04:00
# include <linux/scatterlist.h>
2007-10-08 18:36:45 +04:00
# include <scsi/scsi_cmnd.h>
2005-04-17 02:20:36 +04:00
struct scsi_device ;
struct Scsi_Host ;
2006-01-23 07:09:36 +03:00
extern void scsi_eh_finish_cmd ( struct scsi_cmnd * scmd ,
struct list_head * done_q ) ;
extern void scsi_eh_flush_done_q ( struct list_head * done_q ) ;
2005-04-17 02:20:36 +04:00
extern void scsi_report_bus_reset ( struct Scsi_Host * , int ) ;
extern void scsi_report_device_reset ( struct Scsi_Host * , int , int ) ;
extern int scsi_block_when_processing_errors ( struct scsi_device * ) ;
2014-10-24 16:26:52 +04:00
extern bool scsi_command_normalize_sense ( const struct scsi_cmnd * cmd ,
struct scsi_sense_hdr * sshdr ) ;
2005-04-17 02:20:36 +04:00
2014-10-24 16:26:52 +04:00
static inline bool scsi_sense_is_deferred ( const struct scsi_sense_hdr * sshdr )
2005-04-17 02:20:36 +04:00
{
return ( ( sshdr - > response_code > = 0x70 ) & & ( sshdr - > response_code & 1 ) ) ;
}
extern const u8 * scsi_sense_desc_find ( const u8 * sense_buffer , int sb_len ,
int desc_type ) ;
extern int scsi_get_sense_info_fld ( const u8 * sense_buffer , int sb_len ,
u64 * info_out ) ;
2008-03-25 03:26:49 +03:00
extern void scsi_build_sense_buffer ( int desc , u8 * buf , u8 key , u8 asc , u8 ascq ) ;
2015-03-27 18:46:37 +03:00
extern void scsi_set_sense_information ( u8 * buf , u64 info ) ;
2008-03-25 03:26:49 +03:00
2014-10-11 14:06:47 +04:00
extern int scsi_ioctl_reset ( struct scsi_device * , int __user * ) ;
2005-04-17 02:20:36 +04:00
2007-10-08 18:36:45 +04:00
struct scsi_eh_save {
2007-12-13 14:47:40 +03:00
/* saved state */
2007-10-08 18:36:45 +04:00
int result ;
enum dma_data_direction data_direction ;
2008-07-21 18:25:52 +04:00
unsigned underflow ;
2007-10-08 18:36:45 +04:00
unsigned char cmd_len ;
2008-07-17 12:28:31 +04:00
unsigned char prot_op ;
2008-04-30 12:19:47 +04:00
unsigned char * cmnd ;
2007-12-13 14:47:40 +03:00
struct scsi_data_buffer sdb ;
2007-12-13 14:50:53 +03:00
struct request * next_rq ;
2007-12-13 14:47:40 +03:00
/* new command support */
2008-04-30 12:19:47 +04:00
unsigned char eh_cmnd [ BLK_MAX_CDB ] ;
2007-10-08 18:36:45 +04:00
struct scatterlist sense_sgl ;
} ;
extern void scsi_eh_prep_cmnd ( struct scsi_cmnd * scmd ,
struct scsi_eh_save * ses , unsigned char * cmnd ,
int cmnd_size , unsigned sense_bytes ) ;
extern void scsi_eh_restore_cmnd ( struct scsi_cmnd * scmd ,
struct scsi_eh_save * ses ) ;
2005-04-17 02:20:36 +04:00
# endif /* _SCSI_SCSI_EH_H */