^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) // SPDX-License-Identifier: GPL-2.0-only
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) * Port on Texas Instruments TMS320C6x architecture
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) * Copyright (C) 2004, 2009, 2010, 2011 Texas Instruments Incorporated
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) * Author: Aurelien Jacquiot (aurelien.jacquiot@jaluna.com)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) #include <linux/module.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) #include <linux/syscalls.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) #include <linux/uaccess.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) #include <asm/syscalls.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) #ifdef CONFIG_ACCESS_CHECK
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) int _access_ok(unsigned long addr, unsigned long size)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) if (!size)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) return 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) if (!addr || addr > (0xffffffffUL - (size - 1)))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) goto _bad_access;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) if (uaccess_kernel())
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) return 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) if (memory_start <= addr && (addr + size - 1) < memory_end)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) return 1;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) _bad_access:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) pr_debug("Bad access attempt: pid[%d] addr[%08lx] size[0x%lx]\n",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) current->pid, addr, size);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) EXPORT_SYMBOL(_access_ok);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) /* sys_cache_sync -- sync caches over given range */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) asmlinkage int sys_cache_sync(unsigned long s, unsigned long e)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) L1D_cache_block_writeback_invalidate(s, e);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) L1P_cache_block_invalidate(s, e);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) return 0;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) /* Provide the actual syscall number to call mapping. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) #undef __SYSCALL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) #define __SYSCALL(nr, call) [nr] = (call),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) * Use trampolines
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) #define sys_pread64 sys_pread_c6x
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) #define sys_pwrite64 sys_pwrite_c6x
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) #define sys_truncate64 sys_truncate64_c6x
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) #define sys_ftruncate64 sys_ftruncate64_c6x
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) #define sys_fadvise64 sys_fadvise64_c6x
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) #define sys_fadvise64_64 sys_fadvise64_64_c6x
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) #define sys_fallocate sys_fallocate_c6x
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) /* Use sys_mmap_pgoff directly */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) #define sys_mmap2 sys_mmap_pgoff
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) * Note that we can't include <linux/unistd.h> here since the header
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) * guard will defeat us; <asm/unistd.h> checks for __SYSCALL as well.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) void *sys_call_table[__NR_syscalls] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) [0 ... __NR_syscalls-1] = sys_ni_syscall,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) #include <asm/unistd.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) };