Path: blob/master/arch/unicore32/lib/copy_to_user.S
10817 views
/*1* linux/arch/unicore32/lib/copy_to_user.S2*3* Code specific to PKUnity SoC and UniCore ISA4*5* Copyright (C) 2001-2010 GUAN Xue-tao6*7* This program is free software; you can redistribute it and/or modify8* it under the terms of the GNU General Public License version 2 as9* published by the Free Software Foundation.10*/1112#include <linux/linkage.h>13#include <asm/assembler.h>1415/*16* Prototype:17*18* size_t __copy_to_user(void *to, const void *from, size_t n)19*20* Purpose:21*22* copy a block to user memory from kernel memory23*24* Params:25*26* to = user memory27* from = kernel memory28* n = number of bytes to copy29*30* Return value:31*32* Number of bytes NOT copied.33*/3435.macro ldr1w ptr reg abort36ldw.w \reg, [\ptr]+, #437.endm3839.macro ldr4w ptr reg1 reg2 reg3 reg4 abort40ldm.w (\reg1, \reg2, \reg3, \reg4), [\ptr]+41.endm4243.macro ldr8w ptr reg1 reg2 reg3 reg4 reg5 reg6 reg7 reg8 abort44ldm.w (\reg1, \reg2, \reg3, \reg4, \reg5, \reg6, \reg7, \reg8), [\ptr]+45.endm4647.macro ldr1b ptr reg cond=al abort48notcond \cond, .+849ldb.w \reg, [\ptr]+, #150.endm5152.macro str1w ptr reg abort53strusr \reg, \ptr, 4, abort=\abort54.endm5556.macro str8w ptr reg1 reg2 reg3 reg4 reg5 reg6 reg7 reg8 abort57100: stm.w (\reg1, \reg2, \reg3, \reg4, \reg5, \reg6, \reg7, \reg8), [\ptr]+5859.pushsection __ex_table, "a"60.long 100b, \abort61.popsection62.endm6364.macro str1b ptr reg cond=al abort65strusr \reg, \ptr, 1, \cond, abort=\abort66.endm6768.macro enter69mov r3, #070stm.w (r0, r2, r3), [sp-]71.endm7273.macro exit74add sp, sp, #875ldm.w (r0), [sp]+76mov pc, lr77.endm7879.text8081WEAK(__copy_to_user)8283#include "copy_template.S"8485ENDPROC(__copy_to_user)8687.pushsection .fixup,"ax"88.align 089copy_abort_preamble90ldm.w (r1, r2, r3), [sp]+91sub r0, r0, r192rsub r0, r0, r293copy_abort_end94.popsection95969798