| 1 | /* SPDX-License-Identifier: GPL-2.0 */ | 
|---|
| 2 | #ifndef _SCSI_SCSI_EH_H | 
|---|
| 3 | #define _SCSI_SCSI_EH_H | 
|---|
| 4 |  | 
|---|
| 5 | #include <linux/scatterlist.h> | 
|---|
| 6 |  | 
|---|
| 7 | #include <scsi/scsi_cmnd.h> | 
|---|
| 8 | #include <scsi/scsi_common.h> | 
|---|
| 9 | struct scsi_device; | 
|---|
| 10 | struct Scsi_Host; | 
|---|
| 11 |  | 
|---|
| 12 | extern void scsi_eh_finish_cmd(struct scsi_cmnd *scmd, | 
|---|
| 13 | struct list_head *done_q); | 
|---|
| 14 | extern void scsi_eh_flush_done_q(struct list_head *done_q); | 
|---|
| 15 | extern void scsi_report_bus_reset(struct Scsi_Host *, int); | 
|---|
| 16 | extern void scsi_report_device_reset(struct Scsi_Host *, int, int); | 
|---|
| 17 | extern int scsi_block_when_processing_errors(struct scsi_device *); | 
|---|
| 18 | extern bool scsi_command_normalize_sense(const struct scsi_cmnd *cmd, | 
|---|
| 19 | struct scsi_sense_hdr *sshdr); | 
|---|
| 20 | extern enum scsi_disposition scsi_check_sense(struct scsi_cmnd *); | 
|---|
| 21 |  | 
|---|
| 22 | static inline bool scsi_sense_is_deferred(const struct scsi_sense_hdr *sshdr) | 
|---|
| 23 | { | 
|---|
| 24 | return ((sshdr->response_code >= 0x70) && (sshdr->response_code & 1)); | 
|---|
| 25 | } | 
|---|
| 26 |  | 
|---|
| 27 | extern bool scsi_get_sense_info_fld(const u8 *sense_buffer, int sb_len, | 
|---|
| 28 | u64 *info_out); | 
|---|
| 29 |  | 
|---|
| 30 | extern int scsi_ioctl_reset(struct scsi_device *, int __user *); | 
|---|
| 31 |  | 
|---|
| 32 | struct scsi_eh_save { | 
|---|
| 33 | /* saved state */ | 
|---|
| 34 | int result; | 
|---|
| 35 | unsigned int resid_len; | 
|---|
| 36 | int eh_eflags; | 
|---|
| 37 | enum dma_data_direction data_direction; | 
|---|
| 38 | unsigned underflow; | 
|---|
| 39 | unsigned char cmd_len; | 
|---|
| 40 | unsigned char prot_op; | 
|---|
| 41 | unsigned char cmnd[32]; | 
|---|
| 42 | struct scsi_data_buffer sdb; | 
|---|
| 43 | struct scatterlist sense_sgl; | 
|---|
| 44 | }; | 
|---|
| 45 |  | 
|---|
| 46 | extern void scsi_eh_prep_cmnd(struct scsi_cmnd *scmd, | 
|---|
| 47 | struct scsi_eh_save *ses, unsigned char *cmnd, | 
|---|
| 48 | int cmnd_size, unsigned sense_bytes); | 
|---|
| 49 |  | 
|---|
| 50 | extern void scsi_eh_restore_cmnd(struct scsi_cmnd* scmd, | 
|---|
| 51 | struct scsi_eh_save *ses); | 
|---|
| 52 |  | 
|---|
| 53 | #endif /* _SCSI_SCSI_EH_H */ | 
|---|
| 54 |  | 
|---|