// SPDX-License-Identifier: GPL-2.0 // Copyright (C) 2005-2017 Andes Technology Corporation #include <linux/syscalls.h> #include <linux/uaccess.h> #include <asm/cachectl.h> #include <asm/proc-fns.h> #include <asm/fpu.h> #include <asm/fp_udfiex_crtl.h> SYSCALL_DEFINE6(mmap2, unsigned long, addr, unsigned long, len, unsigned long, prot, unsigned long, flags, unsigned long, fd, unsigned long, pgoff) { if (pgoff & (~PAGE_MASK >> 12)) return -EINVAL; return sys_mmap_pgoff(addr, len, prot, flags, fd, pgoff >> (PAGE_SHIFT - 12)); } SYSCALL_DEFINE4(fadvise64_64_wrapper,int, fd, int, advice, loff_t, offset, loff_t, len) { return sys_fadvise64_64(fd, offset, len, advice); } SYSCALL_DEFINE3(cacheflush, unsigned int, start, unsigned int, end, int, cache) { struct vm_area_struct *vma; bool flushi = true, wbd = true; vma = find_vma(current->mm, start); if (!vma) return -EFAULT; switch (cache) { case ICACHE: wbd = false; break; case DCACHE: flushi = false; break; case BCACHE: break; default: return -EINVAL; } cpu_cache_wbinval_range_check(vma, start, end, flushi, wbd); return 0; } SYSCALL_DEFINE2(fp_udfiex_crtl, unsigned int, cmd, unsigned int, act) { #if IS_ENABLED([31mCONFIG_SUPPORT_DENORMAL_ARITHMETIC[0m) int old_udf_iex; if (!used_math()) { load_fpu(&init_fpuregs); current->thread.fpu.UDF_IEX_trap = init_fpuregs.UDF_IEX_trap; set_used_math(); } old_udf_iex = current->thread.fpu.UDF_IEX_trap; act &= (FPCSR_mskUDFE | FPCSR_mskIEXE); switch (cmd) { case DISABLE_UDF_IEX_TRAP: current->thread.fpu.UDF_IEX_trap &= ~act; break; case ENABLE_UDF_IEX_TRAP: current->thread.fpu.UDF_IEX_trap |= act; break; case GET_UDF_IEX_TRAP: break; default: return -EINVAL; } return old_udf_iex; #else return -ENOTSUPP; #endif } |