|  | #include <linux/config.h> | 
|  | #include <linux/module.h> | 
|  | #include <linux/types.h> | 
|  |  | 
|  | #include <asm/io.h> | 
|  |  | 
|  | /* | 
|  | * Copy data from IO memory space to "real" memory space. | 
|  | * This needs to be optimized. | 
|  | */ | 
|  | void memcpy_fromio(void *to, const volatile void __iomem *from, long count) | 
|  | { | 
|  | char *dst = to; | 
|  |  | 
|  | while (count) { | 
|  | count--; | 
|  | *dst++ = readb(from++); | 
|  | } | 
|  | } | 
|  | EXPORT_SYMBOL(memcpy_fromio); | 
|  |  | 
|  | /* | 
|  | * Copy data from "real" memory space to IO memory space. | 
|  | * This needs to be optimized. | 
|  | */ | 
|  | void memcpy_toio(volatile void __iomem *to, const void *from, long count) | 
|  | { | 
|  | const char *src = from; | 
|  |  | 
|  | while (count) { | 
|  | count--; | 
|  | writeb(*src++, to++); | 
|  | } | 
|  | } | 
|  | EXPORT_SYMBOL(memcpy_toio); | 
|  |  | 
|  | /* | 
|  | * "memset" on IO memory space. | 
|  | * This needs to be optimized. | 
|  | */ | 
|  | void memset_io(volatile void __iomem *dst, int c, long count) | 
|  | { | 
|  | unsigned char ch = (char)(c & 0xff); | 
|  |  | 
|  | while (count) { | 
|  | count--; | 
|  | writeb(ch, dst); | 
|  | dst++; | 
|  | } | 
|  | } | 
|  | EXPORT_SYMBOL(memset_io); | 
|  |  | 
|  | #ifdef CONFIG_IA64_GENERIC | 
|  |  | 
|  | #undef __ia64_inb | 
|  | #undef __ia64_inw | 
|  | #undef __ia64_inl | 
|  | #undef __ia64_outb | 
|  | #undef __ia64_outw | 
|  | #undef __ia64_outl | 
|  | #undef __ia64_readb | 
|  | #undef __ia64_readw | 
|  | #undef __ia64_readl | 
|  | #undef __ia64_readq | 
|  | #undef __ia64_readb_relaxed | 
|  | #undef __ia64_readw_relaxed | 
|  | #undef __ia64_readl_relaxed | 
|  | #undef __ia64_readq_relaxed | 
|  | #undef __ia64_writeb | 
|  | #undef __ia64_writew | 
|  | #undef __ia64_writel | 
|  | #undef __ia64_writeq | 
|  | #undef __ia64_mmiowb | 
|  |  | 
|  | unsigned int | 
|  | __ia64_inb (unsigned long port) | 
|  | { | 
|  | return ___ia64_inb(port); | 
|  | } | 
|  |  | 
|  | unsigned int | 
|  | __ia64_inw (unsigned long port) | 
|  | { | 
|  | return ___ia64_inw(port); | 
|  | } | 
|  |  | 
|  | unsigned int | 
|  | __ia64_inl (unsigned long port) | 
|  | { | 
|  | return ___ia64_inl(port); | 
|  | } | 
|  |  | 
|  | void | 
|  | __ia64_outb (unsigned char val, unsigned long port) | 
|  | { | 
|  | ___ia64_outb(val, port); | 
|  | } | 
|  |  | 
|  | void | 
|  | __ia64_outw (unsigned short val, unsigned long port) | 
|  | { | 
|  | ___ia64_outw(val, port); | 
|  | } | 
|  |  | 
|  | void | 
|  | __ia64_outl (unsigned int val, unsigned long port) | 
|  | { | 
|  | ___ia64_outl(val, port); | 
|  | } | 
|  |  | 
|  | unsigned char | 
|  | __ia64_readb (void __iomem *addr) | 
|  | { | 
|  | return ___ia64_readb (addr); | 
|  | } | 
|  |  | 
|  | unsigned short | 
|  | __ia64_readw (void __iomem *addr) | 
|  | { | 
|  | return ___ia64_readw (addr); | 
|  | } | 
|  |  | 
|  | unsigned int | 
|  | __ia64_readl (void __iomem *addr) | 
|  | { | 
|  | return ___ia64_readl (addr); | 
|  | } | 
|  |  | 
|  | unsigned long | 
|  | __ia64_readq (void __iomem *addr) | 
|  | { | 
|  | return ___ia64_readq (addr); | 
|  | } | 
|  |  | 
|  | unsigned char | 
|  | __ia64_readb_relaxed (void __iomem *addr) | 
|  | { | 
|  | return ___ia64_readb (addr); | 
|  | } | 
|  |  | 
|  | unsigned short | 
|  | __ia64_readw_relaxed (void __iomem *addr) | 
|  | { | 
|  | return ___ia64_readw (addr); | 
|  | } | 
|  |  | 
|  | unsigned int | 
|  | __ia64_readl_relaxed (void __iomem *addr) | 
|  | { | 
|  | return ___ia64_readl (addr); | 
|  | } | 
|  |  | 
|  | unsigned long | 
|  | __ia64_readq_relaxed (void __iomem *addr) | 
|  | { | 
|  | return ___ia64_readq (addr); | 
|  | } | 
|  |  | 
|  | void | 
|  | __ia64_mmiowb(void) | 
|  | { | 
|  | ___ia64_mmiowb(); | 
|  | } | 
|  |  | 
|  | #endif /* CONFIG_IA64_GENERIC */ |