X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=include%2Fasm-alpha%2Fcore_marvel.h;h=30d55fe7aaf6a60333d9c0b2c4e5ce3925ecb299;hb=c7b5ebbddf7bcd3651947760f423e3783bbe6573;hp=a1f2482cf3a453029c9b4d5cda4d07398a28c5df;hpb=a2c21200f1c81b08cb55e417b68150bba439b646;p=linux-2.6.git diff --git a/include/asm-alpha/core_marvel.h b/include/asm-alpha/core_marvel.h index a1f2482cf..30d55fe7a 100644 --- a/include/asm-alpha/core_marvel.h +++ b/include/asm-alpha/core_marvel.h @@ -325,249 +325,48 @@ struct io7 { * I/O functions. All access through linear space. */ -#define vucp volatile unsigned char * -#define vusp volatile unsigned short * -#define vuip volatile unsigned int * -#define vulp volatile unsigned long * - -#ifdef CONFIG_VGA_HOSE -extern struct pci_controller *pci_vga_hose; - -# define __marvel_is_port_vga(a) \ - (((a) >= 0x3b0) && ((a) < 0x3e0) && ((a) != 0x3b3) && ((a) != 0x3d3)) -# define __marvel_is_mem_vga(a) (((a) >= 0xa0000) && ((a) <= 0xc0000)) -# define FIXUP_IOADDR_VGA(a) do { \ - if (pci_vga_hose && __marvel_is_port_vga(a)) \ - a += pci_vga_hose->io_space->start; \ - } while(0) -#else -# define FIXUP_IOADDR_VGA(a) -#endif - -#define __marvel_is_port_kbd(a) (((a) == 0x60) || ((a) == 0x64)) -#define __marvel_is_port_rtc(a) (((a) == 0x70) || ((a) == 0x71)) - -#define FIXUP_IOADDR_LEGACY(a) - -#define FIXUP_IOADDR(a) do { \ - FIXUP_IOADDR_VGA(a); \ - FIXUP_IOADDR_LEGACY(a); \ - } while(0) - -#if 0 -# define IOBUG(x) printk x -# define IOBUG_FILTER_IOADDR(a, x) \ - if (!__marvel_is_port_kbd(a) && !__marvel_is_port_rtc(a)) IOBUG(x) -#else -# define IOBUG(x) -# define IOBUG_FILTER_IOADDR(a, x) -#endif - -extern u8 __marvel_rtc_io(int write, u8 b, unsigned long addr); -#define __marvel_rtc_inb(a) __marvel_rtc_io(0, 0, (a)) -#define __marvel_rtc_outb(b, a) __marvel_rtc_io(1, (b), (a)) - -__EXTERN_INLINE int marvel_is_ioaddr(unsigned long addr) -{ - return (addr & (1UL << 40)) != 0; /*FIXME - hardwire*/ -} - -__EXTERN_INLINE u8 marvel_inb(unsigned long addr) -{ - FIXUP_IOADDR(addr); - if (!marvel_is_ioaddr(addr)) { - if (__marvel_is_port_kbd(addr)) - return (u8)0; - if (__marvel_is_port_rtc(addr)) - return __marvel_rtc_inb(addr); - IOBUG_FILTER_IOADDR(addr, - ("Bad IO addr %lx - reading -1\n", addr)); - return (u8)-1; - } - return __kernel_ldbu(*(vucp)addr); -} - -__EXTERN_INLINE void marvel_outb(u8 b, unsigned long addr) -{ - FIXUP_IOADDR(addr); - if (!marvel_is_ioaddr(addr)) { - if (__marvel_is_port_rtc(addr)) - return (void)__marvel_rtc_outb(b, addr); - IOBUG_FILTER_IOADDR(addr, - ("Bad IO addr %lx - reading -1\n", addr)); - return; - } - __kernel_stb(b, *(vucp)addr); - mb(); -} - -__EXTERN_INLINE u16 marvel_inw(unsigned long addr) -{ - FIXUP_IOADDR(addr); - if (!marvel_is_ioaddr(addr)) { - IOBUG_FILTER_IOADDR(addr, - ("Bad IO addr %lx - reading -1\n", addr)); - return (u16)-1; - } - return __kernel_ldwu(*(vusp)addr); -} - -__EXTERN_INLINE void marvel_outw(u16 w, unsigned long addr) -{ - FIXUP_IOADDR(addr); - if (!marvel_is_ioaddr(addr)) { - IOBUG_FILTER_IOADDR(addr, - ("Bad IO addr %lx - reading -1\n", addr)); - return; - } - __kernel_stw(w, *(vusp)addr); - mb(); -} - -__EXTERN_INLINE u32 marvel_inl(unsigned long addr) -{ - FIXUP_IOADDR(addr); - if (!marvel_is_ioaddr(addr)) { - IOBUG_FILTER_IOADDR(addr, - ("Bad IO addr %lx - reading -1\n", addr)); - return (u32)-1; - } - return *(vuip)addr; -} - -__EXTERN_INLINE void marvel_outl(u32 l, unsigned long addr) -{ - FIXUP_IOADDR(addr); - if (!marvel_is_ioaddr(addr)) { - IOBUG_FILTER_IOADDR(addr, - ("Bad IO addr %lx - reading -1\n", addr)); - return; - } - *(vuip)addr = l; - mb(); -} - /* * Memory functions. All accesses through linear space. */ -extern unsigned long marvel_ioremap(unsigned long addr, unsigned long size); -extern void marvel_iounmap(unsigned long addr); +#define vucp volatile unsigned char __force * +#define vusp volatile unsigned short __force * -__EXTERN_INLINE u8 marvel_readb(unsigned long addr) -{ - if (!marvel_is_ioaddr(addr)) { - IOBUG(("Bad MEM addr %lx - reading -1\n", addr)); - return (u8)-1; - } - return __kernel_ldbu(*(vucp)addr); -} +extern unsigned int marvel_ioread8(void __iomem *); +extern void marvel_iowrite8(u8 b, void __iomem *); -__EXTERN_INLINE u16 marvel_readw(unsigned long addr) +__EXTERN_INLINE unsigned int marvel_ioread16(void __iomem *addr) { - if (!marvel_is_ioaddr(addr)) { - IOBUG(("Bad MEM addr %lx - reading -1\n", addr)); - return (u16)-1; - } return __kernel_ldwu(*(vusp)addr); } -__EXTERN_INLINE u32 marvel_readl(unsigned long addr) -{ - if (!marvel_is_ioaddr(addr)) { - IOBUG(("Bad MEM addr %lx - reading -1\n", addr)); - return (u32)-1; - } - return *(vuip)addr; -} - -__EXTERN_INLINE u64 marvel_readq(unsigned long addr) +__EXTERN_INLINE void marvel_iowrite16(u16 b, void __iomem *addr) { - if (!marvel_is_ioaddr(addr)) { - IOBUG(("Bad MEM addr %lx - reading -1\n", addr)); - return (u64)-1; - } - return *(vulp)addr; + __kernel_stw(b, *(vusp)addr); } -__EXTERN_INLINE void marvel_writeb(u8 b, unsigned long addr) -{ - if (!marvel_is_ioaddr(addr)) { - IOBUG(("Bad MEM addr %lx - dropping store\n", addr)); - return; - } - __kernel_stb(b, *(vucp)addr); -} - -__EXTERN_INLINE void marvel_writew(u16 w, unsigned long addr) -{ - if (!marvel_is_ioaddr(addr)) { - IOBUG(("Bad MEM addr %lx - dropping store\n", addr)); - return; - } - __kernel_stw(w, *(vusp)addr); -} +extern void __iomem *marvel_ioremap(unsigned long addr, unsigned long size); +extern void marvel_iounmap(volatile void __iomem *addr); +extern void __iomem *marvel_ioportmap (unsigned long addr); -__EXTERN_INLINE void marvel_writel(u32 l, unsigned long addr) -{ - if (!marvel_is_ioaddr(addr)) { - IOBUG(("Bad MEM addr %lx - dropping store\n", addr)); - return; - } - *(vuip)addr = l; -} - -__EXTERN_INLINE void marvel_writeq(u64 q, unsigned long addr) +__EXTERN_INLINE int marvel_is_ioaddr(unsigned long addr) { - if (!marvel_is_ioaddr(addr)) { - IOBUG(("Bad MEM addr %lx - dropping store\n", addr)); - return; - } - *(vulp)addr = q; + return (addr >> 40) & 1; } -#undef FIXUP_IOADDR -#undef FIXUP_IOADDR_LEGACY -#undef FIXUP_IOADDR_VGA +extern int marvel_is_mmio(const volatile void __iomem *); #undef vucp #undef vusp -#undef vuip -#undef vulp - -#ifdef __WANT_IO_DEF - -#define __inb(p) marvel_inb((unsigned long)(p)) -#define __inw(p) marvel_inw((unsigned long)(p)) -#define __inl(p) marvel_inl((unsigned long)(p)) -#define __outb(x,p) marvel_outb((x),(unsigned long)(p)) -#define __outw(x,p) marvel_outw((x),(unsigned long)(p)) -#define __outl(x,p) marvel_outl((x),(unsigned long)(p)) -#define __readb(a) marvel_readb((unsigned long)(a)) -#define __readw(a) marvel_readw((unsigned long)(a)) -#define __readl(a) marvel_readl((unsigned long)(a)) -#define __readq(a) marvel_readq((unsigned long)(a)) -#define __writeb(x,a) marvel_writeb((x),(unsigned long)(a)) -#define __writew(x,a) marvel_writew((x),(unsigned long)(a)) -#define __writel(x,a) marvel_writel((x),(unsigned long)(a)) -#define __writeq(x,a) marvel_writeq((x),(unsigned long)(a)) -#define __ioremap(a,s) marvel_ioremap((unsigned long)(a),(s)) -#define __iounmap(a) marvel_iounmap((unsigned long)(a)) -#define __is_ioaddr(a) marvel_is_ioaddr((unsigned long)(a)) - -/* Disable direct inlining of these calls with the debug checks present. */ -#if 0 -#define __raw_readb(a) __readb(a) -#define __raw_readw(a) __readw(a) -#define __raw_readl(a) __readl(a) -#define __raw_readq(a) __readq(a) -#define __raw_writeb(v,a) __writeb(v,a) -#define __raw_writew(v,a) __writew(v,a) -#define __raw_writel(v,a) __writel(v,a) -#define __raw_writeq(v,a) __writeq(v,a) -#endif -#endif /* __WANT_IO_DEF */ +#undef __IO_PREFIX +#define __IO_PREFIX marvel +#define marvel_trivial_rw_bw 1 +#define marvel_trivial_rw_lq 1 +#define marvel_trivial_io_bw 0 +#define marvel_trivial_io_lq 1 +#define marvel_trivial_iounmap 0 +#include #ifdef __IO_EXTERN_INLINE # undef __EXTERN_INLINE