Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-only */
0002 /*
0003  *  linux/arch/arm/lib/csumpartialcopyuser.S
0004  *
0005  *  Copyright (C) 1995-1998 Russell King
0006  *
0007  * 27/03/03 Ian Molton Clean up CONFIG_CPU
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  * unsigned int
0065  * csum_partial_copy_from_user(const char *src, char *dst, int len)
0066  *  r0 = src, r1 = dst, r2 = len
0067  *  Returns : r0 = checksum or 0
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  * We report fault by returning 0 csum - impossible in normal case, since
0077  * we start with 0xffffffff for initial sum.
0078  */
0079         .pushsection .text.fixup,"ax"
0080         .align  4
0081 9001:       mov r0, #0
0082         load_regs
0083         .popsection