===== include/scsi/scsi.h 1.9 vs edited ===== --- 1.9/include/scsi/scsi.h Thu Jan 23 10:50:27 2003 +++ edited/include/scsi/scsi.h Thu May 8 10:09:33 2003 @@ -111,13 +111,38 @@ #define SAM_STAT_CHECK_CONDITION 0x02 #define SAM_STAT_CONDITION_MET 0x04 #define SAM_STAT_BUSY 0x08 -#define SAM_STAT_IMMEDIATE 0x10 -#define SAM_STAT_IMMEDIATE_CONDITION_MET 0x14 +#define SAM_STAT_INTERMEDIATE 0x10 +#define SAM_STAT_INTERMEDIATE_CONDITION_MET 0x14 #define SAM_STAT_RESERVATION_CONFLICT 0x18 #define SAM_STAT_COMMAND_TERMINATED 0x22 /* obsolete in SAM-3 */ #define SAM_STAT_TASK_SET_FULL 0x28 #define SAM_STAT_ACA_ACTIVE 0x30 #define SAM_STAT_TASK_ABORTED 0x40 + +/** scsi_status_is_good - check the status return. + * + * @status: the status passed up from the driver (including host and + * driver components) + * + * This returns true for known good conditions that may be treated as + * command completed normally + */ +static inline int scsi_status_is_good(int status) +{ + /* mask out the relevant bits + * + * FIXME: bit0 is listed as reserved in SCSI-2, but is + * significant in SCSI-3. For now, we follow the SCSI-2 + * behaviour and ignore reserved bits. */ + + status &= 0xfe; + + return ((status & SAM_STAT_GOOD) + || (status & SAM_STAT_INTERMEDIATE) + || (status & SAM_STAT_INTERMEDIATE_CONDITION_MET) + /* FIXME: this is obsolete in SAM-3 */ + || (status & SAM_STAT_COMMAND_TERMINATED)); +} /* * Status codes. These are deprecated as they are shifted 1 bit right