/* SPDX-License-Identifier: GPL-2.0-only */1/*2* linux/arch/arm/lib/csumpartialcopyuser.S3*4* Copyright (C) 1995-1998 Russell King5*6* 27/03/03 Ian Molton Clean up CONFIG_CPU7*/8#include <linux/linkage.h>9#include <asm/assembler.h>10#include <asm/errno.h>11#include <asm/asm-offsets.h>1213.text1415#if defined(CONFIG_CPU_SW_DOMAIN_PAN)1617.macro save_regs18mrc p15, 0, ip, c3, c0, 019stmfd sp!, {r1, r2, r4 - r8, ip, lr}20uaccess_enable ip21.endm2223.macro load_regs24ldmfd sp!, {r1, r2, r4 - r8, ip, lr}25mcr p15, 0, ip, c3, c0, 026ret lr27.endm2829#elif defined(CONFIG_CPU_TTBR0_PAN)3031.macro save_regs32mrc p15, 0, ip, c2, c0, 2 @ read TTBCR33stmfd sp!, {r1, r2, r4 - r8, ip, lr}34uaccess_enable ip35.endm3637.macro load_regs38ldmfd sp!, {r1, r2, r4 - r8, ip, lr}39mcr p15, 0, ip, c2, c0, 2 @ restore TTBCR40ret lr41.endm4243#else4445.macro save_regs46stmfd sp!, {r1, r2, r4 - r8, lr}47.endm4849.macro load_regs50ldmfd sp!, {r1, r2, r4 - r8, pc}51.endm5253#endif5455.macro load1b, reg156ldrusr \reg1, r0, 157.endm5859.macro load2b, reg1, reg260ldrusr \reg1, r0, 161ldrusr \reg2, r0, 162.endm6364.macro load1l, reg165ldrusr \reg1, r0, 466.endm6768.macro load2l, reg1, reg269ldrusr \reg1, r0, 470ldrusr \reg2, r0, 471.endm7273.macro load4l, reg1, reg2, reg3, reg474ldrusr \reg1, r0, 475ldrusr \reg2, r0, 476ldrusr \reg3, r0, 477ldrusr \reg4, r0, 478.endm7980/*81* unsigned int82* csum_partial_copy_from_user(const char *src, char *dst, int len)83* r0 = src, r1 = dst, r2 = len84* Returns : r0 = checksum or 085*/8687#define FN_ENTRY ENTRY(csum_partial_copy_from_user)88#define FN_EXIT ENDPROC(csum_partial_copy_from_user)8990#include "csumpartialcopygeneric.S"9192/*93* We report fault by returning 0 csum - impossible in normal case, since94* we start with 0xffffffff for initial sum.95*/96.pushsection .text.fixup,"ax"97.align 4989001: mov r0, #099load_regs100.popsection101102103