[PATCH] libata: add pio_data_xfer_noirq
authorAlan Cox <alan@lxorguk.ukuu.org.uk>
Wed, 24 May 2006 13:14:41 +0000 (14:14 +0100)
committerJeff Garzik <jeff@garzik.org>
Sat, 27 May 2006 02:02:23 +0000 (22:02 -0400)
Signed-off-by: Alan Cox <alan@redhat.com>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
drivers/scsi/libata-core.c
include/linux/libata.h

index 074a46e..f19fe66 100644 (file)
@@ -3611,6 +3611,30 @@ void ata_pio_data_xfer(struct ata_device *adev, unsigned char *buf,
        }
 }
 
+/**
+ *     ata_pio_data_xfer_noirq - Transfer data by PIO
+ *     @adev: device to target
+ *     @buf: data buffer
+ *     @buflen: buffer length
+ *     @write_data: read/write
+ *
+ *     Transfer data from/to the device data register by PIO. Do the 
+ *     transfer with interrupts disabled.
+ *
+ *     LOCKING:
+ *     Inherited from caller.
+ */
+
+void ata_pio_data_xfer_noirq(struct ata_device *adev, unsigned char *buf,
+                                   unsigned int buflen, int write_data)
+{
+       unsigned long flags;
+       local_irq_save(flags);
+       ata_pio_data_xfer(adev, buf, buflen, write_data);
+       local_irq_restore(flags);
+}
+
+
 /**
  *     ata_pio_sector - Transfer ATA_SECT_SIZE (512 bytes) of data.
  *     @qc: Command on going
@@ -5675,6 +5699,7 @@ EXPORT_SYMBOL_GPL(ata_host_stop);
 EXPORT_SYMBOL_GPL(ata_interrupt);
 EXPORT_SYMBOL_GPL(ata_mmio_data_xfer);
 EXPORT_SYMBOL_GPL(ata_pio_data_xfer);
+EXPORT_SYMBOL_GPL(ata_pio_data_xfer_noirq);
 EXPORT_SYMBOL_GPL(ata_qc_prep);
 EXPORT_SYMBOL_GPL(ata_noop_qc_prep);
 EXPORT_SYMBOL_GPL(ata_bmdma_setup);
index 9c60b4a..b0ee1c1 100644 (file)
@@ -651,6 +651,8 @@ extern void ata_mmio_data_xfer(struct ata_device *adev, unsigned char *buf,
                               unsigned int buflen, int write_data);
 extern void ata_pio_data_xfer(struct ata_device *adev, unsigned char *buf,
                              unsigned int buflen, int write_data);
+extern void ata_pio_data_xfer_noirq(struct ata_device *adev, unsigned char *buf,
+                             unsigned int buflen, int write_data);
 extern void ata_qc_prep(struct ata_queued_cmd *qc);
 extern void ata_noop_qc_prep(struct ata_queued_cmd *qc);
 extern unsigned int ata_qc_issue_prot(struct ata_queued_cmd *qc);