1d2912cb1SThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-only */ 23be80aaeSVineet Gupta /* 33be80aaeSVineet Gupta * Copyright (C) 2004, 2007-2010, 2011-2012 Synopsys, Inc. (www.synopsys.com) 43be80aaeSVineet Gupta * 53be80aaeSVineet Gupta * vineetg: March 2009 63be80aaeSVineet Gupta * -Implemented task_pt_regs( ) 73be80aaeSVineet Gupta * 83be80aaeSVineet Gupta * Amit Bhor, Sameer Dhavale, Ashwin Chaugule: Codito Technologies 2004 93be80aaeSVineet Gupta */ 103be80aaeSVineet Gupta 113be80aaeSVineet Gupta #ifndef __ASM_ARC_PROCESSOR_H 123be80aaeSVineet Gupta #define __ASM_ARC_PROCESSOR_H 133be80aaeSVineet Gupta 143be80aaeSVineet Gupta #ifndef __ASSEMBLY__ 153be80aaeSVineet Gupta 1616f9afe6SVineet Gupta #include <asm/ptrace.h> 177321e2eaSEugeniy Paltsev #include <asm/dsp.h> 18f05523aaSVineet Gupta #include <asm/fpu.h> 1952e9bae9SVineet Gupta 203be80aaeSVineet Gupta /* Arch specific stuff which needs to be saved per task. 213be80aaeSVineet Gupta * However these items are not so important so as to earn a place in 223be80aaeSVineet Gupta * struct thread_info 233be80aaeSVineet Gupta */ 243be80aaeSVineet Gupta struct thread_struct { 253be80aaeSVineet Gupta unsigned long callee_reg; /* pointer to callee regs */ 263be80aaeSVineet Gupta unsigned long fault_address; /* dbls as brkpt holder as well */ 277321e2eaSEugeniy Paltsev #ifdef CONFIG_ARC_DSP_SAVE_RESTORE_REGS 287321e2eaSEugeniy Paltsev struct dsp_callee_regs dsp; 297321e2eaSEugeniy Paltsev #endif 30bf90e1eaSVineet Gupta #ifdef CONFIG_ARC_FPU_SAVE_RESTORE 31bf90e1eaSVineet Gupta struct arc_fpu fpu; 32bf90e1eaSVineet Gupta #endif 333be80aaeSVineet Gupta }; 343be80aaeSVineet Gupta 35d1d1569eSVineet Gupta #define INIT_THREAD { } 363be80aaeSVineet Gupta 373be80aaeSVineet Gupta /* Forward declaration, a strange C thing */ 383be80aaeSVineet Gupta struct task_struct; 393be80aaeSVineet Gupta 403be80aaeSVineet Gupta #define task_pt_regs(p) \ 41283237a0SVineet Gupta ((struct pt_regs *)(THREAD_SIZE + (void *)task_stack_page(p)) - 1) 423be80aaeSVineet Gupta 4341195d23SVineet Gupta /* 4441195d23SVineet Gupta * A lot of busy-wait loops in SMP are based off of non-volatile data otherwise 4541195d23SVineet Gupta * get optimised away by gcc 4641195d23SVineet Gupta */ 4746c3e6b8STal Zilcer #define cpu_relax() barrier() 483a6bfbc9SDavidlohr Bueso 493be80aaeSVineet Gupta #define KSTK_EIP(tsk) (task_pt_regs(tsk)->ret) 5013648b01SVineet Gupta #define KSTK_ESP(tsk) (task_pt_regs(tsk)->sp) 513be80aaeSVineet Gupta 523be80aaeSVineet Gupta /* 532547476aSAndrea Gelmini * Where about of Task's sp, fp, blink when it was last seen in kernel mode. 5416f9afe6SVineet Gupta * Look in process.c for details of kernel stack layout 553be80aaeSVineet Gupta */ 56*fd476197SVineet Gupta #define TSK_K_ESP(tsk) (task_thread_info(tsk)->ksp) 5716f9afe6SVineet Gupta 581269f4d5SVineet Gupta #define TSK_K_REG(tsk, off) (*((unsigned long *)(TSK_K_ESP(tsk) + \ 5916f9afe6SVineet Gupta sizeof(struct callee_regs) + off))) 6016f9afe6SVineet Gupta 6113648b01SVineet Gupta #define TSK_K_BLINK(tsk) TSK_K_REG(tsk, 4) 6213648b01SVineet Gupta #define TSK_K_FP(tsk) TSK_K_REG(tsk, 0) 633be80aaeSVineet Gupta 642ab402dfSVineet Gupta extern void start_thread(struct pt_regs * regs, unsigned long pc, 652ab402dfSVineet Gupta unsigned long usp); 663be80aaeSVineet Gupta 6742a20f86SKees Cook extern unsigned int __get_wchan(struct task_struct *p); 683be80aaeSVineet Gupta 693be80aaeSVineet Gupta #endif /* !__ASSEMBLY__ */ 703be80aaeSVineet Gupta 714db27dcaSVineet Gupta /* 7215ca68a9SNoam Camus * Default System Memory Map on ARC 734db27dcaSVineet Gupta * 744db27dcaSVineet Gupta * ---------------------------- (lower 2G, Translated) ------------------------- 754db27dcaSVineet Gupta * 0x0000_0000 0x5FFF_FFFF (user vaddr: TASK_SIZE) 764db27dcaSVineet Gupta * 0x6000_0000 0x6FFF_FFFF (reserved gutter between U/K) 774db27dcaSVineet Gupta * 0x7000_0000 0x7FFF_FFFF (kvaddr: vmalloc/modules/pkmap..) 784db27dcaSVineet Gupta * 794db27dcaSVineet Gupta * PAGE_OFFSET ---------------- (Upper 2G, Untranslated) ----------------------- 804db27dcaSVineet Gupta * 0x8000_0000 0xBFFF_FFFF (kernel direct mapped) 814db27dcaSVineet Gupta * 0xC000_0000 0xFFFF_FFFF (peripheral uncached space) 824db27dcaSVineet Gupta * ----------------------------------------------------------------------------- 833be80aaeSVineet Gupta */ 8445890f6dSVineet Gupta 8515ca68a9SNoam Camus #define TASK_SIZE 0x60000000 8615ca68a9SNoam Camus 8715ca68a9SNoam Camus #define VMALLOC_START (PAGE_OFFSET - (CONFIG_ARC_KVADDR_SIZE << 20)) 8815ca68a9SNoam Camus 8915ca68a9SNoam Camus /* 1 PGDIR_SIZE each for fixmap/pkmap, 2 PGDIR_SIZE gutter (see asm/highmem.h) */ 902dde02abSVineet Gupta #define VMALLOC_SIZE ((CONFIG_ARC_KVADDR_SIZE << 20) - PMD_SIZE * 4) 9115ca68a9SNoam Camus 924db27dcaSVineet Gupta #define VMALLOC_END (VMALLOC_START + VMALLOC_SIZE) 933be80aaeSVineet Gupta 9415ca68a9SNoam Camus #define USER_KERNEL_GUTTER (VMALLOC_START - TASK_SIZE) 953be80aaeSVineet Gupta 963be80aaeSVineet Gupta #define STACK_TOP TASK_SIZE 973be80aaeSVineet Gupta #define STACK_TOP_MAX STACK_TOP 983be80aaeSVineet Gupta 993be80aaeSVineet Gupta /* This decides where the kernel will search for a free chunk of vm 1003be80aaeSVineet Gupta * space during mmap's. 1013be80aaeSVineet Gupta */ 1023be80aaeSVineet Gupta #define TASK_UNMAPPED_BASE (TASK_SIZE / 3) 1033be80aaeSVineet Gupta 1043be80aaeSVineet Gupta #endif /* __ASM_ARC_PROCESSOR_H */ 105