Blame view
include/scsi/scsi_eh.h
2.71 KB
1da177e4c Linux-2.6.12-rc2 |
1 2 |
#ifndef _SCSI_SCSI_EH_H #define _SCSI_SCSI_EH_H |
645a0c6c4 [SCSI] include li... |
3 |
#include <linux/scatterlist.h> |
e1c234685 [SCSI] scsi_error... |
4 |
#include <scsi/scsi_cmnd.h> |
1da177e4c Linux-2.6.12-rc2 |
5 |
struct scsi_device; |
1da177e4c Linux-2.6.12-rc2 |
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
struct Scsi_Host; /* * This is a slightly modified SCSI sense "descriptor" format header. * The addition is to allow the 0x70 and 0x71 response codes. The idea * is to place the salient data from either "fixed" or "descriptor" sense * format into one structure to ease application processing. * * The original sense buffer should be kept around for those cases * in which more information is required (e.g. the LBA of a MEDIUM ERROR). */ struct scsi_sense_hdr { /* See SPC-3 section 4.5 */ u8 response_code; /* permit: 0x0, 0x70, 0x71, 0x72, 0x73 */ u8 sense_key; u8 asc; u8 ascq; u8 byte4; u8 byte5; u8 byte6; u8 additional_length; /* always 0 for fixed sense format */ }; |
33aa687db [SCSI] convert SP... |
27 28 29 30 31 32 33 |
static inline int scsi_sense_valid(struct scsi_sense_hdr *sshdr) { if (!sshdr) return 0; return (sshdr->response_code & 0x70) == 0x70; } |
1da177e4c Linux-2.6.12-rc2 |
34 |
|
041c5fc33 [PATCH] SCSI: exp... |
35 36 37 |
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); |
1da177e4c Linux-2.6.12-rc2 |
38 39 40 41 42 |
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 *); extern int scsi_normalize_sense(const u8 *sense_buffer, int sb_len, struct scsi_sense_hdr *sshdr); |
1da177e4c Linux-2.6.12-rc2 |
43 44 45 46 47 48 49 50 51 52 53 54 55 |
extern int scsi_command_normalize_sense(struct scsi_cmnd *cmd, struct scsi_sense_hdr *sshdr); static inline int scsi_sense_is_deferred(struct scsi_sense_hdr *sshdr) { 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); |
3bc6a2619 [SCSI] add scsi_b... |
56 57 |
extern void scsi_build_sense_buffer(int desc, u8 *buf, u8 key, u8 asc, u8 ascq); |
1da177e4c Linux-2.6.12-rc2 |
58 59 60 61 62 63 |
/* * Reset request from external source */ #define SCSI_TRY_RESET_DEVICE 1 #define SCSI_TRY_RESET_BUS 2 #define SCSI_TRY_RESET_HOST 3 |
30bd7df8c [SCSI] scsi_error... |
64 |
#define SCSI_TRY_RESET_TARGET 4 |
1da177e4c Linux-2.6.12-rc2 |
65 66 |
extern int scsi_reset_provider(struct scsi_device *, int); |
e1c234685 [SCSI] scsi_error... |
67 |
struct scsi_eh_save { |
30b0c37b2 [SCSI] implement ... |
68 |
/* saved state */ |
e1c234685 [SCSI] scsi_error... |
69 70 |
int result; enum dma_data_direction data_direction; |
12265709a [SCSI] scsi_eh_pr... |
71 |
unsigned underflow; |
e1c234685 [SCSI] scsi_error... |
72 |
unsigned char cmd_len; |
db007fc5e [SCSI] Command pr... |
73 |
unsigned char prot_op; |
64a87b244 [SCSI] Let scsi_c... |
74 |
unsigned char *cmnd; |
30b0c37b2 [SCSI] implement ... |
75 |
struct scsi_data_buffer sdb; |
6f9a35e2d [SCSI] bidirectio... |
76 |
struct request *next_rq; |
30b0c37b2 [SCSI] implement ... |
77 |
/* new command support */ |
64a87b244 [SCSI] Let scsi_c... |
78 |
unsigned char eh_cmnd[BLK_MAX_CDB]; |
e1c234685 [SCSI] scsi_error... |
79 80 81 82 83 84 85 86 87 |
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); |
1da177e4c Linux-2.6.12-rc2 |
88 |
#endif /* _SCSI_SCSI_EH_H */ |