11446e1dfSGabriel Krisman Bertazi /* SPDX-License-Identifier: GPL-2.0 */ 21446e1dfSGabriel Krisman Bertazi /* 31446e1dfSGabriel Krisman Bertazi * Copyright (C) 2020 Collabora Ltd. 41446e1dfSGabriel Krisman Bertazi */ 51446e1dfSGabriel Krisman Bertazi #ifndef _SYSCALL_USER_DISPATCH_H 61446e1dfSGabriel Krisman Bertazi #define _SYSCALL_USER_DISPATCH_H 71446e1dfSGabriel Krisman Bertazi 81446e1dfSGabriel Krisman Bertazi #include <linux/thread_info.h> 91446e1dfSGabriel Krisman Bertazi 101446e1dfSGabriel Krisman Bertazi #ifdef CONFIG_GENERIC_ENTRY 111446e1dfSGabriel Krisman Bertazi 121446e1dfSGabriel Krisman Bertazi struct syscall_user_dispatch { 131446e1dfSGabriel Krisman Bertazi char __user *selector; 141446e1dfSGabriel Krisman Bertazi unsigned long offset; 151446e1dfSGabriel Krisman Bertazi unsigned long len; 161446e1dfSGabriel Krisman Bertazi bool on_dispatch; 171446e1dfSGabriel Krisman Bertazi }; 181446e1dfSGabriel Krisman Bertazi 191446e1dfSGabriel Krisman Bertazi int set_syscall_user_dispatch(unsigned long mode, unsigned long offset, 201446e1dfSGabriel Krisman Bertazi unsigned long len, char __user *selector); 211446e1dfSGabriel Krisman Bertazi 221446e1dfSGabriel Krisman Bertazi #define clear_syscall_work_syscall_user_dispatch(tsk) \ 231446e1dfSGabriel Krisman Bertazi clear_task_syscall_work(tsk, SYSCALL_USER_DISPATCH) 241446e1dfSGabriel Krisman Bertazi 25*3f67987cSGregory Price int syscall_user_dispatch_get_config(struct task_struct *task, unsigned long size, 26*3f67987cSGregory Price void __user *data); 27*3f67987cSGregory Price 28*3f67987cSGregory Price int syscall_user_dispatch_set_config(struct task_struct *task, unsigned long size, 29*3f67987cSGregory Price void __user *data); 30*3f67987cSGregory Price 311446e1dfSGabriel Krisman Bertazi #else 321446e1dfSGabriel Krisman Bertazi struct syscall_user_dispatch {}; 331446e1dfSGabriel Krisman Bertazi 341446e1dfSGabriel Krisman Bertazi static inline int set_syscall_user_dispatch(unsigned long mode, unsigned long offset, 351446e1dfSGabriel Krisman Bertazi unsigned long len, char __user *selector) 361446e1dfSGabriel Krisman Bertazi { 371446e1dfSGabriel Krisman Bertazi return -EINVAL; 381446e1dfSGabriel Krisman Bertazi } 391446e1dfSGabriel Krisman Bertazi 401446e1dfSGabriel Krisman Bertazi static inline void clear_syscall_work_syscall_user_dispatch(struct task_struct *tsk) 411446e1dfSGabriel Krisman Bertazi { 421446e1dfSGabriel Krisman Bertazi } 431446e1dfSGabriel Krisman Bertazi 44*3f67987cSGregory Price static inline int syscall_user_dispatch_get_config(struct task_struct *task, 45*3f67987cSGregory Price unsigned long size, void __user *data) 46*3f67987cSGregory Price { 47*3f67987cSGregory Price return -EINVAL; 48*3f67987cSGregory Price } 49*3f67987cSGregory Price 50*3f67987cSGregory Price static inline int syscall_user_dispatch_set_config(struct task_struct *task, 51*3f67987cSGregory Price unsigned long size, void __user *data) 52*3f67987cSGregory Price { 53*3f67987cSGregory Price return -EINVAL; 54*3f67987cSGregory Price } 55*3f67987cSGregory Price 561446e1dfSGabriel Krisman Bertazi #endif /* CONFIG_GENERIC_ENTRY */ 571446e1dfSGabriel Krisman Bertazi 581446e1dfSGabriel Krisman Bertazi #endif /* _SYSCALL_USER_DISPATCH_H */ 59