home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / src / linux-headers-2.6.17-6 / include / scsi / scsi_eh.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  2.1 KB  |  72 lines

  1. #ifndef _SCSI_SCSI_EH_H
  2. #define _SCSI_SCSI_EH_H
  3.  
  4. struct scsi_cmnd;
  5. struct scsi_device;
  6. struct scsi_request;
  7. struct Scsi_Host;
  8.  
  9. /*
  10.  * This is a slightly modified SCSI sense "descriptor" format header.
  11.  * The addition is to allow the 0x70 and 0x71 response codes. The idea
  12.  * is to place the salient data from either "fixed" or "descriptor" sense
  13.  * format into one structure to ease application processing.
  14.  *
  15.  * The original sense buffer should be kept around for those cases
  16.  * in which more information is required (e.g. the LBA of a MEDIUM ERROR).
  17.  */
  18. struct scsi_sense_hdr {        /* See SPC-3 section 4.5 */
  19.     u8 response_code;    /* permit: 0x0, 0x70, 0x71, 0x72, 0x73 */
  20.     u8 sense_key;
  21.     u8 asc;
  22.     u8 ascq;
  23.     u8 byte4;
  24.     u8 byte5;
  25.     u8 byte6;
  26.     u8 additional_length;    /* always 0 for fixed sense format */
  27. };
  28.  
  29. static inline int scsi_sense_valid(struct scsi_sense_hdr *sshdr)
  30. {
  31.     if (!sshdr)
  32.         return 0;
  33.  
  34.     return (sshdr->response_code & 0x70) == 0x70;
  35. }
  36.  
  37.  
  38. extern void scsi_eh_finish_cmd(struct scsi_cmnd *scmd,
  39.                    struct list_head *done_q);
  40. extern void scsi_eh_flush_done_q(struct list_head *done_q);
  41. extern void scsi_report_bus_reset(struct Scsi_Host *, int);
  42. extern void scsi_report_device_reset(struct Scsi_Host *, int, int);
  43. extern int scsi_block_when_processing_errors(struct scsi_device *);
  44. extern int scsi_normalize_sense(const u8 *sense_buffer, int sb_len,
  45.         struct scsi_sense_hdr *sshdr);
  46. extern int scsi_request_normalize_sense(struct scsi_request *sreq,
  47.         struct scsi_sense_hdr *sshdr);
  48. extern int scsi_command_normalize_sense(struct scsi_cmnd *cmd,
  49.         struct scsi_sense_hdr *sshdr);
  50.  
  51. static inline int scsi_sense_is_deferred(struct scsi_sense_hdr *sshdr)
  52. {
  53.     return ((sshdr->response_code >= 0x70) && (sshdr->response_code & 1));
  54. }
  55.  
  56. extern const u8 * scsi_sense_desc_find(const u8 * sense_buffer, int sb_len,
  57.                        int desc_type);
  58.  
  59. extern int scsi_get_sense_info_fld(const u8 * sense_buffer, int sb_len,
  60.                    u64 * info_out);
  61.  
  62. /*
  63.  * Reset request from external source
  64.  */
  65. #define SCSI_TRY_RESET_DEVICE    1
  66. #define SCSI_TRY_RESET_BUS    2
  67. #define SCSI_TRY_RESET_HOST    3
  68.  
  69. extern int scsi_reset_provider(struct scsi_device *, int);
  70.  
  71. #endif /* _SCSI_SCSI_EH_H */
  72.