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