[SCSI] ipr: Handle device autosense

Some newer ipr adapters are capable of returning autosense from
devices that support it. This patch adds the data structures for
the autosense buffer.

Signed-off-by: Brian King <brking@us.ibm.com>
Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
This commit is contained in:
brking@us.ibm.com 2005-11-01 17:02:08 -06:00 committed by James Bottomley
parent 32d29776f8
commit c8f7489251

View File

@ -403,23 +403,26 @@ struct ipr_ioadl_desc {
struct ipr_ioasa_vset { struct ipr_ioasa_vset {
__be32 failing_lba_hi; __be32 failing_lba_hi;
__be32 failing_lba_lo; __be32 failing_lba_lo;
__be32 ioa_data[22]; __be32 reserved;
}__attribute__((packed, aligned (4))); }__attribute__((packed, aligned (4)));
struct ipr_ioasa_af_dasd { struct ipr_ioasa_af_dasd {
__be32 failing_lba; __be32 failing_lba;
__be32 reserved[2];
}__attribute__((packed, aligned (4))); }__attribute__((packed, aligned (4)));
struct ipr_ioasa_gpdd { struct ipr_ioasa_gpdd {
u8 end_state; u8 end_state;
u8 bus_phase; u8 bus_phase;
__be16 reserved; __be16 reserved;
__be32 ioa_data[23]; __be32 ioa_data[2];
}__attribute__((packed, aligned (4))); }__attribute__((packed, aligned (4)));
struct ipr_ioasa_raw { struct ipr_auto_sense {
__be32 ioa_data[24]; __be16 auto_sense_len;
}__attribute__((packed, aligned (4))); __be16 ioa_data_len;
__be32 data[SCSI_SENSE_BUFFERSIZE/sizeof(__be32)];
};
struct ipr_ioasa { struct ipr_ioasa {
__be32 ioasc; __be32 ioasc;
@ -446,6 +449,8 @@ struct ipr_ioasa {
__be32 fd_res_handle; __be32 fd_res_handle;
__be32 ioasc_specific; /* status code specific field */ __be32 ioasc_specific; /* status code specific field */
#define IPR_ADDITIONAL_STATUS_FMT 0x80000000
#define IPR_AUTOSENSE_VALID 0x40000000
#define IPR_IOASC_SPECIFIC_MASK 0x00ffffff #define IPR_IOASC_SPECIFIC_MASK 0x00ffffff
#define IPR_FIELD_POINTER_VALID (0x80000000 >> 8) #define IPR_FIELD_POINTER_VALID (0x80000000 >> 8)
#define IPR_FIELD_POINTER_MASK 0x0000ffff #define IPR_FIELD_POINTER_MASK 0x0000ffff
@ -454,8 +459,9 @@ struct ipr_ioasa {
struct ipr_ioasa_vset vset; struct ipr_ioasa_vset vset;
struct ipr_ioasa_af_dasd dasd; struct ipr_ioasa_af_dasd dasd;
struct ipr_ioasa_gpdd gpdd; struct ipr_ioasa_gpdd gpdd;
struct ipr_ioasa_raw raw;
} u; } u;
struct ipr_auto_sense auto_sense;
}__attribute__((packed, aligned (4))); }__attribute__((packed, aligned (4)));
struct ipr_mode_parm_hdr { struct ipr_mode_parm_hdr {