libata: call ata_check_atapi_dma() with qc better prepared
In atapi_xlat(), prepare qc better before calling ata_check_atapi_dma() such that ata_check_atapi_dma() can use info from qc. While at it, reformat weird looking if/else block in the function. Signed-off-by: Tejun Heo <htejun@gmail.com> Signed-off-by: Jeff Garzik <jeff@garzik.org>
This commit is contained in:
@@ -2384,11 +2384,6 @@ static unsigned int atapi_xlat(struct ata_queued_cmd *qc)
|
|||||||
int using_pio = (dev->flags & ATA_DFLAG_PIO);
|
int using_pio = (dev->flags & ATA_DFLAG_PIO);
|
||||||
int nodata = (scmd->sc_data_direction == DMA_NONE);
|
int nodata = (scmd->sc_data_direction == DMA_NONE);
|
||||||
|
|
||||||
if (!using_pio)
|
|
||||||
/* Check whether ATAPI DMA is safe */
|
|
||||||
if (ata_check_atapi_dma(qc))
|
|
||||||
using_pio = 1;
|
|
||||||
|
|
||||||
memset(qc->cdb, 0, dev->cdb_len);
|
memset(qc->cdb, 0, dev->cdb_len);
|
||||||
memcpy(qc->cdb, scmd->cmnd, scmd->cmd_len);
|
memcpy(qc->cdb, scmd->cmnd, scmd->cmd_len);
|
||||||
|
|
||||||
@@ -2401,19 +2396,22 @@ static unsigned int atapi_xlat(struct ata_queued_cmd *qc)
|
|||||||
}
|
}
|
||||||
|
|
||||||
qc->tf.command = ATA_CMD_PACKET;
|
qc->tf.command = ATA_CMD_PACKET;
|
||||||
|
qc->nbytes = scmd->request_bufflen;
|
||||||
|
|
||||||
|
/* check whether ATAPI DMA is safe */
|
||||||
|
if (!using_pio && ata_check_atapi_dma(qc))
|
||||||
|
using_pio = 1;
|
||||||
|
|
||||||
/* no data, or PIO data xfer */
|
|
||||||
if (using_pio || nodata) {
|
if (using_pio || nodata) {
|
||||||
|
/* no data, or PIO data xfer */
|
||||||
if (nodata)
|
if (nodata)
|
||||||
qc->tf.protocol = ATA_PROT_ATAPI_NODATA;
|
qc->tf.protocol = ATA_PROT_ATAPI_NODATA;
|
||||||
else
|
else
|
||||||
qc->tf.protocol = ATA_PROT_ATAPI;
|
qc->tf.protocol = ATA_PROT_ATAPI;
|
||||||
qc->tf.lbam = (8 * 1024) & 0xff;
|
qc->tf.lbam = (8 * 1024) & 0xff;
|
||||||
qc->tf.lbah = (8 * 1024) >> 8;
|
qc->tf.lbah = (8 * 1024) >> 8;
|
||||||
}
|
} else {
|
||||||
|
/* DMA data xfer */
|
||||||
/* DMA data xfer */
|
|
||||||
else {
|
|
||||||
qc->tf.protocol = ATA_PROT_ATAPI_DMA;
|
qc->tf.protocol = ATA_PROT_ATAPI_DMA;
|
||||||
qc->tf.feature |= ATAPI_PKT_DMA;
|
qc->tf.feature |= ATAPI_PKT_DMA;
|
||||||
|
|
||||||
@@ -2422,8 +2420,6 @@ static unsigned int atapi_xlat(struct ata_queued_cmd *qc)
|
|||||||
qc->tf.feature |= ATAPI_DMADIR;
|
qc->tf.feature |= ATAPI_DMADIR;
|
||||||
}
|
}
|
||||||
|
|
||||||
qc->nbytes = scmd->request_bufflen;
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user