diff options
Diffstat (limited to 'drivers/scsi/libata-scsi.c')
-rw-r--r-- | drivers/scsi/libata-scsi.c | 27 |
1 files changed, 9 insertions, 18 deletions
diff --git a/drivers/scsi/libata-scsi.c b/drivers/scsi/libata-scsi.c index ec628cea386e..28706521773c 100644 --- a/drivers/scsi/libata-scsi.c +++ b/drivers/scsi/libata-scsi.c | |||
@@ -546,12 +546,6 @@ void ata_gen_ata_desc_sense(struct ata_queued_cmd *qc) | |||
546 | cmd->result = (DRIVER_SENSE << 24) | SAM_STAT_CHECK_CONDITION; | 546 | cmd->result = (DRIVER_SENSE << 24) | SAM_STAT_CHECK_CONDITION; |
547 | 547 | ||
548 | /* | 548 | /* |
549 | * Read the controller registers. | ||
550 | */ | ||
551 | WARN_ON(qc->ap->ops->tf_read == NULL); | ||
552 | qc->ap->ops->tf_read(qc->ap, tf); | ||
553 | |||
554 | /* | ||
555 | * Use ata_to_sense_error() to map status register bits | 549 | * Use ata_to_sense_error() to map status register bits |
556 | * onto sense key, asc & ascq. | 550 | * onto sense key, asc & ascq. |
557 | */ | 551 | */ |
@@ -622,12 +616,6 @@ void ata_gen_fixed_sense(struct ata_queued_cmd *qc) | |||
622 | cmd->result = (DRIVER_SENSE << 24) | SAM_STAT_CHECK_CONDITION; | 616 | cmd->result = (DRIVER_SENSE << 24) | SAM_STAT_CHECK_CONDITION; |
623 | 617 | ||
624 | /* | 618 | /* |
625 | * Read the controller registers. | ||
626 | */ | ||
627 | WARN_ON(qc->ap->ops->tf_read == NULL); | ||
628 | qc->ap->ops->tf_read(qc->ap, tf); | ||
629 | |||
630 | /* | ||
631 | * Use ata_to_sense_error() to map status register bits | 619 | * Use ata_to_sense_error() to map status register bits |
632 | * onto sense key, asc & ascq. | 620 | * onto sense key, asc & ascq. |
633 | */ | 621 | */ |
@@ -1337,11 +1325,14 @@ static void ata_scsi_qc_complete(struct ata_queued_cmd *qc) | |||
1337 | */ | 1325 | */ |
1338 | if (((cdb[0] == ATA_16) || (cdb[0] == ATA_12)) && | 1326 | if (((cdb[0] == ATA_16) || (cdb[0] == ATA_12)) && |
1339 | ((cdb[2] & 0x20) || need_sense)) { | 1327 | ((cdb[2] & 0x20) || need_sense)) { |
1328 | qc->ap->ops->tf_read(qc->ap, &qc->tf); | ||
1340 | ata_gen_ata_desc_sense(qc); | 1329 | ata_gen_ata_desc_sense(qc); |
1341 | } else { | 1330 | } else { |
1342 | if (!need_sense) { | 1331 | if (!need_sense) { |
1343 | cmd->result = SAM_STAT_GOOD; | 1332 | cmd->result = SAM_STAT_GOOD; |
1344 | } else { | 1333 | } else { |
1334 | qc->ap->ops->tf_read(qc->ap, &qc->tf); | ||
1335 | |||
1345 | /* TODO: decide which descriptor format to use | 1336 | /* TODO: decide which descriptor format to use |
1346 | * for 48b LBA devices and call that here | 1337 | * for 48b LBA devices and call that here |
1347 | * instead of the fixed desc, which is only | 1338 | * instead of the fixed desc, which is only |
@@ -2133,13 +2124,15 @@ void ata_scsi_badcmd(struct scsi_cmnd *cmd, void (*done)(struct scsi_cmnd *), u8 | |||
2133 | 2124 | ||
2134 | static void atapi_sense_complete(struct ata_queued_cmd *qc) | 2125 | static void atapi_sense_complete(struct ata_queued_cmd *qc) |
2135 | { | 2126 | { |
2136 | if (qc->err_mask && ((qc->err_mask & AC_ERR_DEV) == 0)) | 2127 | if (qc->err_mask && ((qc->err_mask & AC_ERR_DEV) == 0)) { |
2137 | /* FIXME: not quite right; we don't want the | 2128 | /* FIXME: not quite right; we don't want the |
2138 | * translation of taskfile registers into | 2129 | * translation of taskfile registers into |
2139 | * a sense descriptors, since that's only | 2130 | * a sense descriptors, since that's only |
2140 | * correct for ATA, not ATAPI | 2131 | * correct for ATA, not ATAPI |
2141 | */ | 2132 | */ |
2133 | qc->ap->ops->tf_read(qc->ap, &qc->tf); | ||
2142 | ata_gen_ata_desc_sense(qc); | 2134 | ata_gen_ata_desc_sense(qc); |
2135 | } | ||
2143 | 2136 | ||
2144 | qc->scsidone(qc->scsicmd); | 2137 | qc->scsidone(qc->scsicmd); |
2145 | ata_qc_free(qc); | 2138 | ata_qc_free(qc); |
@@ -2207,17 +2200,15 @@ static void atapi_qc_complete(struct ata_queued_cmd *qc) | |||
2207 | cmd->result = SAM_STAT_CHECK_CONDITION; | 2200 | cmd->result = SAM_STAT_CHECK_CONDITION; |
2208 | atapi_request_sense(qc); | 2201 | atapi_request_sense(qc); |
2209 | return; | 2202 | return; |
2210 | } | 2203 | } else if (unlikely(err_mask)) { |
2211 | |||
2212 | else if (unlikely(err_mask)) | ||
2213 | /* FIXME: not quite right; we don't want the | 2204 | /* FIXME: not quite right; we don't want the |
2214 | * translation of taskfile registers into | 2205 | * translation of taskfile registers into |
2215 | * a sense descriptors, since that's only | 2206 | * a sense descriptors, since that's only |
2216 | * correct for ATA, not ATAPI | 2207 | * correct for ATA, not ATAPI |
2217 | */ | 2208 | */ |
2209 | qc->ap->ops->tf_read(qc->ap, &qc->tf); | ||
2218 | ata_gen_ata_desc_sense(qc); | 2210 | ata_gen_ata_desc_sense(qc); |
2219 | 2211 | } else { | |
2220 | else { | ||
2221 | u8 *scsicmd = cmd->cmnd; | 2212 | u8 *scsicmd = cmd->cmnd; |
2222 | 2213 | ||
2223 | if ((scsicmd[0] == INQUIRY) && ((scsicmd[1] & 0x03) == 0)) { | 2214 | if ((scsicmd[0] == INQUIRY) && ((scsicmd[1] & 0x03) == 0)) { |