summaryrefslogtreecommitdiffstats
path: root/drivers/ata/libata-sff.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/ata/libata-sff.c')
-rw-r--r--drivers/ata/libata-sff.c29
1 files changed, 15 insertions, 14 deletions
diff --git a/drivers/ata/libata-sff.c b/drivers/ata/libata-sff.c
index 051b6158d1b7..4441b5c5e4fb 100644
--- a/drivers/ata/libata-sff.c
+++ b/drivers/ata/libata-sff.c
@@ -542,7 +542,7 @@ static inline void ata_tf_to_host(struct ata_port *ap,
542 542
543/** 543/**
544 * ata_sff_data_xfer - Transfer data by PIO 544 * ata_sff_data_xfer - Transfer data by PIO
545 * @dev: device to target 545 * @qc: queued command
546 * @buf: data buffer 546 * @buf: data buffer
547 * @buflen: buffer length 547 * @buflen: buffer length
548 * @rw: read/write 548 * @rw: read/write
@@ -555,10 +555,10 @@ static inline void ata_tf_to_host(struct ata_port *ap,
555 * RETURNS: 555 * RETURNS:
556 * Bytes consumed. 556 * Bytes consumed.
557 */ 557 */
558unsigned int ata_sff_data_xfer(struct ata_device *dev, unsigned char *buf, 558unsigned int ata_sff_data_xfer(struct ata_queued_cmd *qc, unsigned char *buf,
559 unsigned int buflen, int rw) 559 unsigned int buflen, int rw)
560{ 560{
561 struct ata_port *ap = dev->link->ap; 561 struct ata_port *ap = qc->dev->link->ap;
562 void __iomem *data_addr = ap->ioaddr.data_addr; 562 void __iomem *data_addr = ap->ioaddr.data_addr;
563 unsigned int words = buflen >> 1; 563 unsigned int words = buflen >> 1;
564 564
@@ -595,7 +595,7 @@ EXPORT_SYMBOL_GPL(ata_sff_data_xfer);
595 595
596/** 596/**
597 * ata_sff_data_xfer32 - Transfer data by PIO 597 * ata_sff_data_xfer32 - Transfer data by PIO
598 * @dev: device to target 598 * @qc: queued command
599 * @buf: data buffer 599 * @buf: data buffer
600 * @buflen: buffer length 600 * @buflen: buffer length
601 * @rw: read/write 601 * @rw: read/write
@@ -610,16 +610,17 @@ EXPORT_SYMBOL_GPL(ata_sff_data_xfer);
610 * Bytes consumed. 610 * Bytes consumed.
611 */ 611 */
612 612
613unsigned int ata_sff_data_xfer32(struct ata_device *dev, unsigned char *buf, 613unsigned int ata_sff_data_xfer32(struct ata_queued_cmd *qc, unsigned char *buf,
614 unsigned int buflen, int rw) 614 unsigned int buflen, int rw)
615{ 615{
616 struct ata_device *dev = qc->dev;
616 struct ata_port *ap = dev->link->ap; 617 struct ata_port *ap = dev->link->ap;
617 void __iomem *data_addr = ap->ioaddr.data_addr; 618 void __iomem *data_addr = ap->ioaddr.data_addr;
618 unsigned int words = buflen >> 2; 619 unsigned int words = buflen >> 2;
619 int slop = buflen & 3; 620 int slop = buflen & 3;
620 621
621 if (!(ap->pflags & ATA_PFLAG_PIO32)) 622 if (!(ap->pflags & ATA_PFLAG_PIO32))
622 return ata_sff_data_xfer(dev, buf, buflen, rw); 623 return ata_sff_data_xfer(qc, buf, buflen, rw);
623 624
624 /* Transfer multiple of 4 bytes */ 625 /* Transfer multiple of 4 bytes */
625 if (rw == READ) 626 if (rw == READ)
@@ -658,7 +659,7 @@ EXPORT_SYMBOL_GPL(ata_sff_data_xfer32);
658 659
659/** 660/**
660 * ata_sff_data_xfer_noirq - Transfer data by PIO 661 * ata_sff_data_xfer_noirq - Transfer data by PIO
661 * @dev: device to target 662 * @qc: queued command
662 * @buf: data buffer 663 * @buf: data buffer
663 * @buflen: buffer length 664 * @buflen: buffer length
664 * @rw: read/write 665 * @rw: read/write
@@ -672,14 +673,14 @@ EXPORT_SYMBOL_GPL(ata_sff_data_xfer32);
672 * RETURNS: 673 * RETURNS:
673 * Bytes consumed. 674 * Bytes consumed.
674 */ 675 */
675unsigned int ata_sff_data_xfer_noirq(struct ata_device *dev, unsigned char *buf, 676unsigned int ata_sff_data_xfer_noirq(struct ata_queued_cmd *qc, unsigned char *buf,
676 unsigned int buflen, int rw) 677 unsigned int buflen, int rw)
677{ 678{
678 unsigned long flags; 679 unsigned long flags;
679 unsigned int consumed; 680 unsigned int consumed;
680 681
681 local_irq_save(flags); 682 local_irq_save(flags);
682 consumed = ata_sff_data_xfer32(dev, buf, buflen, rw); 683 consumed = ata_sff_data_xfer32(qc, buf, buflen, rw);
683 local_irq_restore(flags); 684 local_irq_restore(flags);
684 685
685 return consumed; 686 return consumed;
@@ -723,14 +724,14 @@ static void ata_pio_sector(struct ata_queued_cmd *qc)
723 buf = kmap_atomic(page); 724 buf = kmap_atomic(page);
724 725
725 /* do the actual data transfer */ 726 /* do the actual data transfer */
726 ap->ops->sff_data_xfer(qc->dev, buf + offset, qc->sect_size, 727 ap->ops->sff_data_xfer(qc, buf + offset, qc->sect_size,
727 do_write); 728 do_write);
728 729
729 kunmap_atomic(buf); 730 kunmap_atomic(buf);
730 local_irq_restore(flags); 731 local_irq_restore(flags);
731 } else { 732 } else {
732 buf = page_address(page); 733 buf = page_address(page);
733 ap->ops->sff_data_xfer(qc->dev, buf + offset, qc->sect_size, 734 ap->ops->sff_data_xfer(qc, buf + offset, qc->sect_size,
734 do_write); 735 do_write);
735 } 736 }
736 737
@@ -791,7 +792,7 @@ static void atapi_send_cdb(struct ata_port *ap, struct ata_queued_cmd *qc)
791 DPRINTK("send cdb\n"); 792 DPRINTK("send cdb\n");
792 WARN_ON_ONCE(qc->dev->cdb_len < 12); 793 WARN_ON_ONCE(qc->dev->cdb_len < 12);
793 794
794 ap->ops->sff_data_xfer(qc->dev, qc->cdb, qc->dev->cdb_len, 1); 795 ap->ops->sff_data_xfer(qc, qc->cdb, qc->dev->cdb_len, 1);
795 ata_sff_sync(ap); 796 ata_sff_sync(ap);
796 /* FIXME: If the CDB is for DMA do we need to do the transition delay 797 /* FIXME: If the CDB is for DMA do we need to do the transition delay
797 or is bmdma_start guaranteed to do it ? */ 798 or is bmdma_start guaranteed to do it ? */
@@ -868,14 +869,14 @@ next_sg:
868 buf = kmap_atomic(page); 869 buf = kmap_atomic(page);
869 870
870 /* do the actual data transfer */ 871 /* do the actual data transfer */
871 consumed = ap->ops->sff_data_xfer(dev, buf + offset, 872 consumed = ap->ops->sff_data_xfer(qc, buf + offset,
872 count, rw); 873 count, rw);
873 874
874 kunmap_atomic(buf); 875 kunmap_atomic(buf);
875 local_irq_restore(flags); 876 local_irq_restore(flags);
876 } else { 877 } else {
877 buf = page_address(page); 878 buf = page_address(page);
878 consumed = ap->ops->sff_data_xfer(dev, buf + offset, 879 consumed = ap->ops->sff_data_xfer(qc, buf + offset,
879 count, rw); 880 count, rw);
880 } 881 }
881 882