]> git.proxmox.com Git - mirror_ubuntu-hirsute-kernel.git/blame - arch/unicore32/lib/copy_from_user.S
treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500
[mirror_ubuntu-hirsute-kernel.git] / arch / unicore32 / lib / copy_from_user.S
CommitLineData
d2912cb1 1/* SPDX-License-Identifier: GPL-2.0-only */
77c93b2f
G
2/*
3 * linux/arch/unicore32/lib/copy_from_user.S
4 *
5 * Code specific to PKUnity SoC and UniCore ISA
6 *
7 * Copyright (C) 2001-2010 GUAN Xue-tao
77c93b2f
G
8 */
9
10#include <linux/linkage.h>
11#include <asm/assembler.h>
12
13/*
14 * Prototype:
15 *
2ef59f28 16 * size_t raw_copy_from_user(void *to, const void *from, size_t n)
77c93b2f
G
17 *
18 * Purpose:
19 *
20 * copy a block to kernel memory from user memory
21 *
22 * Params:
23 *
24 * to = kernel memory
25 * from = user memory
26 * n = number of bytes to copy
27 *
28 * Return value:
29 *
30 * Number of bytes NOT copied.
31 */
32
33 .macro ldr1w ptr reg abort
34 ldrusr \reg, \ptr, 4, abort=\abort
35 .endm
36
37 .macro ldr4w ptr reg1 reg2 reg3 reg4 abort
38100: ldm.w (\reg1, \reg2, \reg3, \reg4), [\ptr]+
39 .pushsection __ex_table, "a"
40 .align 3
41 .long 100b, \abort
42 .popsection
43 .endm
44
45 .macro ldr8w ptr reg1 reg2 reg3 reg4 reg5 reg6 reg7 reg8 abort
46100: ldm.w (\reg1, \reg2, \reg3, \reg4, \reg5, \reg6, \reg7, \reg8), [\ptr]+
47 .pushsection __ex_table, "a"
48 .align 3
49 .long 100b, \abort
50 .popsection
51 .endm
52
53 .macro ldr1b ptr reg cond=al abort
54 ldrusr \reg, \ptr, 1, \cond, abort=\abort
55 .endm
56
57 .macro str1w ptr reg abort
58 stw.w \reg, [\ptr]+, #4
59 .endm
60
61 .macro str8w ptr reg1 reg2 reg3 reg4 reg5 reg6 reg7 reg8 abort
62 stm.w (\reg1, \reg2, \reg3, \reg4, \reg5, \reg6, \reg7, \reg8), [\ptr]+
63 .endm
64
65 .macro str1b ptr reg cond=al abort
66 .ifnc \cond, al
67 b\cond 201f
68 b 202f
69 .endif
70201: stb.w \reg, [\ptr]+, #1
71202:
72 .endm
73
74 .macro enter
75 mov r3, #0
76 stm.w (r0, r2, r3), [sp-]
77 .endm
78
79 .macro exit
80 add sp, sp, #8
81 ldm.w (r0), [sp]+
82 mov pc, lr
83 .endm
84
85 .text
86
2ef59f28 87ENTRY(raw_copy_from_user)
77c93b2f
G
88
89#include "copy_template.S"
90
2ef59f28 91ENDPROC(raw_copy_from_user)
77c93b2f
G
92
93 .pushsection .fixup,"ax"
94 .align 0
95 copy_abort_preamble
2ef59f28
AV
96 ldm.w (r1, r2, r3), [sp]+
97 sub r0, r0, r1
98 rsub r0, r0, r2
77c93b2f
G
99 copy_abort_end
100 .popsection
101