|
Lines 2305-2312
static void atapi_request_sense(struct ata_queued_cmd *qc)
Link Here
|
| 2305 |
qc->tf.feature |= ATAPI_PKT_DMA; |
2305 |
qc->tf.feature |= ATAPI_PKT_DMA; |
| 2306 |
} else { |
2306 |
} else { |
| 2307 |
qc->tf.protocol = ATA_PROT_ATAPI; |
2307 |
qc->tf.protocol = ATA_PROT_ATAPI; |
| 2308 |
qc->tf.lbam = (8 * 1024) & 0xff; |
2308 |
qc->tf.lbam = SCSI_SENSE_BUFFERSIZE; |
| 2309 |
qc->tf.lbah = (8 * 1024) >> 8; |
2309 |
qc->tf.lbah = 0; |
| 2310 |
} |
2310 |
} |
| 2311 |
qc->nbytes = SCSI_SENSE_BUFFERSIZE; |
2311 |
qc->nbytes = SCSI_SENSE_BUFFERSIZE; |
| 2312 |
|
2312 |
|
|
Lines 2415-2420
static unsigned int atapi_xlat(struct ata_queued_cmd *qc)
Link Here
|
| 2415 |
struct ata_device *dev = qc->dev; |
2415 |
struct ata_device *dev = qc->dev; |
| 2416 |
int using_pio = (dev->flags & ATA_DFLAG_PIO); |
2416 |
int using_pio = (dev->flags & ATA_DFLAG_PIO); |
| 2417 |
int nodata = (scmd->sc_data_direction == DMA_NONE); |
2417 |
int nodata = (scmd->sc_data_direction == DMA_NONE); |
|
|
2418 |
unsigned int nbytes; |
| 2418 |
|
2419 |
|
| 2419 |
memset(qc->cdb, 0, dev->cdb_len); |
2420 |
memset(qc->cdb, 0, dev->cdb_len); |
| 2420 |
memcpy(qc->cdb, scmd->cmnd, scmd->cmd_len); |
2421 |
memcpy(qc->cdb, scmd->cmnd, scmd->cmd_len); |
|
Lines 2434-2447
static unsigned int atapi_xlat(struct ata_queued_cmd *qc)
Link Here
|
| 2434 |
if (!using_pio && ata_check_atapi_dma(qc)) |
2435 |
if (!using_pio && ata_check_atapi_dma(qc)) |
| 2435 |
using_pio = 1; |
2436 |
using_pio = 1; |
| 2436 |
|
2437 |
|
|
|
2438 |
/* Some controller variants snoop this value for Packet transfers |
| 2439 |
to do state machine and FIFO management. Thus we want to set it |
| 2440 |
properly, and for DMA where it is effectively meaningless */ |
| 2441 |
nbytes = min(qc->nbytes, (unsigned int)63 * 1024); |
| 2442 |
|
| 2443 |
qc->tf.lbam = (nbytes & 0xFF); |
| 2444 |
qc->tf.lbah = (nbytes >> 8); |
| 2445 |
|
| 2437 |
if (using_pio || nodata) { |
2446 |
if (using_pio || nodata) { |
| 2438 |
/* no data, or PIO data xfer */ |
2447 |
/* no data, or PIO data xfer */ |
| 2439 |
if (nodata) |
2448 |
if (nodata) |
| 2440 |
qc->tf.protocol = ATA_PROT_ATAPI_NODATA; |
2449 |
qc->tf.protocol = ATA_PROT_ATAPI_NODATA; |
| 2441 |
else |
2450 |
else |
| 2442 |
qc->tf.protocol = ATA_PROT_ATAPI; |
2451 |
qc->tf.protocol = ATA_PROT_ATAPI; |
| 2443 |
qc->tf.lbam = (8 * 1024) & 0xff; |
|
|
| 2444 |
qc->tf.lbah = (8 * 1024) >> 8; |
| 2445 |
} else { |
2452 |
} else { |
| 2446 |
/* DMA data xfer */ |
2453 |
/* DMA data xfer */ |
| 2447 |
qc->tf.protocol = ATA_PROT_ATAPI_DMA; |
2454 |
qc->tf.protocol = ATA_PROT_ATAPI_DMA; |
|
Lines 2452-2457
static unsigned int atapi_xlat(struct ata_queued_cmd *qc)
Link Here
|
| 2452 |
qc->tf.feature |= ATAPI_DMADIR; |
2459 |
qc->tf.feature |= ATAPI_DMADIR; |
| 2453 |
} |
2460 |
} |
| 2454 |
|
2461 |
|
|
|
2462 |
|
| 2463 |
/* FIXME: We need to translate 0x05 READ_BLOCK_LIMITS to a MODE_SENSE |
| 2464 |
as ATAPI tape drives don't get this right otherwise */ |
| 2455 |
return 0; |
2465 |
return 0; |
| 2456 |
} |
2466 |
} |
| 2457 |
|
2467 |
|
| 2458 |
- |
|
|