1#ifndef __ASM_SH64_THREAD_INFO_H
2#define __ASM_SH64_THREAD_INFO_H
3
4/*
5 * SuperH 5 version
6 * Copyright (C) 2003  Paul Mundt
7 */
8
9#ifdef __KERNEL__
10
11#ifndef __ASSEMBLY__
12#include <asm/registers.h>
13
14/*
15 * low level task data that entry.S needs immediate access to
16 * - this struct should fit entirely inside of one cache line
17 * - this struct shares the supervisor stack pages
18 * - if the contents of this structure are changed, the assembly constants must also be changed
19 */
20struct thread_info {
21	struct task_struct	*task;		/* main task structure */
22	struct exec_domain	*exec_domain;	/* execution domain */
23	unsigned long		flags;		/* low level flags */
24	/* Put the 4 32-bit fields together to make asm offsetting easier. */
25	int			preempt_count;	/* 0 => preemptable, <0 => BUG */
26	__u16			cpu;
27
28	mm_segment_t		addr_limit;
29	struct restart_block	restart_block;
30
31	__u8			supervisor_stack[0];
32};
33
34/*
35 * macros/functions for gaining access to the thread information structure
36 */
37#define INIT_THREAD_INFO(tsk)			\
38{						\
39	.task		= &tsk,			\
40	.exec_domain	= &default_exec_domain,	\
41	.flags		= 0,			\
42	.cpu		= 0,			\
43	.preempt_count	= 1,			\
44	.addr_limit     = KERNEL_DS,            \
45	.restart_block	= {			\
46		.fn = do_no_restart_syscall,	\
47	},					\
48}
49
50#define init_thread_info	(init_thread_union.thread_info)
51#define init_stack		(init_thread_union.stack)
52
53/* how to get the thread information struct from C */
54static inline struct thread_info *current_thread_info(void)
55{
56	struct thread_info *ti;
57
58	__asm__ __volatile__ ("getcon " __KCR0 ", %0\n\t" : "=r" (ti));
59
60	return ti;
61}
62
63/* thread information allocation */
64
65
66
67#define alloc_thread_info(ti) ((struct thread_info *) __get_free_pages(GFP_KERNEL,1))
68#define free_thread_info(ti) free_pages((unsigned long) (ti), 1)
69
70#endif /* __ASSEMBLY__ */
71
72#define THREAD_SIZE  8192
73
74#define PREEMPT_ACTIVE		0x10000000
75
76/* thread information flags */
77#define TIF_SYSCALL_TRACE	0	/* syscall trace active */
78#define TIF_SIGPENDING		2	/* signal pending */
79#define TIF_NEED_RESCHED	3	/* rescheduling necessary */
80#define TIF_MEMDIE		4
81#define TIF_RESTORE_SIGMASK	5	/* Restore signal mask in do_signal */
82
83#define _TIF_SYSCALL_TRACE	(1 << TIF_SYSCALL_TRACE)
84#define _TIF_SIGPENDING		(1 << TIF_SIGPENDING)
85#define _TIF_NEED_RESCHED	(1 << TIF_NEED_RESCHED)
86#define _TIF_MEMDIE		(1 << TIF_MEMDIE)
87#define _TIF_RESTORE_SIGMASK	(1 << TIF_RESTORE_SIGMASK)
88
89#endif /* __KERNEL__ */
90
91#endif /* __ASM_SH64_THREAD_INFO_H */
92