12874c5fdSThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-or-later */ 258e0166aSJonas Bonn /* 358e0166aSJonas Bonn * OpenRISC Linux 458e0166aSJonas Bonn * 558e0166aSJonas Bonn * Linux architectural port borrowing liberally from similar works of 658e0166aSJonas Bonn * others. All original copyrights apply as per the original source 758e0166aSJonas Bonn * declaration. 858e0166aSJonas Bonn * 958e0166aSJonas Bonn * OpenRISC implementation: 1058e0166aSJonas Bonn * Copyright (C) 2003 Matjaz Breskvar <phoenix@bsemi.com> 1158e0166aSJonas Bonn * Copyright (C) 2010-2011 Jonas Bonn <jonas@southpole.se> 1258e0166aSJonas Bonn * et al. 1358e0166aSJonas Bonn */ 1458e0166aSJonas Bonn 1558e0166aSJonas Bonn #ifndef __ASM_OPENRISC_PROCESSOR_H 1658e0166aSJonas Bonn #define __ASM_OPENRISC_PROCESSOR_H 1758e0166aSJonas Bonn 1858e0166aSJonas Bonn #include <asm/spr_defs.h> 1958e0166aSJonas Bonn #include <asm/page.h> 2058e0166aSJonas Bonn #include <asm/ptrace.h> 2158e0166aSJonas Bonn 2258e0166aSJonas Bonn #define STACK_TOP TASK_SIZE 2358e0166aSJonas Bonn #define STACK_TOP_MAX STACK_TOP 2458e0166aSJonas Bonn /* Kernel and user SR register setting */ 2558e0166aSJonas Bonn #define KERNEL_SR (SPR_SR_DME | SPR_SR_IME | SPR_SR_ICE \ 2658e0166aSJonas Bonn | SPR_SR_DCE | SPR_SR_SM) 2758e0166aSJonas Bonn #define USER_SR (SPR_SR_DME | SPR_SR_IME | SPR_SR_ICE \ 2858e0166aSJonas Bonn | SPR_SR_DCE | SPR_SR_IEE | SPR_SR_TEE) 2958e0166aSJonas Bonn 3058e0166aSJonas Bonn /* 3158e0166aSJonas Bonn * User space process size. This is hardcoded into a few places, 3258e0166aSJonas Bonn * so don't change it unless you know what you are doing. 3358e0166aSJonas Bonn */ 3458e0166aSJonas Bonn 3558e0166aSJonas Bonn #define TASK_SIZE (0x80000000UL) 3658e0166aSJonas Bonn 3758e0166aSJonas Bonn /* This decides where the kernel will search for a free chunk of vm 3858e0166aSJonas Bonn * space during mmap's. 3958e0166aSJonas Bonn */ 4058e0166aSJonas Bonn #define TASK_UNMAPPED_BASE (TASK_SIZE / 8 * 3) 4158e0166aSJonas Bonn 4258e0166aSJonas Bonn #ifndef __ASSEMBLY__ 4358e0166aSJonas Bonn 4458e0166aSJonas Bonn struct task_struct; 4558e0166aSJonas Bonn 4658e0166aSJonas Bonn struct thread_struct { 4758e0166aSJonas Bonn }; 4858e0166aSJonas Bonn 4958e0166aSJonas Bonn /* 5058e0166aSJonas Bonn * At user->kernel entry, the pt_regs struct is stacked on the top of the 5158e0166aSJonas Bonn * kernel-stack. This macro allows us to find those regs for a task. 5258e0166aSJonas Bonn * Notice that subsequent pt_regs stackings, like recursive interrupts 5358e0166aSJonas Bonn * occurring while we're in the kernel, won't affect this - only the first 5458e0166aSJonas Bonn * user->kernel transition registers are reached by this (i.e. not regs 5558e0166aSJonas Bonn * for running signal handler) 5658e0166aSJonas Bonn */ 5758e0166aSJonas Bonn #define user_regs(thread_info) (((struct pt_regs *)((unsigned long)(thread_info) + THREAD_SIZE - STACK_FRAME_OVERHEAD)) - 1) 5858e0166aSJonas Bonn 5958e0166aSJonas Bonn /* 6058e0166aSJonas Bonn * Dito but for the currently running task 6158e0166aSJonas Bonn */ 6258e0166aSJonas Bonn 6358e0166aSJonas Bonn #define task_pt_regs(task) user_regs(task_thread_info(task)) 6458e0166aSJonas Bonn 6558e0166aSJonas Bonn #define INIT_SP (sizeof(init_stack) + (unsigned long) &init_stack) 6658e0166aSJonas Bonn 6758e0166aSJonas Bonn #define INIT_THREAD { } 6858e0166aSJonas Bonn 6958e0166aSJonas Bonn 701bc0b9fdSJonas Bonn #define KSTK_EIP(tsk) (task_pt_regs(tsk)->pc) 711bc0b9fdSJonas Bonn #define KSTK_ESP(tsk) (task_pt_regs(tsk)->sp) 7258e0166aSJonas Bonn 7358e0166aSJonas Bonn 7458e0166aSJonas Bonn void start_thread(struct pt_regs *regs, unsigned long nip, unsigned long sp); 7542a20f86SKees Cook unsigned long __get_wchan(struct task_struct *p); 76*8d4a1429SStafford Horne void show_registers(struct pt_regs *regs); 7758e0166aSJonas Bonn 789b76beb0SVladimir Murzin #define cpu_relax() barrier() 7958e0166aSJonas Bonn 8058e0166aSJonas Bonn #endif /* __ASSEMBLY__ */ 8158e0166aSJonas Bonn #endif /* __ASM_OPENRISC_PROCESSOR_H */ 82