162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0 262306a36Sopenharmony_ci#include <linux/module.h> 362306a36Sopenharmony_ci#include <linux/types.h> 462306a36Sopenharmony_ci 562306a36Sopenharmony_ci#include <asm/io.h> 662306a36Sopenharmony_ci 762306a36Sopenharmony_ci/* 862306a36Sopenharmony_ci * Copy data from IO memory space to "real" memory space. 962306a36Sopenharmony_ci * This needs to be optimized. 1062306a36Sopenharmony_ci */ 1162306a36Sopenharmony_civoid memcpy_fromio(void *to, const volatile void __iomem *from, long count) 1262306a36Sopenharmony_ci{ 1362306a36Sopenharmony_ci char *dst = to; 1462306a36Sopenharmony_ci 1562306a36Sopenharmony_ci while (count) { 1662306a36Sopenharmony_ci count--; 1762306a36Sopenharmony_ci *dst++ = readb(from++); 1862306a36Sopenharmony_ci } 1962306a36Sopenharmony_ci} 2062306a36Sopenharmony_ciEXPORT_SYMBOL(memcpy_fromio); 2162306a36Sopenharmony_ci 2262306a36Sopenharmony_ci/* 2362306a36Sopenharmony_ci * Copy data from "real" memory space to IO memory space. 2462306a36Sopenharmony_ci * This needs to be optimized. 2562306a36Sopenharmony_ci */ 2662306a36Sopenharmony_civoid memcpy_toio(volatile void __iomem *to, const void *from, long count) 2762306a36Sopenharmony_ci{ 2862306a36Sopenharmony_ci const char *src = from; 2962306a36Sopenharmony_ci 3062306a36Sopenharmony_ci while (count) { 3162306a36Sopenharmony_ci count--; 3262306a36Sopenharmony_ci writeb(*src++, to++); 3362306a36Sopenharmony_ci } 3462306a36Sopenharmony_ci} 3562306a36Sopenharmony_ciEXPORT_SYMBOL(memcpy_toio); 3662306a36Sopenharmony_ci 3762306a36Sopenharmony_ci/* 3862306a36Sopenharmony_ci * "memset" on IO memory space. 3962306a36Sopenharmony_ci * This needs to be optimized. 4062306a36Sopenharmony_ci */ 4162306a36Sopenharmony_civoid memset_io(volatile void __iomem *dst, int c, long count) 4262306a36Sopenharmony_ci{ 4362306a36Sopenharmony_ci unsigned char ch = (char)(c & 0xff); 4462306a36Sopenharmony_ci 4562306a36Sopenharmony_ci while (count) { 4662306a36Sopenharmony_ci count--; 4762306a36Sopenharmony_ci writeb(ch, dst); 4862306a36Sopenharmony_ci dst++; 4962306a36Sopenharmony_ci } 5062306a36Sopenharmony_ci} 5162306a36Sopenharmony_ciEXPORT_SYMBOL(memset_io); 52