LCOV - code coverage report
Current view: top level - include/scsi - scsi_eh.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 2 3 66.7 %
Date: 2014-02-18 Functions: 0 0 -
Branches: 3 16 18.8 %

           Branch data     Line data    Source code
       1                 :            : #ifndef _SCSI_SCSI_EH_H
       2                 :            : #define _SCSI_SCSI_EH_H
       3                 :            : 
       4                 :            : #include <linux/scatterlist.h>
       5                 :            : 
       6                 :            : #include <scsi/scsi_cmnd.h>
       7                 :            : struct scsi_device;
       8                 :            : struct Scsi_Host;
       9                 :            : 
      10                 :            : /*
      11                 :            :  * This is a slightly modified SCSI sense "descriptor" format header.
      12                 :            :  * The addition is to allow the 0x70 and 0x71 response codes. The idea
      13                 :            :  * is to place the salient data from either "fixed" or "descriptor" sense
      14                 :            :  * format into one structure to ease application processing.
      15                 :            :  *
      16                 :            :  * The original sense buffer should be kept around for those cases
      17                 :            :  * in which more information is required (e.g. the LBA of a MEDIUM ERROR).
      18                 :            :  */
      19                 :            : struct scsi_sense_hdr {         /* See SPC-3 section 4.5 */
      20                 :            :         u8 response_code;       /* permit: 0x0, 0x70, 0x71, 0x72, 0x73 */
      21                 :            :         u8 sense_key;
      22                 :            :         u8 asc;
      23                 :            :         u8 ascq;
      24                 :            :         u8 byte4;
      25                 :            :         u8 byte5;
      26                 :            :         u8 byte6;
      27                 :            :         u8 additional_length;   /* always 0 for fixed sense format */
      28                 :            : };
      29                 :            : 
      30                 :            : static inline int scsi_sense_valid(struct scsi_sense_hdr *sshdr)
      31                 :            : {
      32 [ +  - ][ +  - ]:     155272 :         if (!sshdr)
         [ +  - ][ #  # ]
      33                 :            :                 return 0;
      34                 :            : 
      35                 :     155272 :         return (sshdr->response_code & 0x70) == 0x70;
      36                 :            : }
      37                 :            : 
      38                 :            : 
      39                 :            : extern void scsi_eh_finish_cmd(struct scsi_cmnd *scmd,
      40                 :            :                                struct list_head *done_q);
      41                 :            : extern void scsi_eh_flush_done_q(struct list_head *done_q);
      42                 :            : extern void scsi_report_bus_reset(struct Scsi_Host *, int);
      43                 :            : extern void scsi_report_device_reset(struct Scsi_Host *, int, int);
      44                 :            : extern int scsi_block_when_processing_errors(struct scsi_device *);
      45                 :            : extern int scsi_normalize_sense(const u8 *sense_buffer, int sb_len,
      46                 :            :                 struct scsi_sense_hdr *sshdr);
      47                 :            : extern int scsi_command_normalize_sense(struct scsi_cmnd *cmd,
      48                 :            :                 struct scsi_sense_hdr *sshdr);
      49                 :            : 
      50                 :            : static inline int scsi_sense_is_deferred(struct scsi_sense_hdr *sshdr)
      51                 :            : {
      52 [ #  # ][ #  # ]:          0 :         return ((sshdr->response_code >= 0x70) && (sshdr->response_code & 1));
         [ #  # ][ #  # ]
      53                 :            : }
      54                 :            : 
      55                 :            : extern const u8 * scsi_sense_desc_find(const u8 * sense_buffer, int sb_len,
      56                 :            :                                        int desc_type);
      57                 :            : 
      58                 :            : extern int scsi_get_sense_info_fld(const u8 * sense_buffer, int sb_len,
      59                 :            :                                    u64 * info_out);
      60                 :            : 
      61                 :            : extern void scsi_build_sense_buffer(int desc, u8 *buf, u8 key, u8 asc, u8 ascq);
      62                 :            : 
      63                 :            : /*
      64                 :            :  * Reset request from external source
      65                 :            :  */
      66                 :            : #define SCSI_TRY_RESET_DEVICE   1
      67                 :            : #define SCSI_TRY_RESET_BUS      2
      68                 :            : #define SCSI_TRY_RESET_HOST     3
      69                 :            : #define SCSI_TRY_RESET_TARGET   4
      70                 :            : 
      71                 :            : extern int scsi_reset_provider(struct scsi_device *, int);
      72                 :            : 
      73                 :            : struct scsi_eh_save {
      74                 :            :         /* saved state */
      75                 :            :         int result;
      76                 :            :         enum dma_data_direction data_direction;
      77                 :            :         unsigned underflow;
      78                 :            :         unsigned char cmd_len;
      79                 :            :         unsigned char prot_op;
      80                 :            :         unsigned char *cmnd;
      81                 :            :         struct scsi_data_buffer sdb;
      82                 :            :         struct request *next_rq;
      83                 :            :         /* new command support */
      84                 :            :         unsigned char eh_cmnd[BLK_MAX_CDB];
      85                 :            :         struct scatterlist sense_sgl;
      86                 :            : };
      87                 :            : 
      88                 :            : extern void scsi_eh_prep_cmnd(struct scsi_cmnd *scmd,
      89                 :            :                 struct scsi_eh_save *ses, unsigned char *cmnd,
      90                 :            :                 int cmnd_size, unsigned sense_bytes);
      91                 :            : 
      92                 :            : extern void scsi_eh_restore_cmnd(struct scsi_cmnd* scmd,
      93                 :            :                 struct scsi_eh_save *ses);
      94                 :            : 
      95                 :            : #endif /* _SCSI_SCSI_EH_H */

Generated by: LCOV version 1.9