1 // SPDX-License-Identifier: GPL-2.0 2 #include <linux/module.h> 3 #include <linux/types.h> 4 5 #include <asm/io.h> 6 7 /* 8 * Copy data from IO memory space to "real" memory space. 9 * This needs to be optimized. 10 */ 11 void memcpy_fromio(void *to, const volatile void __iomem *from, long count) 12 { 13 char *dst = to; 14 15 while (count) { 16 count--; 17 *dst++ = readb(from++); 18 } 19 } 20 EXPORT_SYMBOL(memcpy_fromio); 21 22 /* 23 * Copy data from "real" memory space to IO memory space. 24 * This needs to be optimized. 25 */ 26 void memcpy_toio(volatile void __iomem *to, const void *from, long count) 27 { 28 const char *src = from; 29 30 while (count) { 31 count--; 32 writeb(*src++, to++); 33 } 34 } 35 EXPORT_SYMBOL(memcpy_toio); 36 37 /* 38 * "memset" on IO memory space. 39 * This needs to be optimized. 40 */ 41 void memset_io(volatile void __iomem *dst, int c, long count) 42 { 43 unsigned char ch = (char)(c & 0xff); 44 45 while (count) { 46 count--; 47 writeb(ch, dst); 48 dst++; 49 } 50 } 51 EXPORT_SYMBOL(memset_io); 52 53 #ifdef CONFIG_IA64_GENERIC 54 55 #undef __ia64_inb 56 #undef __ia64_inw 57 #undef __ia64_inl 58 #undef __ia64_outb 59 #undef __ia64_outw 60 #undef __ia64_outl 61 #undef __ia64_readb 62 #undef __ia64_readw 63 #undef __ia64_readl 64 #undef __ia64_readq 65 #undef __ia64_readb_relaxed 66 #undef __ia64_readw_relaxed 67 #undef __ia64_readl_relaxed 68 #undef __ia64_readq_relaxed 69 #undef __ia64_writeb 70 #undef __ia64_writew 71 #undef __ia64_writel 72 #undef __ia64_writeq 73 #undef __ia64_mmiowb 74 75 unsigned int 76 __ia64_inb (unsigned long port) 77 { 78 return ___ia64_inb(port); 79 } 80 81 unsigned int 82 __ia64_inw (unsigned long port) 83 { 84 return ___ia64_inw(port); 85 } 86 87 unsigned int 88 __ia64_inl (unsigned long port) 89 { 90 return ___ia64_inl(port); 91 } 92 93 void 94 __ia64_outb (unsigned char val, unsigned long port) 95 { 96 ___ia64_outb(val, port); 97 } 98 99 void 100 __ia64_outw (unsigned short val, unsigned long port) 101 { 102 ___ia64_outw(val, port); 103 } 104 105 void 106 __ia64_outl (unsigned int val, unsigned long port) 107 { 108 ___ia64_outl(val, port); 109 } 110 111 unsigned char 112 __ia64_readb (void __iomem *addr) 113 { 114 return ___ia64_readb (addr); 115 } 116 117 unsigned short 118 __ia64_readw (void __iomem *addr) 119 { 120 return ___ia64_readw (addr); 121 } 122 123 unsigned int 124 __ia64_readl (void __iomem *addr) 125 { 126 return ___ia64_readl (addr); 127 } 128 129 unsigned long 130 __ia64_readq (void __iomem *addr) 131 { 132 return ___ia64_readq (addr); 133 } 134 135 unsigned char 136 __ia64_readb_relaxed (void __iomem *addr) 137 { 138 return ___ia64_readb (addr); 139 } 140 141 unsigned short 142 __ia64_readw_relaxed (void __iomem *addr) 143 { 144 return ___ia64_readw (addr); 145 } 146 147 unsigned int 148 __ia64_readl_relaxed (void __iomem *addr) 149 { 150 return ___ia64_readl (addr); 151 } 152 153 unsigned long 154 __ia64_readq_relaxed (void __iomem *addr) 155 { 156 return ___ia64_readq (addr); 157 } 158 159 void 160 __ia64_mmiowb(void) 161 { 162 ___ia64_mmiowb(); 163 } 164 165 #endif /* CONFIG_IA64_GENERIC */ 166