vserver 1.9.3
[linux-2.6.git] / include / asm-alpha / jensen.h
index 7e6c35b..964b06e 100644 (file)
@@ -200,8 +200,9 @@ __EXTERN_INLINE void jensen_outl(u32 b, unsigned long addr)
  * Memory functions.
  */
 
-__EXTERN_INLINE u8 jensen_readb(unsigned long addr)
+__EXTERN_INLINE u8 jensen_readb(const volatile void __iomem *xaddr)
 {
+       unsigned long addr = (unsigned long) xaddr;
        long result;
 
        jensen_set_hae(addr);
@@ -211,8 +212,9 @@ __EXTERN_INLINE u8 jensen_readb(unsigned long addr)
        return 0xffUL & result;
 }
 
-__EXTERN_INLINE u16 jensen_readw(unsigned long addr)
+__EXTERN_INLINE u16 jensen_readw(const volatile void __iomem *xaddr)
 {
+       unsigned long addr = (unsigned long) xaddr;
        long result;
 
        jensen_set_hae(addr);
@@ -222,15 +224,17 @@ __EXTERN_INLINE u16 jensen_readw(unsigned long addr)
        return 0xffffUL & result;
 }
 
-__EXTERN_INLINE u32 jensen_readl(unsigned long addr)
+__EXTERN_INLINE u32 jensen_readl(const volatile void __iomem *xaddr)
 {
+       unsigned long addr = (unsigned long) xaddr;
        jensen_set_hae(addr);
        addr &= JENSEN_HAE_MASK;
        return *(vuip) ((addr << 7) + EISA_MEM + 0x60);
 }
 
-__EXTERN_INLINE u64 jensen_readq(unsigned long addr)
+__EXTERN_INLINE u64 jensen_readq(const volatile void __iomem *xaddr)
 {
+       unsigned long addr = (unsigned long) xaddr;
        unsigned long r0, r1;
 
        jensen_set_hae(addr);
@@ -241,29 +245,33 @@ __EXTERN_INLINE u64 jensen_readq(unsigned long addr)
        return r1 << 32 | r0;
 }
 
-__EXTERN_INLINE void jensen_writeb(u8 b, unsigned long addr)
+__EXTERN_INLINE void jensen_writeb(u8 b, volatile void __iomem *xaddr)
 {
+       unsigned long addr = (unsigned long) xaddr;
        jensen_set_hae(addr);
        addr &= JENSEN_HAE_MASK;
        *(vuip) ((addr << 7) + EISA_MEM + 0x00) = b * 0x01010101;
 }
 
-__EXTERN_INLINE void jensen_writew(u16 b, unsigned long addr)
+__EXTERN_INLINE void jensen_writew(u16 b, volatile void __iomem *xaddr)
 {
+       unsigned long addr = (unsigned long) xaddr;
        jensen_set_hae(addr);
        addr &= JENSEN_HAE_MASK;
        *(vuip) ((addr << 7) + EISA_MEM + 0x20) = b * 0x00010001;
 }
 
-__EXTERN_INLINE void jensen_writel(u32 b, unsigned long addr)
+__EXTERN_INLINE void jensen_writel(u32 b, volatile void __iomem *xaddr)
 {
+       unsigned long addr = (unsigned long) xaddr;
        jensen_set_hae(addr);
        addr &= JENSEN_HAE_MASK;
        *(vuip) ((addr << 7) + EISA_MEM + 0x60) = b;
 }
 
-__EXTERN_INLINE void jensen_writeq(u64 b, unsigned long addr)
+__EXTERN_INLINE void jensen_writeq(u64 b, volatile void __iomem *xaddr)
 {
+       unsigned long addr = (unsigned long) xaddr;
        jensen_set_hae(addr);
        addr &= JENSEN_HAE_MASK;
        addr = (addr << 7) + EISA_MEM + 0x60;
@@ -271,15 +279,15 @@ __EXTERN_INLINE void jensen_writeq(u64 b, unsigned long addr)
        *(vuip) (addr + (4 << 7)) = b >> 32;
 }
 
-__EXTERN_INLINE unsigned long jensen_ioremap(unsigned long addr, 
-                                            unsigned long size)
+__EXTERN_INLINE void __iomem *jensen_ioportmap(unsigned long addr)
 {
-       return addr;
+       return (void __iomem *)addr;
 }
 
-__EXTERN_INLINE void jensen_iounmap(unsigned long addr)
+__EXTERN_INLINE void __iomem *jensen_ioremap(unsigned long addr,
+                                            unsigned long size)
 {
-       return;
+       return (void __iomem *)(addr + 0x100000000ul);
 }
 
 __EXTERN_INLINE int jensen_is_ioaddr(unsigned long addr)
@@ -287,39 +295,46 @@ __EXTERN_INLINE int jensen_is_ioaddr(unsigned long addr)
        return (long)addr >= 0;
 }
 
-#undef vuip
+__EXTERN_INLINE int jensen_is_mmio(const volatile void __iomem *addr)
+{
+       return (unsigned long)addr >= 0x100000000ul;
+}
 
-#ifdef __WANT_IO_DEF
-
-#define __inb          jensen_inb
-#define __inw          jensen_inw
-#define __inl          jensen_inl
-#define __outb         jensen_outb
-#define __outw         jensen_outw
-#define __outl         jensen_outl
-#define __readb                jensen_readb
-#define __readw                jensen_readw
-#define __writeb       jensen_writeb
-#define __writew       jensen_writew
-#define __readl                jensen_readl
-#define __readq                jensen_readq
-#define __writel       jensen_writel
-#define __writeq       jensen_writeq
-#define __ioremap      jensen_ioremap
-#define __iounmap(a)   jensen_iounmap((unsigned long)a)
-#define __is_ioaddr    jensen_is_ioaddr
+/* New-style ioread interface.  All the routines are so ugly for Jensen
+   that it doesn't make sense to merge them.  */
+
+#define IOPORT(OS, NS)                                                 \
+__EXTERN_INLINE unsigned int jensen_ioread##NS(void __iomem *xaddr)    \
+{                                                                      \
+       if (jensen_is_mmio(xaddr))                                      \
+               return jensen_read##OS(xaddr - 0x100000000ul);          \
+       else                                                            \
+               return jensen_in##OS((unsigned long)xaddr);             \
+}                                                                      \
+__EXTERN_INLINE void jensen_iowrite##NS(u##NS b, void __iomem *xaddr)  \
+{                                                                      \
+       if (jensen_is_mmio(xaddr))                                      \
+               jensen_write##OS(b, xaddr - 0x100000000ul);             \
+       else                                                            \
+               jensen_out##OS(b, (unsigned long)xaddr);                \
+}
 
-/*
- * The above have so much overhead that it probably doesn't make
- * sense to have them inlined (better icache behaviour).
- */
-#define inb(port) \
-(__builtin_constant_p((port))?__inb(port):_inb(port))
+IOPORT(b, 8)
+IOPORT(w, 16)
+IOPORT(l, 32)
 
-#define outb(x, port) \
-(__builtin_constant_p((port))?__outb((x),(port)):_outb((x),(port)))
+#undef IOPORT
+
+#undef vuip
 
-#endif /* __WANT_IO_DEF */
+#undef __IO_PREFIX
+#define __IO_PREFIX            jensen
+#define jensen_trivial_rw_bw   0
+#define jensen_trivial_rw_lq   0
+#define jensen_trivial_io_bw   0
+#define jensen_trivial_io_lq   0
+#define jensen_trivial_iounmap 1
+#include <asm/io_trivial.h>
 
 #ifdef __IO_EXTERN_INLINE
 #undef __EXTERN_INLINE