linux 2.6.16.38 w/ vs2.0.3-rc1
[linux-2.6.git] / include / asm-alpha / io.h
index f5ae98c..871dd7a 100644 (file)
@@ -3,6 +3,7 @@
 
 #ifdef __KERNEL__
 
+#include <linux/config.h>
 #include <linux/kernel.h>
 #include <asm/compiler.h>
 #include <asm/system.h>
@@ -533,6 +534,9 @@ extern void outsl (unsigned long port, const void *src, unsigned long count);
 #define eth_io_copy_and_sum(skb,src,len,unused) \
   memcpy_fromio((skb)->data,src,len)
 
+#define isa_eth_io_copy_and_sum(skb,src,len,unused) \
+  isa_memcpy_fromio((skb)->data,src,len)
+
 static inline int
 check_signature(const volatile void __iomem *io_addr,
                const unsigned char *signature, int length)
@@ -546,6 +550,87 @@ check_signature(const volatile void __iomem *io_addr,
        return 1;
 }
 
+
+/*
+ * ISA space is mapped to some machine-specific location on Alpha.
+ * Call into the existing hooks to get the address translated.
+ */
+
+static inline u8
+isa_readb(unsigned long offset)
+{
+       void __iomem *addr = ioremap(offset, 1);
+       u8 ret = readb(addr);
+       iounmap(addr);
+       return ret;
+}
+
+static inline u16
+isa_readw(unsigned long offset)
+{
+       void __iomem *addr = ioremap(offset, 2);
+       u16 ret = readw(addr);
+       iounmap(addr);
+       return ret;
+}
+
+static inline u32
+isa_readl(unsigned long offset)
+{
+       void __iomem *addr = ioremap(offset, 2);
+       u32 ret = readl(addr);
+       iounmap(addr);
+       return ret;
+}
+
+static inline void
+isa_writeb(u8 b, unsigned long offset)
+{
+       void __iomem *addr = ioremap(offset, 2);
+       writeb(b, addr);
+       iounmap(addr);
+}
+
+static inline void
+isa_writew(u16 w, unsigned long offset)
+{
+       void __iomem *addr = ioremap(offset, 2);
+       writew(w, addr);
+       iounmap(addr);
+}
+
+static inline void
+isa_writel(u32 l, unsigned long offset)
+{
+       void __iomem *addr = ioremap(offset, 2);
+       writel(l, addr);
+       iounmap(addr);
+}
+
+static inline void
+isa_memset_io(unsigned long offset, u8 val, long n)
+{
+       void __iomem *addr = ioremap(offset, n);
+       memset_io(addr, val, n);
+       iounmap(addr);
+}
+
+static inline void
+isa_memcpy_fromio(void *dest, unsigned long offset, long n)
+{
+       void __iomem *addr = ioremap(offset, n);
+       memcpy_fromio(dest, addr, n);
+       iounmap(addr);
+}
+
+static inline void
+isa_memcpy_toio(unsigned long offset, const void *src, long n)
+{
+       void __iomem *addr = ioremap(offset, n);
+       memcpy_toio(addr, src, n);
+       iounmap(addr);
+}
+
 /*
  * The Alpha Jensen hardware for some rather strange reason puts
  * the RTC clock at 0x170 instead of 0x70. Probably due to some