|
@@ -933,7 +933,11 @@ static void ata_to_sense_error(unsigned id, u8 drv_stat, u8 drv_err, u8 *sk,
|
|
|
* block specified for the ATA pass through commands. Regardless
|
|
|
* of whether the command errored or not, return a sense
|
|
|
* block. Copy all controller registers into the sense
|
|
|
- * block. Clear sense key, ASC & ASCQ if there is no error.
|
|
|
+ * block. If there was no error, we get the request from an ATA
|
|
|
+ * passthrough command, so we use the following sense data:
|
|
|
+ * sk = RECOVERED ERROR
|
|
|
+ * asc,ascq = ATA PASS-THROUGH INFORMATION AVAILABLE
|
|
|
+ *
|
|
|
*
|
|
|
* LOCKING:
|
|
|
* None.
|
|
@@ -959,6 +963,10 @@ static void ata_gen_passthru_sense(struct ata_queued_cmd *qc)
|
|
|
ata_to_sense_error(qc->ap->print_id, tf->command, tf->feature,
|
|
|
&sb[1], &sb[2], &sb[3], verbose);
|
|
|
sb[1] &= 0x0f;
|
|
|
+ } else {
|
|
|
+ sb[1] = RECOVERED_ERROR;
|
|
|
+ sb[2] = 0;
|
|
|
+ sb[3] = 0x1D;
|
|
|
}
|
|
|
|
|
|
/*
|
|
@@ -1733,10 +1741,12 @@ static void ata_scsi_qc_complete(struct ata_queued_cmd *qc)
|
|
|
|
|
|
/* For ATA pass thru (SAT) commands, generate a sense block if
|
|
|
* user mandated it or if there's an error. Note that if we
|
|
|
- * generate because the user forced us to, a check condition
|
|
|
- * is generated and the ATA register values are returned
|
|
|
+ * generate because the user forced us to [CK_COND =1], a check
|
|
|
+ * condition is generated and the ATA register values are returned
|
|
|
* whether the command completed successfully or not. If there
|
|
|
- * was no error, SK, ASC and ASCQ will all be zero.
|
|
|
+ * was no error, we use the following sense data:
|
|
|
+ * sk = RECOVERED ERROR
|
|
|
+ * asc,ascq = ATA PASS-THROUGH INFORMATION AVAILABLE
|
|
|
*/
|
|
|
if (((cdb[0] == ATA_16) || (cdb[0] == ATA_12)) &&
|
|
|
((cdb[2] & 0x20) || need_sense)) {
|