diff options
author | Markos Chandras <markos.chandras@imgtec.com> | 2014-01-17 11:36:16 +0000 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 2014-03-26 23:09:17 +0100 |
commit | 6f85cebe49a4cd25a381f356ad51ccc376d00a7c (patch) | |
tree | d24ed8dd25c014de73d123cc1eb9a5dee6f93c4c /arch/mips/lib | |
parent | e89fb56c8bcf5514cfe7abd7a3dda9e6007b7238 (diff) |
MIPS: lib: csum_partial: Add EVA support
Use EVA specific functions to read and write data to
user address space.
Signed-off-by: Markos Chandras <markos.chandras@imgtec.com>
Diffstat (limited to 'arch/mips/lib')
-rw-r--r-- | arch/mips/lib/csum_partial.S | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/arch/mips/lib/csum_partial.S b/arch/mips/lib/csum_partial.S index 62c8768a59ce..2e4825e48388 100644 --- a/arch/mips/lib/csum_partial.S +++ b/arch/mips/lib/csum_partial.S @@ -352,6 +352,19 @@ LEAF(csum_partial) .section __ex_table,"a"; \ PTR 9b, handler; \ .previous; \ + /* This is enabled in EVA mode */ \ + .else; \ + /* If loading from user or storing to user */ \ + .if ((\from == USEROP) && (type == LD_INSN)) || \ + ((\to == USEROP) && (type == ST_INSN)); \ +9: __BUILD_EVA_INSN(insn##e, reg, addr); \ + .section __ex_table,"a"; \ + PTR 9b, handler; \ + .previous; \ + .else; \ + /* EVA without exception */ \ + insn reg, addr; \ + .endif; \ .endif #undef LOAD @@ -795,7 +808,19 @@ LEAF(csum_partial) .endm LEAF(__csum_partial_copy_kernel) +#ifndef CONFIG_EVA FEXPORT(__csum_partial_copy_to_user) FEXPORT(__csum_partial_copy_from_user) +#endif __BUILD_CSUM_PARTIAL_COPY_USER LEGACY_MODE USEROP USEROP 1 END(__csum_partial_copy_kernel) + +#ifdef CONFIG_EVA +LEAF(__csum_partial_copy_to_user) +__BUILD_CSUM_PARTIAL_COPY_USER EVA_MODE KERNELOP USEROP 0 +END(__csum_partial_copy_to_user) + +LEAF(__csum_partial_copy_from_user) +__BUILD_CSUM_PARTIAL_COPY_USER EVA_MODE USEROP KERNELOP 0 +END(__csum_partial_copy_from_user) +#endif |