• Mikael Pettersson's avatar
    sata_promise: issue ATAPI commands as normal packets · 4113bb6b
    Mikael Pettersson authored
    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: default avatarMikael Pettersson <mikpe@it.uu.se>
    Signed-off-by: default avatarJeff Garzik <jeff@garzik.org>
    4113bb6b
sata_promise.c 26.8 KB