* rename the offset definition to avoid abiguity with the standard ATA IO address * read and write four bytes at once like the original driver does * use writesl() and readsl() which implicitly iterate over the data This patch assumes buflen to be a multiple of four, which is true for ATA devices. ATAPI support is not known, though unlikely, as the original driver always transfers 512 Bytes at once. In doubt, do the right thing and return the number of bytes actually consumed. Signed-off-by: Phil Sutter <n0-1@xxxxxxxxxxx> Acked-by: Sergei Shtyltov <sshtylyov@xxxxxxxxxxxxx> Acked-by: Bartlomiej Zolnierkiewicz <bzolnier@xxxxxxxxx> Acked-by: Florian Fainelli <florian@xxxxxxxxxxx> --- drivers/ata/pata_rb532_cf.c | 14 +++++--------- 1 files changed, 5 insertions(+), 9 deletions(-) diff --git a/drivers/ata/pata_rb532_cf.c b/drivers/ata/pata_rb532_cf.c index c2e6fb9..362af11 100644 --- a/drivers/ata/pata_rb532_cf.c +++ b/drivers/ata/pata_rb532_cf.c @@ -79,18 +79,14 @@ static unsigned int rb532_pata_data_xfer(struct ata_device *adev, unsigned char { struct ata_port *ap = adev->link->ap; void __iomem *ioaddr = ap->ioaddr.data_addr; - int retlen = buflen; - if (write_data) { - for (; buflen > 0; buflen--, buf++) - writeb(*buf, ioaddr); - } else { - for (; buflen > 0; buflen--, buf++) - *buf = readb(ioaddr); - } + if (write_data) + writesl(ioaddr, buf, buflen / sizeof(u32)); + else + readsl(ioaddr, buf, buflen / sizeof(u32)); rb532_pata_finish_io(adev->link->ap); - return retlen; + return buflen - buflen % sizeof(u32); } static void rb532_pata_freeze(struct ata_port *ap) -- 1.5.6.4 -- To unsubscribe from this list: send the line "unsubscribe linux-ide" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html