sata_promise: issue ATAPI commands as normal packets
authorMikael Pettersson <mikpe@it.uu.se>
Sat, 13 Jan 2007 20:31:05 +0000 (21:31 +0100)
committerJeff Garzik <jeff@garzik.org>
Fri, 9 Feb 2007 22:39:34 +0000 (17:39 -0500)
commit4113bb6b67ced963b3269a72f335dd278543b56d
treeda9fc29744ac5e02cb95e7652c059f0217cffcf3
parent73fd456b2dd770ab4fcf14b9d45b7482237a2cf7
sata_promise: issue ATAPI commands as normal packets

This patch (against libata #upstream + the ATAPI cleanup patch)
reimplements sata_promise's ATAPI support to format ATAPI DMA
commands as normal packets, and to issue them via the hardware's
normal packet machinery.

It turns out that the only reason for issuing ATAPI DMA
commands via the pdc_issue_atapi_pkt_cmd() procedure was to
perform two interrupt-fiddling steps for ATA_DFLAG_CDB_INTR
devices. But these steps aren't needed because sata_promise
sets ATA_FLAG_PIO_POLLING, which disables DMA for those devices.
The remaining steps can easily be done in ATA taskfile packets.

Concrete changes:
- pdc_atapi_dma_pkt() is extended to program all packet setup
  steps, and not just contain the CDB; the sequence of steps
  exactly mirrors what pdc_issue_atapi_pkt_cmd() did
- pdc_atapi_dma_pkt() needed more parameters: simplify it by
  just passing 'qc' and having it extract the data it needs
- pdc_issue_atai_pkt_cmd() and its two helper procedures
  pdc_wait_for_drq() and pdc_wait_on_busy() are removed

Tested on first- and second-generation chips, SATAPI and PATAPI,
with no observable regressions.

Signed-off-by: Mikael Pettersson <mikpe@it.uu.se>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
drivers/ata/sata_promise.c