1 // SPDX-License-Identifier: GPL-2.0 1 2 3 #include <linux/export.h> 4 #include <linux/types.h> 5 #include <linux/io.h> 6 7 /* 8 * Copy data from IO memory space to "real" me 9 */ 10 void __memcpy_fromio(void *to, const volatile 11 { 12 while (count && !IS_ALIGNED((unsigned 13 *(u8 *)to = __raw_readb(from); 14 from++; 15 to++; 16 count--; 17 } 18 19 while (count >= 4) { 20 *(u32 *)to = __raw_readl(from) 21 from += 4; 22 to += 4; 23 count -= 4; 24 } 25 26 while (count) { 27 *(u8 *)to = __raw_readb(from); 28 from++; 29 to++; 30 count--; 31 } 32 } 33 EXPORT_SYMBOL(__memcpy_fromio); 34 35 /* 36 * Copy data from "real" memory space to IO me 37 */ 38 void __memcpy_toio(volatile void __iomem *to, 39 { 40 while (count && !IS_ALIGNED((unsigned 41 __raw_writeb(*(u8 *)from, to); 42 from++; 43 to++; 44 count--; 45 } 46 47 while (count >= 4) { 48 __raw_writel(*(u32 *)from, to) 49 from += 4; 50 to += 4; 51 count -= 4; 52 } 53 54 while (count) { 55 __raw_writeb(*(u8 *)from, to); 56 from++; 57 to++; 58 count--; 59 } 60 } 61 EXPORT_SYMBOL(__memcpy_toio); 62 63 /* 64 * "memset" on IO memory space. 65 */ 66 void __memset_io(volatile void __iomem *dst, i 67 { 68 u32 qc = (u8)c; 69 70 qc |= qc << 8; 71 qc |= qc << 16; 72 73 while (count && !IS_ALIGNED((unsigned 74 __raw_writeb(c, dst); 75 dst++; 76 count--; 77 } 78 79 while (count >= 4) { 80 __raw_writel(qc, dst); 81 dst += 4; 82 count -= 4; 83 } 84 85 while (count) { 86 __raw_writeb(c, dst); 87 dst++; 88 count--; 89 } 90 } 91 EXPORT_SYMBOL(__memset_io); 92
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.