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