Loading...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 | // SPDX-License-Identifier: GPL-2.0 #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 */ |