1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun // Copyright (C) 2018 Hangzhou C-SKY Microsystems co.,ltd. 3*4882a593Smuzhiyun 4*4882a593Smuzhiyun #ifndef _ASM_CSKY_THREAD_INFO_H 5*4882a593Smuzhiyun #define _ASM_CSKY_THREAD_INFO_H 6*4882a593Smuzhiyun 7*4882a593Smuzhiyun #ifndef __ASSEMBLY__ 8*4882a593Smuzhiyun 9*4882a593Smuzhiyun #include <linux/version.h> 10*4882a593Smuzhiyun #include <asm/types.h> 11*4882a593Smuzhiyun #include <asm/page.h> 12*4882a593Smuzhiyun #include <asm/processor.h> 13*4882a593Smuzhiyun #include <abi/switch_context.h> 14*4882a593Smuzhiyun 15*4882a593Smuzhiyun struct thread_info { 16*4882a593Smuzhiyun struct task_struct *task; 17*4882a593Smuzhiyun void *dump_exec_domain; 18*4882a593Smuzhiyun unsigned long flags; 19*4882a593Smuzhiyun int preempt_count; 20*4882a593Smuzhiyun unsigned long tp_value; 21*4882a593Smuzhiyun mm_segment_t addr_limit; 22*4882a593Smuzhiyun struct restart_block restart_block; 23*4882a593Smuzhiyun struct pt_regs *regs; 24*4882a593Smuzhiyun unsigned int cpu; 25*4882a593Smuzhiyun }; 26*4882a593Smuzhiyun 27*4882a593Smuzhiyun #define INIT_THREAD_INFO(tsk) \ 28*4882a593Smuzhiyun { \ 29*4882a593Smuzhiyun .task = &tsk, \ 30*4882a593Smuzhiyun .preempt_count = INIT_PREEMPT_COUNT, \ 31*4882a593Smuzhiyun .addr_limit = KERNEL_DS, \ 32*4882a593Smuzhiyun .cpu = 0, \ 33*4882a593Smuzhiyun .restart_block = { \ 34*4882a593Smuzhiyun .fn = do_no_restart_syscall, \ 35*4882a593Smuzhiyun }, \ 36*4882a593Smuzhiyun } 37*4882a593Smuzhiyun 38*4882a593Smuzhiyun #define THREAD_SIZE_ORDER (THREAD_SHIFT - PAGE_SHIFT) 39*4882a593Smuzhiyun 40*4882a593Smuzhiyun #define thread_saved_fp(tsk) \ 41*4882a593Smuzhiyun ((unsigned long)(((struct switch_stack *)(tsk->thread.sp))->r8)) 42*4882a593Smuzhiyun 43*4882a593Smuzhiyun #define thread_saved_sp(tsk) \ 44*4882a593Smuzhiyun ((unsigned long)(tsk->thread.sp)) 45*4882a593Smuzhiyun 46*4882a593Smuzhiyun #define thread_saved_lr(tsk) \ 47*4882a593Smuzhiyun ((unsigned long)(((struct switch_stack *)(tsk->thread.sp))->r15)) 48*4882a593Smuzhiyun current_thread_info(void)49*4882a593Smuzhiyunstatic inline struct thread_info *current_thread_info(void) 50*4882a593Smuzhiyun { 51*4882a593Smuzhiyun unsigned long sp; 52*4882a593Smuzhiyun 53*4882a593Smuzhiyun asm volatile("mov %0, sp\n":"=r"(sp)); 54*4882a593Smuzhiyun 55*4882a593Smuzhiyun return (struct thread_info *)(sp & ~(THREAD_SIZE - 1)); 56*4882a593Smuzhiyun } 57*4882a593Smuzhiyun 58*4882a593Smuzhiyun #endif /* !__ASSEMBLY__ */ 59*4882a593Smuzhiyun 60*4882a593Smuzhiyun #define TIF_SIGPENDING 0 /* signal pending */ 61*4882a593Smuzhiyun #define TIF_NOTIFY_RESUME 1 /* callback before returning to user */ 62*4882a593Smuzhiyun #define TIF_NEED_RESCHED 2 /* rescheduling necessary */ 63*4882a593Smuzhiyun #define TIF_UPROBE 3 /* uprobe breakpoint or singlestep */ 64*4882a593Smuzhiyun #define TIF_SYSCALL_TRACE 4 /* syscall trace active */ 65*4882a593Smuzhiyun #define TIF_SYSCALL_TRACEPOINT 5 /* syscall tracepoint instrumentation */ 66*4882a593Smuzhiyun #define TIF_SYSCALL_AUDIT 6 /* syscall auditing */ 67*4882a593Smuzhiyun #define TIF_NOTIFY_SIGNAL 7 /* signal notifications exist */ 68*4882a593Smuzhiyun #define TIF_POLLING_NRFLAG 16 /* poll_idle() is TIF_NEED_RESCHED */ 69*4882a593Smuzhiyun #define TIF_MEMDIE 18 /* is terminating due to OOM killer */ 70*4882a593Smuzhiyun #define TIF_RESTORE_SIGMASK 20 /* restore signal mask in do_signal() */ 71*4882a593Smuzhiyun #define TIF_SECCOMP 21 /* secure computing */ 72*4882a593Smuzhiyun 73*4882a593Smuzhiyun #define _TIF_SIGPENDING (1 << TIF_SIGPENDING) 74*4882a593Smuzhiyun #define _TIF_NOTIFY_RESUME (1 << TIF_NOTIFY_RESUME) 75*4882a593Smuzhiyun #define _TIF_NEED_RESCHED (1 << TIF_NEED_RESCHED) 76*4882a593Smuzhiyun #define _TIF_SYSCALL_TRACE (1 << TIF_SYSCALL_TRACE) 77*4882a593Smuzhiyun #define _TIF_SYSCALL_TRACEPOINT (1 << TIF_SYSCALL_TRACEPOINT) 78*4882a593Smuzhiyun #define _TIF_SYSCALL_AUDIT (1 << TIF_SYSCALL_AUDIT) 79*4882a593Smuzhiyun #define _TIF_NOTIFY_SIGNAL (1 << TIF_NOTIFY_SIGNAL) 80*4882a593Smuzhiyun #define _TIF_UPROBE (1 << TIF_UPROBE) 81*4882a593Smuzhiyun #define _TIF_POLLING_NRFLAG (1 << TIF_POLLING_NRFLAG) 82*4882a593Smuzhiyun #define _TIF_MEMDIE (1 << TIF_MEMDIE) 83*4882a593Smuzhiyun #define _TIF_RESTORE_SIGMASK (1 << TIF_RESTORE_SIGMASK) 84*4882a593Smuzhiyun #define _TIF_SECCOMP (1 << TIF_SECCOMP) 85*4882a593Smuzhiyun 86*4882a593Smuzhiyun #define _TIF_WORK_MASK (_TIF_NEED_RESCHED | _TIF_SIGPENDING | \ 87*4882a593Smuzhiyun _TIF_NOTIFY_RESUME | _TIF_UPROBE | \ 88*4882a593Smuzhiyun _TIF_NOTIFY_SIGNAL) 89*4882a593Smuzhiyun 90*4882a593Smuzhiyun #define _TIF_SYSCALL_WORK (_TIF_SYSCALL_TRACE | _TIF_SYSCALL_AUDIT | \ 91*4882a593Smuzhiyun _TIF_SYSCALL_TRACEPOINT | _TIF_SECCOMP) 92*4882a593Smuzhiyun 93*4882a593Smuzhiyun #endif /* _ASM_CSKY_THREAD_INFO_H */ 94