0001
0002
0003
0004
0005
0006
0007
0008
0009 #include <linux/linkage.h>
0010 #include <asm/assembler.h>
0011 #include <asm/errno.h>
0012 #include <asm/asm-offsets.h>
0013
0014 .text
0015
0016 #ifdef CONFIG_CPU_SW_DOMAIN_PAN
0017 .macro save_regs
0018 mrc p15, 0, ip, c3, c0, 0
0019 stmfd sp!, {r1, r2, r4 - r8, ip, lr}
0020 uaccess_enable ip
0021 .endm
0022
0023 .macro load_regs
0024 ldmfd sp!, {r1, r2, r4 - r8, ip, lr}
0025 mcr p15, 0, ip, c3, c0, 0
0026 ret lr
0027 .endm
0028 #else
0029 .macro save_regs
0030 stmfd sp!, {r1, r2, r4 - r8, lr}
0031 .endm
0032
0033 .macro load_regs
0034 ldmfd sp!, {r1, r2, r4 - r8, pc}
0035 .endm
0036 #endif
0037
0038 .macro load1b, reg1
0039 ldrusr \reg1, r0, 1
0040 .endm
0041
0042 .macro load2b, reg1, reg2
0043 ldrusr \reg1, r0, 1
0044 ldrusr \reg2, r0, 1
0045 .endm
0046
0047 .macro load1l, reg1
0048 ldrusr \reg1, r0, 4
0049 .endm
0050
0051 .macro load2l, reg1, reg2
0052 ldrusr \reg1, r0, 4
0053 ldrusr \reg2, r0, 4
0054 .endm
0055
0056 .macro load4l, reg1, reg2, reg3, reg4
0057 ldrusr \reg1, r0, 4
0058 ldrusr \reg2, r0, 4
0059 ldrusr \reg3, r0, 4
0060 ldrusr \reg4, r0, 4
0061 .endm
0062
0063
0064
0065
0066
0067
0068
0069
0070 #define FN_ENTRY ENTRY(csum_partial_copy_from_user)
0071 #define FN_EXIT ENDPROC(csum_partial_copy_from_user)
0072
0073 #include "csumpartialcopygeneric.S"
0074
0075
0076
0077
0078
0079 .pushsection .text.fixup,"ax"
0080 .align 4
0081 9001: mov r0, #0
0082 load_regs
0083 .popsection