18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0
28c2ecf20Sopenharmony_ci#include <linux/module.h>
38c2ecf20Sopenharmony_ci#include <linux/types.h>
48c2ecf20Sopenharmony_ci
58c2ecf20Sopenharmony_ci#include <asm/io.h>
68c2ecf20Sopenharmony_ci
78c2ecf20Sopenharmony_ci/*
88c2ecf20Sopenharmony_ci * Copy data from IO memory space to "real" memory space.
98c2ecf20Sopenharmony_ci * This needs to be optimized.
108c2ecf20Sopenharmony_ci */
118c2ecf20Sopenharmony_civoid memcpy_fromio(void *to, const volatile void __iomem *from, long count)
128c2ecf20Sopenharmony_ci{
138c2ecf20Sopenharmony_ci	char *dst = to;
148c2ecf20Sopenharmony_ci
158c2ecf20Sopenharmony_ci	while (count) {
168c2ecf20Sopenharmony_ci		count--;
178c2ecf20Sopenharmony_ci		*dst++ = readb(from++);
188c2ecf20Sopenharmony_ci	}
198c2ecf20Sopenharmony_ci}
208c2ecf20Sopenharmony_ciEXPORT_SYMBOL(memcpy_fromio);
218c2ecf20Sopenharmony_ci
228c2ecf20Sopenharmony_ci/*
238c2ecf20Sopenharmony_ci * Copy data from "real" memory space to IO memory space.
248c2ecf20Sopenharmony_ci * This needs to be optimized.
258c2ecf20Sopenharmony_ci */
268c2ecf20Sopenharmony_civoid memcpy_toio(volatile void __iomem *to, const void *from, long count)
278c2ecf20Sopenharmony_ci{
288c2ecf20Sopenharmony_ci	const char *src = from;
298c2ecf20Sopenharmony_ci
308c2ecf20Sopenharmony_ci	while (count) {
318c2ecf20Sopenharmony_ci		count--;
328c2ecf20Sopenharmony_ci		writeb(*src++, to++);
338c2ecf20Sopenharmony_ci	}
348c2ecf20Sopenharmony_ci}
358c2ecf20Sopenharmony_ciEXPORT_SYMBOL(memcpy_toio);
368c2ecf20Sopenharmony_ci
378c2ecf20Sopenharmony_ci/*
388c2ecf20Sopenharmony_ci * "memset" on IO memory space.
398c2ecf20Sopenharmony_ci * This needs to be optimized.
408c2ecf20Sopenharmony_ci */
418c2ecf20Sopenharmony_civoid memset_io(volatile void __iomem *dst, int c, long count)
428c2ecf20Sopenharmony_ci{
438c2ecf20Sopenharmony_ci	unsigned char ch = (char)(c & 0xff);
448c2ecf20Sopenharmony_ci
458c2ecf20Sopenharmony_ci	while (count) {
468c2ecf20Sopenharmony_ci		count--;
478c2ecf20Sopenharmony_ci		writeb(ch, dst);
488c2ecf20Sopenharmony_ci		dst++;
498c2ecf20Sopenharmony_ci	}
508c2ecf20Sopenharmony_ci}
518c2ecf20Sopenharmony_ciEXPORT_SYMBOL(memset_io);
52