csumpartialcopyuser.S 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. /* SPDX-License-Identifier: GPL-2.0-only */
  2. /*
  3. * linux/arch/arm/lib/csumpartialcopyuser.S
  4. *
  5. * Copyright (C) 1995-1998 Russell King
  6. *
  7. * 27/03/03 Ian Molton Clean up CONFIG_CPU
  8. */
  9. #include <linux/linkage.h>
  10. #include <asm/assembler.h>
  11. #include <asm/errno.h>
  12. #include <asm/asm-offsets.h>
  13. .text
  14. #ifdef CONFIG_CPU_SW_DOMAIN_PAN
  15. .macro save_regs
  16. mrc p15, 0, ip, c3, c0, 0
  17. stmfd sp!, {r1, r2, r4 - r8, ip, lr}
  18. uaccess_enable ip
  19. .endm
  20. .macro load_regs
  21. ldmfd sp!, {r1, r2, r4 - r8, ip, lr}
  22. mcr p15, 0, ip, c3, c0, 0
  23. ret lr
  24. .endm
  25. #else
  26. .macro save_regs
  27. stmfd sp!, {r1, r2, r4 - r8, lr}
  28. .endm
  29. .macro load_regs
  30. ldmfd sp!, {r1, r2, r4 - r8, pc}
  31. .endm
  32. #endif
  33. .macro load1b, reg1
  34. ldrusr \reg1, r0, 1
  35. .endm
  36. .macro load2b, reg1, reg2
  37. ldrusr \reg1, r0, 1
  38. ldrusr \reg2, r0, 1
  39. .endm
  40. .macro load1l, reg1
  41. ldrusr \reg1, r0, 4
  42. .endm
  43. .macro load2l, reg1, reg2
  44. ldrusr \reg1, r0, 4
  45. ldrusr \reg2, r0, 4
  46. .endm
  47. .macro load4l, reg1, reg2, reg3, reg4
  48. ldrusr \reg1, r0, 4
  49. ldrusr \reg2, r0, 4
  50. ldrusr \reg3, r0, 4
  51. ldrusr \reg4, r0, 4
  52. .endm
  53. /*
  54. * unsigned int
  55. * csum_partial_copy_from_user(const char *src, char *dst, int len)
  56. * r0 = src, r1 = dst, r2 = len
  57. * Returns : r0 = checksum or 0
  58. */
  59. #define FN_ENTRY ENTRY(csum_partial_copy_from_user)
  60. #define FN_EXIT ENDPROC(csum_partial_copy_from_user)
  61. #include "csumpartialcopygeneric.S"
  62. /*
  63. * We report fault by returning 0 csum - impossible in normal case, since
  64. * we start with 0xffffffff for initial sum.
  65. */
  66. .pushsection .text.fixup,"ax"
  67. .align 4
  68. 9001: mov r0, #0
  69. load_regs
  70. .popsection