1 /* SPDX-License-Identifier: GPL-2.0 */
2 /*
3  * Copyright (C) 2020 Collabora Ltd.
4  */
5 #ifndef _SYSCALL_USER_DISPATCH_H
6 #define _SYSCALL_USER_DISPATCH_H
7 
8 #include <linux/thread_info.h>
9 #include <linux/syscall_user_dispatch_types.h>
10 
11 #ifdef CONFIG_GENERIC_ENTRY
12 
13 int set_syscall_user_dispatch(unsigned long mode, unsigned long offset,
14 			      unsigned long len, char __user *selector);
15 
16 #define clear_syscall_work_syscall_user_dispatch(tsk) \
17 	clear_task_syscall_work(tsk, SYSCALL_USER_DISPATCH)
18 
19 int syscall_user_dispatch_get_config(struct task_struct *task, unsigned long size,
20 				     void __user *data);
21 
22 int syscall_user_dispatch_set_config(struct task_struct *task, unsigned long size,
23 				     void __user *data);
24 
25 #else
26 
set_syscall_user_dispatch(unsigned long mode,unsigned long offset,unsigned long len,char __user * selector)27 static inline int set_syscall_user_dispatch(unsigned long mode, unsigned long offset,
28 					    unsigned long len, char __user *selector)
29 {
30 	return -EINVAL;
31 }
32 
clear_syscall_work_syscall_user_dispatch(struct task_struct * tsk)33 static inline void clear_syscall_work_syscall_user_dispatch(struct task_struct *tsk)
34 {
35 }
36 
syscall_user_dispatch_get_config(struct task_struct * task,unsigned long size,void __user * data)37 static inline int syscall_user_dispatch_get_config(struct task_struct *task,
38 						   unsigned long size, void __user *data)
39 {
40 	return -EINVAL;
41 }
42 
syscall_user_dispatch_set_config(struct task_struct * task,unsigned long size,void __user * data)43 static inline int syscall_user_dispatch_set_config(struct task_struct *task,
44 						   unsigned long size, void __user *data)
45 {
46 	return -EINVAL;
47 }
48 
49 #endif /* CONFIG_GENERIC_ENTRY */
50 
51 #endif /* _SYSCALL_USER_DISPATCH_H */
52