1*4882a593Smuzhiyun// SPDX-License-Identifier: GPL-2.0 2*4882a593Smuzhiyun// Copyright (C) 2005-2017 Andes Technology Corporation 3*4882a593Smuzhiyun 4*4882a593Smuzhiyun#include <linux/linkage.h> 5*4882a593Smuzhiyun#include <asm/assembler.h> 6*4882a593Smuzhiyun#include <asm/errno.h> 7*4882a593Smuzhiyun 8*4882a593Smuzhiyun.macro lbi1 dst, addr, adj 9*4882a593SmuzhiyunUSER( lbi.bi, \dst, [\addr], \adj) 10*4882a593Smuzhiyun.endm 11*4882a593Smuzhiyun 12*4882a593Smuzhiyun.macro sbi1 src, addr, adj 13*4882a593Smuzhiyunsbi.bi \src, [\addr], \adj 14*4882a593Smuzhiyun.endm 15*4882a593Smuzhiyun 16*4882a593Smuzhiyun.macro lmw1 start_reg, addr, end_reg 17*4882a593SmuzhiyunUSER( lmw.bim, \start_reg, [\addr], \end_reg) 18*4882a593Smuzhiyun.endm 19*4882a593Smuzhiyun 20*4882a593Smuzhiyun.macro smw1 start_reg, addr, end_reg 21*4882a593Smuzhiyunsmw.bim \start_reg, [\addr], \end_reg 22*4882a593Smuzhiyun.endm 23*4882a593Smuzhiyun 24*4882a593Smuzhiyun 25*4882a593Smuzhiyun/* Prototype: int __arch_copy_from_user(void *to, const char *from, size_t n) 26*4882a593Smuzhiyun * Purpose : copy a block from user memory to kernel memory 27*4882a593Smuzhiyun * Params : to - kernel memory 28*4882a593Smuzhiyun * : from - user memory 29*4882a593Smuzhiyun * : n - number of bytes to copy 30*4882a593Smuzhiyun * Returns : Number of bytes NOT copied. 31*4882a593Smuzhiyun */ 32*4882a593Smuzhiyun 33*4882a593Smuzhiyun.text 34*4882a593SmuzhiyunENTRY(__arch_copy_from_user) 35*4882a593Smuzhiyun add $r5, $r0, $r2 36*4882a593Smuzhiyun#include "copy_template.S" 37*4882a593Smuzhiyun move $r0, $r2 38*4882a593Smuzhiyun ret 39*4882a593Smuzhiyun.section .fixup,"ax" 40*4882a593Smuzhiyun.align 2 41*4882a593Smuzhiyun9001: 42*4882a593Smuzhiyun sub $r0, $r5, $r0 43*4882a593Smuzhiyun ret 44*4882a593Smuzhiyun.previous 45*4882a593SmuzhiyunENDPROC(__arch_copy_from_user) 46