xref: /openbmc/linux/arch/nios2/include/asm/processor.h (revision 93d38b72)
171995e4dSLey Foon Tan /*
271995e4dSLey Foon Tan  * Copyright (C) 2013 Altera Corporation
371995e4dSLey Foon Tan  * Copyright (C) 2010 Tobias Klauser <tklauser@distanz.ch>
471995e4dSLey Foon Tan  * Copyright (C) 2004 Microtronix Datacom Ltd
571995e4dSLey Foon Tan  * Copyright (C) 2001 Ken Hill (khill@microtronix.com)
671995e4dSLey Foon Tan  *                    Vic Phillips (vic@microtronix.com)
771995e4dSLey Foon Tan  *
871995e4dSLey Foon Tan  * based on SPARC asm/processor_32.h which is:
971995e4dSLey Foon Tan  *
1071995e4dSLey Foon Tan  * Copyright (C) 1994 David S. Miller
1171995e4dSLey Foon Tan  *
1271995e4dSLey Foon Tan  * This file is subject to the terms and conditions of the GNU General Public
1371995e4dSLey Foon Tan  * License.  See the file "COPYING" in the main directory of this archive
1471995e4dSLey Foon Tan  * for more details.
1571995e4dSLey Foon Tan  */
1671995e4dSLey Foon Tan 
1771995e4dSLey Foon Tan #ifndef _ASM_NIOS2_PROCESSOR_H
1871995e4dSLey Foon Tan #define _ASM_NIOS2_PROCESSOR_H
1971995e4dSLey Foon Tan 
2071995e4dSLey Foon Tan #include <asm/ptrace.h>
2171995e4dSLey Foon Tan #include <asm/registers.h>
2271995e4dSLey Foon Tan #include <asm/page.h>
2371995e4dSLey Foon Tan 
2471995e4dSLey Foon Tan #define NIOS2_FLAG_KTHREAD	0x00000001	/* task is a kernel thread */
2571995e4dSLey Foon Tan 
2671995e4dSLey Foon Tan #define NIOS2_OP_NOP		0x1883a
2771995e4dSLey Foon Tan #define NIOS2_OP_BREAK		0x3da03a
2871995e4dSLey Foon Tan 
2971995e4dSLey Foon Tan #ifdef __KERNEL__
3071995e4dSLey Foon Tan 
3171995e4dSLey Foon Tan #define STACK_TOP	TASK_SIZE
3271995e4dSLey Foon Tan #define STACK_TOP_MAX	STACK_TOP
3371995e4dSLey Foon Tan 
3471995e4dSLey Foon Tan #endif /* __KERNEL__ */
3571995e4dSLey Foon Tan 
3671995e4dSLey Foon Tan /* Kuser helpers is mapped to this user space address */
3771995e4dSLey Foon Tan #define KUSER_BASE		0x1000
3871995e4dSLey Foon Tan #define KUSER_SIZE		(PAGE_SIZE)
3971995e4dSLey Foon Tan #ifndef __ASSEMBLY__
4071995e4dSLey Foon Tan 
4171995e4dSLey Foon Tan # define TASK_SIZE		0x7FFF0000UL
4271995e4dSLey Foon Tan # define TASK_UNMAPPED_BASE	(PAGE_ALIGN(TASK_SIZE / 3))
4371995e4dSLey Foon Tan 
4471995e4dSLey Foon Tan /* The Nios processor specific thread struct. */
4571995e4dSLey Foon Tan struct thread_struct {
4671995e4dSLey Foon Tan 	struct pt_regs *kregs;
4771995e4dSLey Foon Tan 
4871995e4dSLey Foon Tan 	/* Context switch saved kernel state. */
4971995e4dSLey Foon Tan 	unsigned long ksp;
5071995e4dSLey Foon Tan 	unsigned long kpsr;
5171995e4dSLey Foon Tan };
5271995e4dSLey Foon Tan 
5371995e4dSLey Foon Tan # define INIT_THREAD {			\
5471995e4dSLey Foon Tan 	.kregs	= NULL,			\
5571995e4dSLey Foon Tan 	.ksp	= 0,			\
5671995e4dSLey Foon Tan 	.kpsr	= 0,			\
5771995e4dSLey Foon Tan }
5871995e4dSLey Foon Tan 
5971995e4dSLey Foon Tan extern void start_thread(struct pt_regs *regs, unsigned long pc,
6071995e4dSLey Foon Tan 			unsigned long sp);
6171995e4dSLey Foon Tan 
6271995e4dSLey Foon Tan struct task_struct;
6371995e4dSLey Foon Tan 
64*42a20f86SKees Cook extern unsigned long __get_wchan(struct task_struct *p);
6571995e4dSLey Foon Tan 
6671995e4dSLey Foon Tan #define task_pt_regs(p) \
6771995e4dSLey Foon Tan 	((struct pt_regs *)(THREAD_SIZE + task_stack_page(p)) - 1)
6871995e4dSLey Foon Tan 
6971995e4dSLey Foon Tan /* Used by procfs */
7071995e4dSLey Foon Tan #define KSTK_EIP(tsk)	((tsk)->thread.kregs->ea)
7171995e4dSLey Foon Tan #define KSTK_ESP(tsk)	((tsk)->thread.kregs->sp)
7271995e4dSLey Foon Tan 
7371995e4dSLey Foon Tan #define cpu_relax()	barrier()
7471995e4dSLey Foon Tan 
7571995e4dSLey Foon Tan #endif /* __ASSEMBLY__ */
7671995e4dSLey Foon Tan 
7771995e4dSLey Foon Tan #endif /* _ASM_NIOS2_PROCESSOR_H */
78