/*
 * Copyright 2004-2010 Analog Devices Inc.
 *
 * Licensed under the GPL-2 or later.
 */

#ifndef _ASM_THREAD_INFO_H
#define _ASM_THREAD_INFO_H

#include <asm/page.h>
#include <asm/entry.h>
#include <asm/l1layout.h>
#include <linux/compiler.h>

#ifdef __KERNEL__

/* Thread Align Mask to reach to the top of the stack
 * for any process
 */
#define ALIGN_PAGE_MASK		0xffffe000

/*
 * Size of kernel stack for each process. This must be a power of 2...
 */
#define THREAD_SIZE_ORDER	1
#define THREAD_SIZE		8192	/* 2 pages */
#define STACK_WARN		(THREAD_SIZE/8)

#ifndef __ASSEMBLY__

typedef unsigned long mm_segment_t;

/*
 * low level task data.
 * If you change this, change the TI_* offsets below to match.
 */

struct thread_info {
	struct task_struct *task;	/* main task structure */
	unsigned long flags;	/* low level flags */
	int cpu;		/* cpu we're on */
	int preempt_count;	/* 0 => preemptable, <0 => BUG */
	mm_segment_t addr_limit;	/* address limit */
#ifndef CONFIG_SMP
	struct l1_scratch_task_info l1_task_info;
#endif
};

/*
 * macros/functions for gaining access to the thread information structure
 */
#define INIT_THREAD_INFO(tsk)			\
{						\
	.task		= &tsk,			\
	.flags		= 0,			\
	.cpu		= 0,			\
	.preempt_count	= INIT_PREEMPT_COUNT,	\
}
#define init_thread_info	(init_thread_union.thread_info)
#define init_stack		(init_thread_union.stack)

/* Given a task stack pointer, you can find its corresponding
 * thread_info structure just by masking it to the THREAD_SIZE
 * boundary (currently 8K as you can see above).
 */
__attribute_const__
static inline struct thread_info *current_thread_info(void)
{
	struct thread_info *ti;
	__asm__("%0 = sp;" : "=da"(ti));
	return (struct thread_info *)((long)ti & ~((long)THREAD_SIZE-1));
}

#endif				/* __ASSEMBLY__ */

/*
 * thread information flag bit numbers
 */
#define TIF_SYSCALL_TRACE	0	/* syscall trace active */
#define TIF_SIGPENDING		1	/* signal pending */
#define TIF_NEED_RESCHED	2	/* rescheduling necessary */
#define TIF_MEMDIE		4	/* is terminating due to OOM killer */
#define TIF_RESTORE_SIGMASK	5	/* restore signal mask in do_signal() */
#define TIF_IRQ_SYNC		7	/* sync pipeline stage */
#define TIF_NOTIFY_RESUME	8	/* callback before returning to user */
#define TIF_SINGLESTEP		9

/* as above, but as bit values */
#define _TIF_SYSCALL_TRACE	(1<<TIF_SYSCALL_TRACE)
#define _TIF_SIGPENDING		(1<<TIF_SIGPENDING)
#define _TIF_NEED_RESCHED	(1<<TIF_NEED_RESCHED)
#define _TIF_IRQ_SYNC		(1<<TIF_IRQ_SYNC)
#define _TIF_NOTIFY_RESUME	(1<<TIF_NOTIFY_RESUME)
#define _TIF_SINGLESTEP		(1<<TIF_SINGLESTEP)

#define _TIF_WORK_MASK		0x0000FFFE	/* work to do on interrupt/exception return */

#endif				/* __KERNEL__ */

#endif				/* _ASM_THREAD_INFO_H */
