Loading drivers/ata/libata-scsi.c +40 −21 Original line number Original line Diff line number Diff line Loading @@ -849,40 +849,59 @@ static void ata_to_sense_error(unsigned id, u8 drv_stat, u8 drv_err, u8 *sk, /* Based on the 3ware driver translation table */ /* Based on the 3ware driver translation table */ static const unsigned char sense_table[][4] = { static const unsigned char sense_table[][4] = { /* BBD|ECC|ID|MAR */ /* BBD|ECC|ID|MAR */ {0xd1, ABORTED_COMMAND, 0x00, 0x00}, // Device busy Aborted command {0xd1, ABORTED_COMMAND, 0x00, 0x00}, // Device busy Aborted command /* BBD|ECC|ID */ /* BBD|ECC|ID */ {0xd0, ABORTED_COMMAND, 0x00, 0x00}, // Device busy Aborted command {0xd0, ABORTED_COMMAND, 0x00, 0x00}, // Device busy Aborted command /* ECC|MC|MARK */ /* ECC|MC|MARK */ {0x61, HARDWARE_ERROR, 0x00, 0x00}, // Device fault Hardware error {0x61, HARDWARE_ERROR, 0x00, 0x00}, // Device fault Hardware error /* ICRC|ABRT */ /* NB: ICRC & !ABRT is BBD */ /* ICRC|ABRT */ /* NB: ICRC & !ABRT is BBD */ {0x84, ABORTED_COMMAND, 0x47, 0x00}, // Data CRC error SCSI parity error {0x84, ABORTED_COMMAND, 0x47, 0x00}, // Data CRC error SCSI parity error /* MC|ID|ABRT|TRK0|MARK */ /* MC|ID|ABRT|TRK0|MARK */ {0x37, NOT_READY, 0x04, 0x00}, // Unit offline Not ready {0x37, NOT_READY, 0x04, 0x00}, // Unit offline Not ready /* MCR|MARK */ /* MCR|MARK */ {0x09, NOT_READY, 0x04, 0x00}, // Unrecovered disk error Not ready {0x09, NOT_READY, 0x04, 0x00}, // Unrecovered disk error Not ready /* Bad address mark */ /* Bad address mark */ {0x01, MEDIUM_ERROR, 0x13, 0x00}, // Address mark not found Address mark not found for data field {0x01, MEDIUM_ERROR, 0x13, 0x00}, /* TRK0 */ // Address mark not found for data field {0x02, HARDWARE_ERROR, 0x00, 0x00}, // Track 0 not found Hardware error /* TRK0 - Track 0 not found */ {0x02, HARDWARE_ERROR, 0x00, 0x00}, // Hardware error /* Abort: 0x04 is not translated here, see below */ /* Abort: 0x04 is not translated here, see below */ /* Media change request */ /* Media change request */ {0x08, NOT_READY, 0x04, 0x00}, // Media change request FIXME: faking offline {0x08, NOT_READY, 0x04, 0x00}, /* SRV/IDNF */ // FIXME: faking offline {0x10, ILLEGAL_REQUEST, 0x21, 0x00}, // ID not found Logical address out of range /* SRV/IDNF - ID not found */ /* MC */ {0x10, ILLEGAL_REQUEST, 0x21, 0x00}, {0x20, UNIT_ATTENTION, 0x28, 0x00}, // Media Changed Not ready to ready change, medium may have changed // Logical address out of range /* ECC */ /* MC - Media Changed */ {0x40, MEDIUM_ERROR, 0x11, 0x04}, // Uncorrectable ECC error Unrecovered read error {0x20, UNIT_ATTENTION, 0x28, 0x00}, // Not ready to ready change, medium may have changed /* ECC - Uncorrectable ECC error */ {0x40, MEDIUM_ERROR, 0x11, 0x04}, // Unrecovered read error /* BBD - block marked bad */ /* BBD - block marked bad */ {0x80, MEDIUM_ERROR, 0x11, 0x04}, // Block marked bad Medium error, unrecovered read error {0x80, MEDIUM_ERROR, 0x11, 0x04}, // Block marked bad Medium error, unrecovered read error {0xFF, 0xFF, 0xFF, 0xFF}, // END mark {0xFF, 0xFF, 0xFF, 0xFF}, // END mark }; }; static const unsigned char stat_table[][4] = { static const unsigned char stat_table[][4] = { /* Must be first because BUSY means no other bits valid */ /* Must be first because BUSY means no other bits valid */ {0x80, ABORTED_COMMAND, 0x47, 0x00}, // Busy, fake parity for now {0x80, ABORTED_COMMAND, 0x47, 0x00}, {0x20, HARDWARE_ERROR, 0x44, 0x00}, // Device fault, internal target failure // Busy, fake parity for now {0x08, ABORTED_COMMAND, 0x47, 0x00}, // Timed out in xfer, fake parity for now {0x40, ILLEGAL_REQUEST, 0x21, 0x04}, {0x04, RECOVERED_ERROR, 0x11, 0x00}, // Recovered ECC error Medium error, recovered // Device ready, unaligned write command {0x20, HARDWARE_ERROR, 0x44, 0x00}, // Device fault, internal target failure {0x08, ABORTED_COMMAND, 0x47, 0x00}, // Timed out in xfer, fake parity for now {0x04, RECOVERED_ERROR, 0x11, 0x00}, // Recovered ECC error Medium error, recovered {0xFF, 0xFF, 0xFF, 0xFF}, // END mark {0xFF, 0xFF, 0xFF, 0xFF}, // END mark }; }; Loading Loading
drivers/ata/libata-scsi.c +40 −21 Original line number Original line Diff line number Diff line Loading @@ -849,40 +849,59 @@ static void ata_to_sense_error(unsigned id, u8 drv_stat, u8 drv_err, u8 *sk, /* Based on the 3ware driver translation table */ /* Based on the 3ware driver translation table */ static const unsigned char sense_table[][4] = { static const unsigned char sense_table[][4] = { /* BBD|ECC|ID|MAR */ /* BBD|ECC|ID|MAR */ {0xd1, ABORTED_COMMAND, 0x00, 0x00}, // Device busy Aborted command {0xd1, ABORTED_COMMAND, 0x00, 0x00}, // Device busy Aborted command /* BBD|ECC|ID */ /* BBD|ECC|ID */ {0xd0, ABORTED_COMMAND, 0x00, 0x00}, // Device busy Aborted command {0xd0, ABORTED_COMMAND, 0x00, 0x00}, // Device busy Aborted command /* ECC|MC|MARK */ /* ECC|MC|MARK */ {0x61, HARDWARE_ERROR, 0x00, 0x00}, // Device fault Hardware error {0x61, HARDWARE_ERROR, 0x00, 0x00}, // Device fault Hardware error /* ICRC|ABRT */ /* NB: ICRC & !ABRT is BBD */ /* ICRC|ABRT */ /* NB: ICRC & !ABRT is BBD */ {0x84, ABORTED_COMMAND, 0x47, 0x00}, // Data CRC error SCSI parity error {0x84, ABORTED_COMMAND, 0x47, 0x00}, // Data CRC error SCSI parity error /* MC|ID|ABRT|TRK0|MARK */ /* MC|ID|ABRT|TRK0|MARK */ {0x37, NOT_READY, 0x04, 0x00}, // Unit offline Not ready {0x37, NOT_READY, 0x04, 0x00}, // Unit offline Not ready /* MCR|MARK */ /* MCR|MARK */ {0x09, NOT_READY, 0x04, 0x00}, // Unrecovered disk error Not ready {0x09, NOT_READY, 0x04, 0x00}, // Unrecovered disk error Not ready /* Bad address mark */ /* Bad address mark */ {0x01, MEDIUM_ERROR, 0x13, 0x00}, // Address mark not found Address mark not found for data field {0x01, MEDIUM_ERROR, 0x13, 0x00}, /* TRK0 */ // Address mark not found for data field {0x02, HARDWARE_ERROR, 0x00, 0x00}, // Track 0 not found Hardware error /* TRK0 - Track 0 not found */ {0x02, HARDWARE_ERROR, 0x00, 0x00}, // Hardware error /* Abort: 0x04 is not translated here, see below */ /* Abort: 0x04 is not translated here, see below */ /* Media change request */ /* Media change request */ {0x08, NOT_READY, 0x04, 0x00}, // Media change request FIXME: faking offline {0x08, NOT_READY, 0x04, 0x00}, /* SRV/IDNF */ // FIXME: faking offline {0x10, ILLEGAL_REQUEST, 0x21, 0x00}, // ID not found Logical address out of range /* SRV/IDNF - ID not found */ /* MC */ {0x10, ILLEGAL_REQUEST, 0x21, 0x00}, {0x20, UNIT_ATTENTION, 0x28, 0x00}, // Media Changed Not ready to ready change, medium may have changed // Logical address out of range /* ECC */ /* MC - Media Changed */ {0x40, MEDIUM_ERROR, 0x11, 0x04}, // Uncorrectable ECC error Unrecovered read error {0x20, UNIT_ATTENTION, 0x28, 0x00}, // Not ready to ready change, medium may have changed /* ECC - Uncorrectable ECC error */ {0x40, MEDIUM_ERROR, 0x11, 0x04}, // Unrecovered read error /* BBD - block marked bad */ /* BBD - block marked bad */ {0x80, MEDIUM_ERROR, 0x11, 0x04}, // Block marked bad Medium error, unrecovered read error {0x80, MEDIUM_ERROR, 0x11, 0x04}, // Block marked bad Medium error, unrecovered read error {0xFF, 0xFF, 0xFF, 0xFF}, // END mark {0xFF, 0xFF, 0xFF, 0xFF}, // END mark }; }; static const unsigned char stat_table[][4] = { static const unsigned char stat_table[][4] = { /* Must be first because BUSY means no other bits valid */ /* Must be first because BUSY means no other bits valid */ {0x80, ABORTED_COMMAND, 0x47, 0x00}, // Busy, fake parity for now {0x80, ABORTED_COMMAND, 0x47, 0x00}, {0x20, HARDWARE_ERROR, 0x44, 0x00}, // Device fault, internal target failure // Busy, fake parity for now {0x08, ABORTED_COMMAND, 0x47, 0x00}, // Timed out in xfer, fake parity for now {0x40, ILLEGAL_REQUEST, 0x21, 0x04}, {0x04, RECOVERED_ERROR, 0x11, 0x00}, // Recovered ECC error Medium error, recovered // Device ready, unaligned write command {0x20, HARDWARE_ERROR, 0x44, 0x00}, // Device fault, internal target failure {0x08, ABORTED_COMMAND, 0x47, 0x00}, // Timed out in xfer, fake parity for now {0x04, RECOVERED_ERROR, 0x11, 0x00}, // Recovered ECC error Medium error, recovered {0xFF, 0xFF, 0xFF, 0xFF}, // END mark {0xFF, 0xFF, 0xFF, 0xFF}, // END mark }; }; Loading