/*
 * System call callback functions for SPUs
 */

#define DEBUG

#include <linux/kallsyms.h>
#include <linux/module.h>
#include <linux/syscalls.h>

#include <asm/spu.h>
#include <asm/syscalls.h>
#include <asm/unistd.h>

/*
 * This table defines the system calls that an SPU can call.
 * It is currently a subset of the 64 bit powerpc system calls,
 * with the exact semantics.
 *
 * The reasons for disabling some of the system calls are:
 * 1. They interact with the way SPU syscalls are handled
 *    and we can't let them execute ever:
 *	restart_syscall, exit, for, execve, ptrace, ...
 * 2. They are deprecated and replaced by other means:
 *	uselib, pciconfig_*, sysfs, ...
 * 3. They are somewhat interacting with the system in a way
 *    we don't want an SPU to:
 *	reboot, init_module, mount, kexec_load
 * 4. They are optional and we can't rely on them being
 *    linked into the kernel. Unfortunately, the cond_syscall
 *    helper does not work here as it does not add the necessary
 *    opd symbols:
 *	mbind, mq_open, ipc, ...
 */

void *spu_syscall_table[] = {
	[__NR_restart_syscall]		sys_ni_syscall, /* sys_restart_syscall */
	[__NR_exit]			sys_ni_syscall, /* sys_exit */
	[__NR_fork]			sys_ni_syscall, /* ppc_fork */
	[__NR_read]			sys_read,
	[__NR_write]			sys_write,
	[__NR_open]			sys_open,
	[__NR_close]			sys_close,
	[__NR_waitpid]			sys_waitpid,
	[__NR_creat]			sys_creat,
	[__NR_link]			sys_link,
	[__NR_unlink]			sys_unlink,
	[__NR_execve]			sys_ni_syscall, /* sys_execve */
	[__NR_chdir]			sys_chdir,
	[__NR_time]			sys_time,
	[__NR_mknod]			sys_mknod,
	[__NR_chmod]			sys_chmod,
	[__NR_lchown]			sys_lchown,
	[__NR_break]			sys_ni_syscall,
	[__NR_oldstat]			sys_ni_syscall,
	[__NR_lseek]			sys_lseek,
	[__NR_getpid]			sys_getpid,
	[__NR_mount]			sys_ni_syscall, /* sys_mount */
	[__NR_umount]			sys_ni_syscall,
	[__NR_setuid]			sys_setuid,
	[__NR_getuid]			sys_getuid,
	[__NR_stime]			sys_stime,
	[__NR_ptrace]			sys_ni_syscall, /* sys_ptrace */
	[__NR_alarm]			sys_alarm,
	[__NR_oldfstat]			sys_ni_syscall,
	[__NR_pause]			sys_ni_syscall, /* sys_pause */
	[__NR_utime]			sys_ni_syscall, /* sys_utime */
	[__NR_stty]			sys_ni_syscall,
	[__NR_gtty]			sys_ni_syscall,
	[__NR_access]			sys_access,
	[__NR_nice]			sys_nice,
	[__NR_ftime]			sys_ni_syscall,
	[__NR_sync]			sys_sync,
	[__NR_kill]			sys_kill,
	[__NR_rename]			sys_rename,
	[__NR_mkdir]			sys_mkdir,
	[__NR_rmdir]			sys_rmdir,
	[__NR_dup]			sys_dup,
	[__NR_pipe]			sys_pipe,
	[__NR_times]			sys_times,
	[__NR_prof]			sys_ni_syscall,
	[__NR_brk]			sys_brk,
	[__NR_setgid]			sys_setgid,
	[__NR_getgid]			sys_getgid,
	[__NR_signal]			sys_ni_syscall, /* sys_signal */
	[__NR_geteuid]			sys_geteuid,
	[__NR_getegid]			sys_getegid,
	[__NR_acct]			sys_ni_syscall, /* sys_acct */
	[__NR_umount2]			sys_ni_syscall, /* sys_umount */
	[__NR_lock]			sys_ni_syscall,
	[__NR_ioctl]			sys_ioctl,
	[__NR_fcntl]			sys_fcntl,
	[__NR_mpx]			sys_ni_syscall,
	[__NR_setpgid]			sys_setpgid,
	[__NR_ulimit]			sys_ni_syscall,
	[__NR_oldolduname]		sys_ni_syscall,
	[__NR_umask]			sys_umask,
	[__NR_chroot]			sys_chroot,
	[__NR_ustat]			sys_ni_syscall, /* sys_ustat */
	[__NR_dup2]			sys_dup2,
	[__NR_getppid]			sys_getppid,
	[__NR_getpgrp]			sys_getpgrp,
	[__NR_setsid]			sys_setsid,
	[__NR_sigaction]		sys_ni_syscall,
	[__NR_sgetmask]			sys_sgetmask,
	[__NR_ssetmask]			sys_ssetmask,
	[__NR_setreuid]			sys_setreuid,
	[__NR_setregid]			sys_setregid,
	[__NR_sigsuspend]		sys_ni_syscall,
	[__NR_sigpending]		sys_ni_syscall,
	[__NR_sethostname]		sys_sethostname,
	[__NR_setrlimit]		sys_setrlimit,
	[__NR_getrlimit]		sys_ni_syscall,
	[__NR_getrusage]		sys_getrusage,
	[__NR_gettimeofday]		sys_gettimeofday,
	[__NR_settimeofday]		sys_settimeofday,
	[__NR_getgroups]		sys_getgroups,
	[__NR_setgroups]		sys_setgroups,
	[__NR_select]			sys_ni_syscall,
	[__NR_symlink]			sys_symlink,
	[__NR_oldlstat]			sys_ni_syscall,
	[__NR_readlink]			sys_readlink,
	[__NR_uselib]			sys_ni_syscall, /* sys_uselib */
	[__NR_swapon]			sys_ni_syscall, /* sys_swapon */
	[__NR_reboot]			sys_ni_syscall, /* sys_reboot */
	[__NR_readdir]			sys_ni_syscall,
	[__NR_mmap]			sys_mmap,
	[__NR_munmap]			sys_munmap,
	[__NR_truncate]			sys_truncate,
	[__NR_ftruncate]		sys_ftruncate,
	[__NR_fchmod]			sys_fchmod,
	[__NR_fchown]			sys_fchown,
	[__NR_getpriority]		sys_getpriority,
	[__NR_setpriority]		sys_setpriority,
	[__NR_profil]			sys_ni_syscall,
	[__NR_statfs]			sys_ni_syscall, /* sys_statfs */
	[__NR_fstatfs]			sys_ni_syscall, /* sys_fstatfs */
	[__NR_ioperm]			sys_ni_syscall,
	[__NR_socketcall]		sys_socketcall,
	[__NR_syslog]			sys_syslog,
	[__NR_setitimer]		sys_setitimer,
	[__NR_getitimer]		sys_getitimer,
	[__NR_stat]			sys_newstat,
	[__NR_lstat]			sys_newlstat,
	[__NR_fstat]			sys_newfstat,
	[__NR_olduname]			sys_ni_syscall,
	[__NR_iopl]			sys_ni_syscall,
	[__NR_vhangup]			sys_vhangup,
	[__NR_idle]			sys_ni_syscall,
	[__NR_vm86]			sys_ni_syscall,
	[__NR_wait4]			sys_wait4,
	[__NR_swapoff]			sys_ni_syscall, /* sys_swapoff */
	[__NR_sysinfo]			sys_sysinfo,
	[__NR_ipc]			sys_ni_syscall, /* sys_ipc */
	[__NR_fsync]			sys_fsync,
	[__NR_sigreturn]		sys_ni_syscall,
	[__NR_clone]			sys_ni_syscall, /* ppc_clone */
	[__NR_setdomainname]		sys_setdomainname,
	[__NR_uname]			ppc_newuname,
	[__NR_modify_ldt]		sys_ni_syscall,
	[__NR_adjtimex]			sys_adjtimex,
	[__NR_mprotect]			sys_mprotect,
	[__NR_sigprocmask]		sys_ni_syscall,
	[__NR_create_module]		sys_ni_syscall,
	[__NR_init_module]		sys_ni_syscall, /* sys_init_module */
	[__NR_delete_module]		sys_ni_syscall, /* sys_delete_module */
	[__NR_get_kernel_syms]		sys_ni_syscall,
	[__NR_quotactl]			sys_ni_syscall, /* sys_quotactl */
	[__NR_getpgid]			sys_getpgid,
	[__NR_fchdir]			sys_fchdir,
	[__NR_bdflush]			sys_bdflush,
	[__NR_sysfs]			sys_ni_syscall, /* sys_sysfs */
	[__NR_personality]		ppc64_personality,
	[__NR_afs_syscall]		sys_ni_syscall,
	[__NR_setfsuid]			sys_setfsuid,
	[__NR_setfsgid]			sys_setfsgid,
	[__NR__llseek]			sys_llseek,
	[__NR_getdents]			sys_getdents,
	[__NR__newselect]		sys_select,
	[__NR_flock]			sys_flock,
	[__NR_msync]			sys_msync,
	[__NR_readv]			sys_readv,
	[__NR_writev]			sys_writev,
	[__NR_getsid]			sys_getsid,
	[__NR_fdatasync]		sys_fdatasync,
	[__NR__sysctl]			sys_ni_syscall, /* sys_sysctl */
	[__NR_mlock]			sys_mlock,
	[__NR_munlock]			sys_munlock,
	[__NR_mlockall]			sys_mlockall,
	[__NR_munlockall]		sys_munlockall,
	[__NR_sched_setparam]		sys_sched_setparam,
	[__NR_sched_getparam]		sys_sched_getparam,
	[__NR_sched_setscheduler]	sys_sched_setscheduler,
	[__NR_sched_getscheduler]	sys_sched_getscheduler,
	[__NR_sched_yield]		sys_sched_yield,
	[__NR_sched_get_priority_max]	sys_sched_get_priority_max,
	[__NR_sched_get_priority_min]	sys_sched_get_priority_min,
	[__NR_sched_rr_get_interval]	sys_sched_rr_get_interval,
	[__NR_nanosleep]		sys_nanosleep,
	[__NR_mremap]			sys_mremap,
	[__NR_setresuid]		sys_setresuid,
	[__NR_getresuid]		sys_getresuid,
	[__NR_query_module]		sys_ni_syscall,
	[__NR_poll]			sys_poll,
	[__NR_nfsservctl]		sys_ni_syscall, /* sys_nfsservctl */
	[__NR_setresgid]		sys_setresgid,
	[__NR_getresgid]		sys_getresgid,
	[__NR_prctl]			sys_prctl,
	[__NR_rt_sigreturn]		sys_ni_syscall, /* ppc64_rt_sigreturn */
	[__NR_rt_sigaction]		sys_ni_syscall, /* sys_rt_sigaction */
	[__NR_rt_sigprocmask]		sys_ni_syscall, /* sys_rt_sigprocmask */
	[__NR_rt_sigpending]		sys_ni_syscall, /* sys_rt_sigpending */
	[__NR_rt_sigtimedwait]		sys_ni_syscall, /* sys_rt_sigtimedwait */
	[__NR_rt_sigqueueinfo]		sys_ni_syscall, /* sys_rt_sigqueueinfo */
	[__NR_rt_sigsuspend]		sys_ni_syscall, /* sys_rt_sigsuspend */
	[__NR_pread64]			sys_pread64,
	[__NR_pwrite64]			sys_pwrite64,
	[__NR_chown]			sys_chown,
	[__NR_getcwd]			sys_getcwd,
	[__NR_capget]			sys_capget,
	[__NR_capset]			sys_capset,
	[__NR_sigaltstack]		sys_ni_syscall, /* sys_sigaltstack */
	[__NR_sendfile]			sys_sendfile64,
	[__NR_getpmsg]			sys_ni_syscall,
	[__NR_putpmsg]			sys_ni_syscall,
	[__NR_vfork]			sys_ni_syscall, /* ppc_vfork */
	[__NR_ugetrlimit]		sys_getrlimit,
	[__NR_readahead]		sys_readahead,
	[192]				sys_ni_syscall,
	[193]				sys_ni_syscall,
	[194]				sys_ni_syscall,
	[195]				sys_ni_syscall,
	[196]				sys_ni_syscall,
	[197]				sys_ni_syscall,
	[__NR_pciconfig_read]		sys_ni_syscall, /* sys_pciconfig_read */
	[__NR_pciconfig_write]		sys_ni_syscall, /* sys_pciconfig_write */
	[__NR_pciconfig_iobase]		sys_ni_syscall, /* sys_pciconfig_iobase */
	[__NR_multiplexer]		sys_ni_syscall,
	[__NR_getdents64]		sys_getdents64,
	[__NR_pivot_root]		sys_pivot_root,
	[204]				sys_ni_syscall,
	[__NR_madvise]			sys_madvise,
	[__NR_mincore]			sys_mincore,
	[__NR_gettid]			sys_gettid,
	[__NR_tkill]			sys_tkill,
	[__NR_setxattr]			sys_setxattr,
	[__NR_lsetxattr]		sys_lsetxattr,
	[__NR_fsetxattr]		sys_fsetxattr,
	[__NR_getxattr]			sys_getxattr,
	[__NR_lgetxattr]		sys_lgetxattr,
	[__NR_fgetxattr]		sys_fgetxattr,
	[__NR_listxattr]		sys_listxattr,
	[__NR_llistxattr]		sys_llistxattr,
	[__NR_flistxattr]		sys_flistxattr,
	[__NR_removexattr]		sys_removexattr,
	[__NR_lremovexattr]		sys_lremovexattr,
	[__NR_fremovexattr]		sys_fremovexattr,
	[__NR_futex]			sys_futex,
	[__NR_sched_setaffinity]	sys_sched_setaffinity,
	[__NR_sched_getaffinity]	sys_sched_getaffinity,
	[__NR_tuxcall]			sys_ni_syscall,
	[226]				sys_ni_syscall,
	[__NR_io_setup]			sys_io_setup,
	[__NR_io_destroy]		sys_io_destroy,
	[__NR_io_getevents]		sys_io_getevents,
	[__NR_io_submit]		sys_io_submit,
	[__NR_io_cancel]		sys_io_cancel,
	[__NR_set_tid_address]		sys_ni_syscall, /* sys_set_tid_address */
	[__NR_fadvise64]		sys_fadvise64,
	[__NR_exit_group]		sys_ni_syscall, /* sys_exit_group */
	[__NR_lookup_dcookie]		sys_ni_syscall, /* sys_lookup_dcookie */
	[__NR_epoll_create]		sys_epoll_create,
	[__NR_epoll_ctl]		sys_epoll_ctl,
	[__NR_epoll_wait]		sys_epoll_wait,
	[__NR_remap_file_pages]		sys_remap_file_pages,
	[__NR_timer_create]		sys_timer_create,
	[__NR_timer_settime]		sys_timer_settime,
	[__NR_timer_gettime]		sys_timer_gettime,
	[__NR_timer_getoverrun]		sys_timer_getoverrun,
	[__NR_timer_delete]		sys_timer_delete,
	[__NR_clock_settime]		sys_clock_settime,
	[__NR_clock_gettime]		sys_clock_gettime,
	[__NR_clock_getres]		sys_clock_getres,
	[__NR_clock_nanosleep]		sys_clock_nanosleep,
	[__NR_swapcontext]		sys_ni_syscall, /* ppc64_swapcontext */
	[__NR_tgkill]			sys_tgkill,
	[__NR_utimes]			sys_utimes,
	[__NR_statfs64]			sys_statfs64,
	[__NR_fstatfs64]		sys_fstatfs64,
	[254]				sys_ni_syscall,
	[__NR_rtas]			ppc_rtas,
	[256]				sys_ni_syscall,
	[257]				sys_ni_syscall,
	[258]				sys_ni_syscall,
	[__NR_mbind]			sys_ni_syscall, /* sys_mbind */
	[__NR_get_mempolicy]		sys_ni_syscall, /* sys_get_mempolicy */
	[__NR_set_mempolicy]		sys_ni_syscall, /* sys_set_mempolicy */
	[__NR_mq_open]			sys_ni_syscall, /* sys_mq_open */
	[__NR_mq_unlink]		sys_ni_syscall, /* sys_mq_unlink */
	[__NR_mq_timedsend]		sys_ni_syscall, /* sys_mq_timedsend */
	[__NR_mq_timedreceive]		sys_ni_syscall, /* sys_mq_timedreceive */
	[__NR_mq_notify]		sys_ni_syscall, /* sys_mq_notify */
	[__NR_mq_getsetattr]		sys_ni_syscall, /* sys_mq_getsetattr */
	[__NR_kexec_load]		sys_ni_syscall, /* sys_kexec_load */
	[__NR_add_key]			sys_ni_syscall, /* sys_add_key */
	[__NR_request_key]		sys_ni_syscall, /* sys_request_key */
	[__NR_keyctl]			sys_ni_syscall, /* sys_keyctl */
	[__NR_waitid]			sys_ni_syscall, /* sys_waitid */
	[__NR_ioprio_set]		sys_ni_syscall, /* sys_ioprio_set */
	[__NR_ioprio_get]		sys_ni_syscall, /* sys_ioprio_get */
	[__NR_inotify_init]		sys_ni_syscall, /* sys_inotify_init */
	[__NR_inotify_add_watch]	sys_ni_syscall, /* sys_inotify_add_watch */
	[__NR_inotify_rm_watch]		sys_ni_syscall, /* sys_inotify_rm_watch */
	[__NR_spu_run]			sys_ni_syscall, /* sys_spu_run */
	[__NR_spu_create]		sys_ni_syscall, /* sys_spu_create */
	[__NR_pselect6]			sys_ni_syscall, /* sys_pselect */
	[__NR_ppoll]			sys_ni_syscall, /* sys_ppoll */
	[__NR_unshare]			sys_unshare,
	[__NR_splice]			sys_splice,
	[__NR_tee]			sys_tee,
	[__NR_vmsplice]			sys_vmsplice,
	[__NR_openat]			sys_openat,
	[__NR_mkdirat]			sys_mkdirat,
	[__NR_mknodat]			sys_mknodat,
	[__NR_fchownat]			sys_fchownat,
	[__NR_futimesat]		sys_futimesat,
	[__NR_newfstatat]		sys_newfstatat,
	[__NR_unlinkat]			sys_unlinkat,
	[__NR_renameat]			sys_renameat,
	[__NR_linkat]			sys_linkat,
	[__NR_symlinkat]		sys_symlinkat,
	[__NR_readlinkat]		sys_readlinkat,
	[__NR_fchmodat]			sys_fchmodat,
	[__NR_faccessat]		sys_faccessat,
};

long spu_sys_callback(struct spu_syscall_block *s)
{
	long (*syscall)(u64 a1, u64 a2, u64 a3, u64 a4, u64 a5, u64 a6);

	syscall = spu_syscall_table[s->nr_ret];

	if (s->nr_ret >= ARRAY_SIZE(spu_syscall_table)) {
		pr_debug("%s: invalid syscall #%ld", __FUNCTION__, s->nr_ret);
		return -ENOSYS;
	}

#ifdef DEBUG
	print_symbol(KERN_DEBUG "SPU-syscall %s:", (unsigned long)syscall);
	printk("syscall%ld(%lx, %lx, %lx, %lx, %lx, %lx)\n",
			s->nr_ret,
			s->parm[0], s->parm[1], s->parm[2],
			s->parm[3], s->parm[4], s->parm[5]);
#endif

	return syscall(s->parm[0], s->parm[1], s->parm[2],
		       s->parm[3], s->parm[4], s->parm[5]);
}
EXPORT_SYMBOL_GPL(spu_sys_callback);
