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>
2015-07-08 17:58:52 +03:00
# include <scsi/scsi_common.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 ) ;
2016-04-04 12:44:01 +03:00
extern int scsi_check_sense ( struct scsi_cmnd * ) ;
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 ) ) ;
}
2017-04-24 10:51:12 +03:00
extern bool scsi_get_sense_info_fld ( const u8 * sense_buffer , int sb_len ,
u64 * info_out ) ;
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 ;
2017-04-06 16:36:33 +03:00
int eh_eflags ;
2007-10-08 18:36:45 +04:00
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 */