162306a36Sopenharmony_ci/* 262306a36Sopenharmony_ci * Copyright (C) 2013 Altera Corporation 362306a36Sopenharmony_ci * Copyright (C) 2010 Tobias Klauser <tklauser@distanz.ch> 462306a36Sopenharmony_ci * Copyright (C) 2004 Microtronix Datacom Ltd 562306a36Sopenharmony_ci * Copyright (C) 2001 Ken Hill (khill@microtronix.com) 662306a36Sopenharmony_ci * Vic Phillips (vic@microtronix.com) 762306a36Sopenharmony_ci * 862306a36Sopenharmony_ci * based on SPARC asm/processor_32.h which is: 962306a36Sopenharmony_ci * 1062306a36Sopenharmony_ci * Copyright (C) 1994 David S. Miller 1162306a36Sopenharmony_ci * 1262306a36Sopenharmony_ci * This file is subject to the terms and conditions of the GNU General Public 1362306a36Sopenharmony_ci * License. See the file "COPYING" in the main directory of this archive 1462306a36Sopenharmony_ci * for more details. 1562306a36Sopenharmony_ci */ 1662306a36Sopenharmony_ci 1762306a36Sopenharmony_ci#ifndef _ASM_NIOS2_PROCESSOR_H 1862306a36Sopenharmony_ci#define _ASM_NIOS2_PROCESSOR_H 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_ci#include <asm/ptrace.h> 2162306a36Sopenharmony_ci#include <asm/registers.h> 2262306a36Sopenharmony_ci#include <asm/page.h> 2362306a36Sopenharmony_ci 2462306a36Sopenharmony_ci#define NIOS2_FLAG_KTHREAD 0x00000001 /* task is a kernel thread */ 2562306a36Sopenharmony_ci 2662306a36Sopenharmony_ci#define NIOS2_OP_NOP 0x1883a 2762306a36Sopenharmony_ci#define NIOS2_OP_BREAK 0x3da03a 2862306a36Sopenharmony_ci 2962306a36Sopenharmony_ci#ifdef __KERNEL__ 3062306a36Sopenharmony_ci 3162306a36Sopenharmony_ci#define STACK_TOP TASK_SIZE 3262306a36Sopenharmony_ci#define STACK_TOP_MAX STACK_TOP 3362306a36Sopenharmony_ci 3462306a36Sopenharmony_ci#endif /* __KERNEL__ */ 3562306a36Sopenharmony_ci 3662306a36Sopenharmony_ci/* Kuser helpers is mapped to this user space address */ 3762306a36Sopenharmony_ci#define KUSER_BASE 0x1000 3862306a36Sopenharmony_ci#define KUSER_SIZE (PAGE_SIZE) 3962306a36Sopenharmony_ci#ifndef __ASSEMBLY__ 4062306a36Sopenharmony_ci 4162306a36Sopenharmony_ci# define TASK_SIZE 0x7FFF0000UL 4262306a36Sopenharmony_ci# define TASK_UNMAPPED_BASE (PAGE_ALIGN(TASK_SIZE / 3)) 4362306a36Sopenharmony_ci 4462306a36Sopenharmony_ci/* The Nios processor specific thread struct. */ 4562306a36Sopenharmony_cistruct thread_struct { 4662306a36Sopenharmony_ci struct pt_regs *kregs; 4762306a36Sopenharmony_ci 4862306a36Sopenharmony_ci /* Context switch saved kernel state. */ 4962306a36Sopenharmony_ci unsigned long ksp; 5062306a36Sopenharmony_ci unsigned long kpsr; 5162306a36Sopenharmony_ci}; 5262306a36Sopenharmony_ci 5362306a36Sopenharmony_ci# define INIT_THREAD { \ 5462306a36Sopenharmony_ci .kregs = NULL, \ 5562306a36Sopenharmony_ci .ksp = 0, \ 5662306a36Sopenharmony_ci .kpsr = 0, \ 5762306a36Sopenharmony_ci} 5862306a36Sopenharmony_ci 5962306a36Sopenharmony_ciextern void start_thread(struct pt_regs *regs, unsigned long pc, 6062306a36Sopenharmony_ci unsigned long sp); 6162306a36Sopenharmony_ci 6262306a36Sopenharmony_cistruct task_struct; 6362306a36Sopenharmony_ci 6462306a36Sopenharmony_ciextern unsigned long __get_wchan(struct task_struct *p); 6562306a36Sopenharmony_ci 6662306a36Sopenharmony_ci#define task_pt_regs(p) \ 6762306a36Sopenharmony_ci ((struct pt_regs *)(THREAD_SIZE + task_stack_page(p)) - 1) 6862306a36Sopenharmony_ci 6962306a36Sopenharmony_ci/* Used by procfs */ 7062306a36Sopenharmony_ci#define KSTK_EIP(tsk) ((tsk)->thread.kregs->ea) 7162306a36Sopenharmony_ci#define KSTK_ESP(tsk) ((tsk)->thread.kregs->sp) 7262306a36Sopenharmony_ci 7362306a36Sopenharmony_ci#define cpu_relax() barrier() 7462306a36Sopenharmony_ci 7562306a36Sopenharmony_ci#endif /* __ASSEMBLY__ */ 7662306a36Sopenharmony_ci 7762306a36Sopenharmony_ci#endif /* _ASM_NIOS2_PROCESSOR_H */ 78