forked from Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
84 lines
1.8 KiB
84 lines
1.8 KiB
// 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(CONFIG_SUPPORT_DENORMAL_ARITHMETIC) |
|
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 |
|
}
|
|
|