X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=include%2Fasm-alpha%2Fjensen.h;h=964b06ead43b07ec12bd56d54cbcbb967b6b367c;hb=c7b5ebbddf7bcd3651947760f423e3783bbe6573;hp=7e6c35b146c3d56dd382429ecd2298c03ef9148a;hpb=a2c21200f1c81b08cb55e417b68150bba439b646;p=linux-2.6.git diff --git a/include/asm-alpha/jensen.h b/include/asm-alpha/jensen.h index 7e6c35b14..964b06ead 100644 --- a/include/asm-alpha/jensen.h +++ b/include/asm-alpha/jensen.h @@ -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 #ifdef __IO_EXTERN_INLINE #undef __EXTERN_INLINE