summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJens Axboe <axboe@suse.de>2002-10-03 20:43:42 -0700
committerLinus Torvalds <torvalds@penguin.transmeta.com>2002-10-03 20:43:42 -0700
commit20ddfc0047bd762ed32ec42e50b5a14bad02728d (patch)
treeb78c701e15af85929900decfe704c3f07bb44042
parent6cd5b33c5c0955eb251477dda6373c192d3abb1e (diff)
[PATCH] remove _P/_p delaying iops
Lets kill these off for good. o Remove OUT_BYTE/IN_BYTE and variants. We defaulted to the fast ones even before o Add read barrier for ppc, it needs it
-rw-r--r--drivers/ide/ide-iops.c182
-rw-r--r--drivers/ide/ide.c10
-rw-r--r--include/linux/ide.h55
3 files changed, 90 insertions, 157 deletions
diff --git a/drivers/ide/ide-iops.c b/drivers/ide/ide-iops.c
index 19304b007aad..353e71f6eef7 100644
--- a/drivers/ide/ide-iops.c
+++ b/drivers/ide/ide-iops.c
@@ -32,135 +32,156 @@
#include <asm/bitops.h>
-static inline u8 ide_inb (u32 port)
+static u8 ide_inb (u32 port)
{
- return (u8) IN_BYTE(port);
+ return (u8) inb(port);
}
-static inline u8 ide_inb_p (u32 port)
+static u16 ide_inw (u32 port)
{
- return (u8) IN_BYTE_P(port);
+ return (u16) inw(port);
}
-static inline u16 ide_inw (u32 port)
+static void ide_insw (u32 port, void *addr, u32 count)
{
- return (u16) IN_WORD(port);
+ return insw(port, addr, count);
}
-static inline u16 ide_inw_p (u32 port)
+static u32 ide_inl (u32 port)
{
- return (u16) IN_WORD_P(port);
+ return (u32) inl(port);
}
-static inline void ide_insw (u32 port, void *addr, u32 count)
+static void ide_insl (u32 port, void *addr, u32 count)
{
- while (count--) { *(u16 *)addr = IN_WORD(port); addr += 2; }
+ insl(port, addr, count);
}
-static inline void ide_insw_p (u32 port, void *addr, u32 count)
+static void ide_outb (u8 addr, u32 port)
{
- while (count--) { *(u16 *)addr = IN_WORD_P(port); addr += 2; }
+ outb(addr, port);
}
-static inline u32 ide_inl (u32 port)
+static void ide_outw (u16 addr, u32 port)
{
- return (u32) IN_LONG(port);
+ outw(addr, port);
}
-static inline u32 ide_inl_p (u32 port)
+static void ide_outsw (u32 port, void *addr, u32 count)
{
- return (u32) IN_LONG_P(port);
+ outsw(port, addr, count);
}
-static inline void ide_insl (u32 port, void *addr, u32 count)
+static void ide_outl (u32 addr, u32 port)
{
- ide_insw(port, addr, (count)<<1);
-// while (count--) { *(u32 *)addr = IN_LONG(port); addr += 4; }
+ outl(addr, port);
}
-static inline void ide_insl_p (u32 port, void *addr, u32 count)
+static void ide_outsl (u32 port, void *addr, u32 count)
{
- ide_insw_p(port, addr, (count)<<1);
-// while (count--) { *(u32 *)addr = IN_LONG(port); addr += 4; }
+ return outsl(port, addr, count);
}
-static inline void ide_outb (u8 addr, u32 port)
+void default_hwif_iops (ide_hwif_t *hwif)
{
- OUT_BYTE(addr, port);
+ hwif->OUTB = ide_outb;
+ hwif->OUTW = ide_outw;
+ hwif->OUTL = ide_outl;
+ hwif->OUTSW = ide_outsw;
+ hwif->OUTSL = ide_outsl;
+ hwif->INB = ide_inb;
+ hwif->INW = ide_inw;
+ hwif->INL = ide_inl;
+ hwif->INSW = ide_insw;
+ hwif->INSL = ide_insl;
}
-static inline void ide_outb_p (u8 addr, u32 port)
+EXPORT_SYMBOL(default_hwif_iops);
+
+static u8 ide_mm_inb (u32 port)
{
- OUT_BYTE_P(addr, port);
+ return (u8) readb(port);
}
-static inline void ide_outw (u16 addr, u32 port)
+static u16 ide_mm_inw (u32 port)
{
- OUT_WORD(addr, port);
+ return (u16) readw(port);
}
-static inline void ide_outw_p (u16 addr, u32 port)
+static void ide_mm_insw (u32 port, void *addr, u32 count)
{
- OUT_WORD_P(addr, port);
+#ifdef CONFIG_PPC
+ /* Can we move the barrier out of the loop ? */
+ while (count--) { *(u16 *)addr = __raw_readw(port); iobarrier_r(); addr += 2; }
+#else /* everything else is sane benh */
+ while (count--) { *(u16 *)addr = readw(port); addr += 2; }
+#endif
}
-static inline void ide_outsw (u32 port, void *addr, u32 count)
+static u32 ide_mm_inl (u32 port)
{
- while (count--) { OUT_WORD(*(u16 *)addr, port); addr += 2; }
+ return (u32) readl(port);
}
-static inline void ide_outsw_p (u32 port, void *addr, u32 count)
+static void ide_mm_insl (u32 port, void *addr, u32 count)
{
- while (count--) { OUT_WORD_P(*(u16 *)addr, port); addr += 2; }
+#ifdef CONFIG_PPC
+ /* Can we move the barrier out of the loop ? */
+ while (count--) { *(u32 *)addr = __raw_readl(port); iobarrier_r(); addr += 4; }
+#else /* everything else is sane benh */
+ while (count--) { *(u32 *)addr = readl(port); addr += 4; }
+#endif
}
-static inline void ide_outl (u32 addr, u32 port)
+static void ide_mm_outb (u8 value, u32 port)
{
- OUT_LONG(addr, port);
+ writeb(value, port);
}
-static inline void ide_outl_p (u32 addr, u32 port)
+static void ide_mm_outw (u16 value, u32 port)
{
- OUT_LONG_P(addr, port);
+ writew(value, port);
}
-static inline void ide_outsl (u32 port, void *addr, u32 count)
+static void ide_mm_outsw (u32 port, void *addr, u32 count)
{
- ide_outsw(port, addr, (count)<<1);
-// while (count--) { OUT_LONG(*(u32 *)addr, port); addr += 4; }
+#ifdef CONFIG_PPC
+ /* Can we move the barrier out of the loop ? */
+ while (count--) { __raw_writew(*(u16 *)addr, port); iobarrier_w(); addr += 2; }
+#else /* everything else is sane benh */
+ while (count--) { writew(*(u16 *)addr, port); addr += 2; }
+#endif
}
-static inline void ide_outsl_p (u32 port, void *addr, u32 count)
+static void ide_mm_outl (u32 value, u32 port)
{
- ide_outsw_p(port, addr, (count)<<1);
-// while (count--) { OUT_LONG_P(*(u32 *)addr, port); addr += 4; }
+ writel(value, port);
}
-void default_hwif_iops (ide_hwif_t *hwif)
+static void ide_mm_outsl (u32 port, void *addr, u32 count)
{
- hwif->OUTB = ide_outb;
- hwif->OUTBP = ide_outb_p;
- hwif->OUTW = ide_outw;
- hwif->OUTWP = ide_outw_p;
- hwif->OUTL = ide_outl;
- hwif->OUTLP = ide_outl_p;
- hwif->OUTSW = ide_outsw;
- hwif->OUTSWP = ide_outsw_p;
- hwif->OUTSL = ide_outsl;
- hwif->OUTSLP = ide_outsl_p;
- hwif->INB = ide_inb;
- hwif->INBP = ide_inb_p;
- hwif->INW = ide_inw;
- hwif->INWP = ide_inw_p;
- hwif->INL = ide_inl;
- hwif->INLP = ide_inl_p;
- hwif->INSW = ide_insw;
- hwif->INSWP = ide_insw_p;
- hwif->INSL = ide_insl;
- hwif->INSLP = ide_insl_p;
+#ifdef CONFIG_PPC
+ while (count--) { __raw_writel(*(u32 *)addr, port); iobarrier_w(); addr += 4; }
+#else /* everything else is sane benh */
+ while (count--) { writel(*(u32 *)addr, port); addr += 4; }
+#endif
}
-EXPORT_SYMBOL(default_hwif_iops);
+void default_hwif_mmiops (ide_hwif_t *hwif)
+{
+ hwif->OUTB = ide_mm_outb;
+ hwif->OUTW = ide_mm_outw;
+ hwif->OUTL = ide_mm_outl;
+ hwif->OUTSW = ide_mm_outsw;
+ hwif->OUTSL = ide_mm_outsl;
+ hwif->INB = ide_mm_inb;
+ hwif->INW = ide_mm_inw;
+ hwif->INL = ide_mm_inl;
+ hwif->INSW = ide_mm_insw;
+ hwif->INSL = ide_mm_insl;
+}
+
+EXPORT_SYMBOL(default_hwif_mmiops);
void default_hwif_transport (ide_hwif_t *hwif)
{
@@ -217,7 +238,6 @@ void QUIRK_LIST (ide_drive_t *drive)
EXPORT_SYMBOL(QUIRK_LIST);
-#if SUPPORT_VLB_SYNC
/*
* Some localbus EIDE interfaces require a special access sequence
* when using 32-bit I/O instructions to transfer data. We call this
@@ -233,7 +253,6 @@ void ata_vlb_sync (ide_drive_t *drive, ide_ioreg_t port)
}
EXPORT_SYMBOL(ata_vlb_sync);
-#endif /* SUPPORT_VLB_SYNC */
/*
* This is used for most PIO data transfers *from* the IDE interface
@@ -244,7 +263,6 @@ void ata_input_data (ide_drive_t *drive, void *buffer, u32 wcount)
u8 io_32bit = drive->io_32bit;
if (io_32bit) {
-#if SUPPORT_VLB_SYNC
if (io_32bit & 2) {
unsigned long flags;
local_irq_save(flags);
@@ -252,19 +270,9 @@ void ata_input_data (ide_drive_t *drive, void *buffer, u32 wcount)
hwif->INSL(IDE_DATA_REG, buffer, wcount);
local_irq_restore(flags);
} else
-#endif /* SUPPORT_VLB_SYNC */
hwif->INSL(IDE_DATA_REG, buffer, wcount);
} else {
-#if SUPPORT_SLOW_DATA_PORTS
- if (drive->slow) {
- u16 *ptr = (u16 *) buffer;
- while (wcount--) {
- *ptr++ = hwif->INWP(IDE_DATA_REG);
- *ptr++ = hwif->INWP(IDE_DATA_REG);
- }
- } else
-#endif /* SUPPORT_SLOW_DATA_PORTS */
- hwif->INSW(IDE_DATA_REG, buffer, wcount<<1);
+ hwif->INSW(IDE_DATA_REG, buffer, wcount<<1);
}
}
@@ -279,7 +287,6 @@ void ata_output_data (ide_drive_t *drive, void *buffer, u32 wcount)
u8 io_32bit = drive->io_32bit;
if (io_32bit) {
-#if SUPPORT_VLB_SYNC
if (io_32bit & 2) {
unsigned long flags;
local_irq_save(flags);
@@ -287,19 +294,9 @@ void ata_output_data (ide_drive_t *drive, void *buffer, u32 wcount)
hwif->OUTSL(IDE_DATA_REG, buffer, wcount);
local_irq_restore(flags);
} else
-#endif /* SUPPORT_VLB_SYNC */
hwif->OUTSL(IDE_DATA_REG, buffer, wcount);
} else {
-#if SUPPORT_SLOW_DATA_PORTS
- if (drive->slow) {
- u16 *ptr = (u16 *) buffer;
- while (wcount--) {
- hwif->OUTWP(*ptr++, IDE_DATA_REG);
- hwif->OUTWP(*ptr++, IDE_DATA_REG);
- }
- } else
-#endif /* SUPPORT_SLOW_DATA_PORTS */
- hwif->OUTSW(IDE_DATA_REG, buffer, wcount<<1);
+ hwif->OUTSW(IDE_DATA_REG, buffer, wcount<<1);
}
}
@@ -312,6 +309,7 @@ EXPORT_SYMBOL(ata_output_data);
* so if an odd bytecount is specified, be sure that there's at least one
* extra byte allocated for the buffer.
*/
+
void atapi_input_bytes (ide_drive_t *drive, void *buffer, u32 bytecount)
{
ide_hwif_t *hwif = HWIF(drive);
diff --git a/drivers/ide/ide.c b/drivers/ide/ide.c
index f70e0f363410..acc3d795340e 100644
--- a/drivers/ide/ide.c
+++ b/drivers/ide/ide.c
@@ -1945,24 +1945,14 @@ void ide_unregister (unsigned int index)
hwif->OUTB = old_hwif.OUTB;
hwif->OUTW = old_hwif.OUTW;
hwif->OUTL = old_hwif.OUTL;
- hwif->OUTBP = old_hwif.OUTBP;
- hwif->OUTWP = old_hwif.OUTWP;
- hwif->OUTLP = old_hwif.OUTLP;
hwif->OUTSW = old_hwif.OUTSW;
- hwif->OUTSWP = old_hwif.OUTSWP;
hwif->OUTSL = old_hwif.OUTSL;
- hwif->OUTSLP = old_hwif.OUTSLP;
hwif->INB = old_hwif.INB;
hwif->INW = old_hwif.INW;
hwif->INL = old_hwif.INL;
- hwif->INBP = old_hwif.INBP;
- hwif->INWP = old_hwif.INWP;
- hwif->INLP = old_hwif.INLP;
hwif->INSW = old_hwif.INSW;
- hwif->INSWP = old_hwif.INSWP;
hwif->INSL = old_hwif.INSL;
- hwif->INSLP = old_hwif.INSLP;
#endif
hwif->mmio = old_hwif.mmio;
diff --git a/include/linux/ide.h b/include/linux/ide.h
index 74fff672eaef..7b8ebfe2c8dd 100644
--- a/include/linux/ide.h
+++ b/include/linux/ide.h
@@ -302,24 +302,14 @@ typedef struct ide_io_ops_s {
void (*OUTB)(u8 addr, u32 port);
void (*OUTW)(u16 addr, u32 port);
void (*OUTL)(u32 addr, u32 port);
- void (*OUTBP)(u8 addr, u32 port);
- void (*OUTWP)(u16 addr, u32 port);
- void (*OUTLP)(u32 addr, u32 port);
void (*OUTSW)(u32 port, void *addr, u32 count);
- void (*OUTSWP)(u32 port, void *addr, u32 count);
void (*OUTSL)(u32 port, void *addr, u32 count);
- void (*OUTSLP)(u32 port, void *addr, u32 count);
u8 (*INB)(u32 port);
u16 (*INW)(u32 port);
u32 (*INL)(u32 port);
- u8 (*INBP)(u32 port);
- u16 (*INWP)(u32 port);
- u32 (*INLP)(u32 port);
void (*INSW)(u32 port, void *addr, u32 count);
- void (*INSWP)(u32 port, void *addr, u32 count);
void (*INSL)(u32 port, void *addr, u32 count);
- void (*INSLP)(u32 port, void *addr, u32 count);
} ide_io_ops_t;
/*
@@ -375,41 +365,6 @@ extern int ide_irq_lock;
#endif /* IDE_ARCH_LOCK */
/*
- * If the arch-dependant ide.h did not declare/define any OUT_BYTE
- * or IN_BYTE functions, we make some defaults here.
- */
-
-#ifndef HAVE_ARCH_OUT_BYTE
-# ifdef REALLY_FAST_IO
-# define OUT_BYTE(b,p) outb((b),(p))
-# define OUT_WORD(w,p) outw((w),(p))
-# define OUT_LONG(l,p) outl((l),(p))
-# else
-# define OUT_BYTE(b,p) outb_p((b),(p))
-# define OUT_WORD(w,p) outw_p((w),(p))
-# define OUT_LONG(l,p) outl_p((l),(p))
-# endif
-# define OUT_BYTE_P(b,p) outb_p((b),(p))
-# define OUT_WORD_P(w,p) outw_p((w),(p))
-# define OUT_LONG_P(l,p) outl_p((l),(p))
-#endif
-
-#ifndef HAVE_ARCH_IN_BYTE
-# ifdef REALLY_FAST_IO
-# define IN_BYTE(p) (u8) inb(p)
-# define IN_WORD(p) (u16) inw(p)
-# define IN_LONG(p) (u32) inl(p)
-# else
-# define IN_BYTE(p) (u8) inb_p(p)
-# define IN_WORD(p) (u16) inw_p(p)
-# define IN_LONG(p) (u32) inl_p(p)
-# endif
-# define IN_BYTE_P(p) (u8) inb_p(p)
-# define IN_WORD_P(p) (u16) inw_p(p)
-# define IN_LONG_P(p) (u32) inl_p(p)
-#endif
-
-/*
* Now for the data we need to maintain per-drive: ide_drive_t
*/
@@ -1011,24 +966,14 @@ typedef struct hwif_s {
void (*OUTB)(u8 addr, u32 port);
void (*OUTW)(u16 addr, u32 port);
void (*OUTL)(u32 addr, u32 port);
- void (*OUTBP)(u8 addr, u32 port);
- void (*OUTWP)(u16 addr, u32 port);
- void (*OUTLP)(u32 addr, u32 port);
void (*OUTSW)(u32 port, void *addr, u32 count);
- void (*OUTSWP)(u32 port, void *addr, u32 count);
void (*OUTSL)(u32 port, void *addr, u32 count);
- void (*OUTSLP)(u32 port, void *addr, u32 count);
u8 (*INB)(u32 port);
u16 (*INW)(u32 port);
u32 (*INL)(u32 port);
- u8 (*INBP)(u32 port);
- u16 (*INWP)(u32 port);
- u32 (*INLP)(u32 port);
void (*INSW)(u32 port, void *addr, u32 count);
- void (*INSWP)(u32 port, void *addr, u32 count);
void (*INSL)(u32 port, void *addr, u32 count);
- void (*INSLP)(u32 port, void *addr, u32 count);
#endif
/* dma physical region descriptor table (cpu view) */