1#include <linux/export.h>
2#include <linux/types.h>
3#include <linux/io.h>
4
5/*
6 * Copy data from IO memory space to "real" memory space.
7 * This needs to be optimized.
8 */
9void _memcpy_fromio(void *to, const volatile void __iomem *from, size_t count)
10{
11	unsigned char *t = to;
12	while (count) {
13		count--;
14		*t = readb(from);
15		t++;
16		from++;
17	}
18}
19
20/*
21 * Copy data from "real" memory space to IO memory space.
22 * This needs to be optimized.
23 */
24void _memcpy_toio(volatile void __iomem *to, const void *from, size_t count)
25{
26	const unsigned char *f = from;
27	while (count) {
28		count--;
29		writeb(*f, to);
30		f++;
31		to++;
32	}
33}
34
35/*
36 * "memset" on IO memory space.
37 * This needs to be optimized.
38 */
39void _memset_io(volatile void __iomem *dst, int c, size_t count)
40{
41	while (count) {
42		count--;
43		writeb(c, dst);
44		dst++;
45	}
46}
47
48EXPORT_SYMBOL(_memcpy_fromio);
49EXPORT_SYMBOL(_memcpy_toio);
50EXPORT_SYMBOL(_memset_io);
51