# This is a BitKeeper generated diff -Nru style patch. # # ChangeSet # 2004/05/13 21:15:42-04:00 jgarzik@redhat.com # [libata] use new ->bmdma_{start,setup} method to properly support ATAPI # diff -Nru a/drivers/scsi/libata-core.c b/drivers/scsi/libata-core.c --- a/drivers/scsi/libata-core.c Thu May 13 21:28:17 2004 +++ b/drivers/scsi/libata-core.c Thu May 13 21:28:17 2004 @@ -2445,7 +2445,7 @@ case ATA_PROT_DMA: ap->ops->tf_load(ap, &qc->tf); /* load tf registers */ - ap->ops->bmdma_setup(qc); /* initiate bmdma */ + ap->ops->bmdma_setup(qc); /* set up bmdma */ ap->ops->bmdma_start(qc); /* initiate bmdma */ break; @@ -2457,6 +2457,13 @@ queue_work(ata_wq, &ap->pio_task); break; + case ATA_PROT_ATAPI: + case ATA_PROT_ATAPI_DMA: + ap->ops->tf_load(ap, &qc->tf); /* load tf registers */ + ap->ops->bmdma_setup(qc); /* set up bmdma */ + queue_work(ata_wq, &ap->packet_task); + break; + default: WARN_ON(1); return -1; @@ -2843,7 +2850,7 @@ /* if we are DMA'ing, irq handler takes over from here */ if (qc->tf.protocol == ATA_PROT_ATAPI_DMA) { - /* FIXME: start DMA here */ + ap->ops->bmdma_start(qc); /* initiate bmdma */ } else { ap->pio_task_state = PIO_ST; queue_work(ata_wq, &ap->pio_task);