gp wrote:
Jeff
I think I may have found an issue in the ATAPI code in the function
atapi_packet_task.
From my testing with the sata_via driver, I have been getting a timeout
when sending the first inquiry command.
Here is the section of code of interest:
/* make sure DRQ is set */
status = ata_chk_status(ap);
if ((status & (ATA_BUSY | ATA_DRQ)) != ATA_DRQ)
goto err_out;
/* send SCSI cdb */
DPRINTK("send cdb\n");
assert(ap->cdb_len >= 12);
ata_data_xfer(ap, qc->cdb, ap->cdb_len, 1);
** Wait is needed here to work correctly
DPRINTK("Wait for a bit\n");
/* if we are DMA'ing, irq handler takes over from here */
if (qc->tf.protocol == ATA_PROT_ATAPI_DMA)
ap->ops->bmdma_start(qc); /* initiate bmdma */
In the test case, the dma transfer is being used. From my perusal of the
ATA spec in section 9.8, it looks like there needs to be a definite
state transition before issuing the bmdma_start.
Yeah, it looks like there needs to be an intrq-wait state in there...
Wanna submit a patch? :)
Jeff
-
To unsubscribe from this list: send the line "unsubscribe linux-ide" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at http://vger.kernel.org/majordomo-info.html