| 1 |
|
| 2 | |
| 3 | * Copyright (C) 2004, 2007-2010, 2011-2012 Synopsys, Inc. (www.synopsys.com)
|
| 4 | *
|
| 5 | * vineetg: March 2009
|
| 6 | * -Implemented task_pt_regs( )
|
| 7 | *
|
| 8 | * Amit Bhor, Sameer Dhavale, Ashwin Chaugule: Codito Technologies 2004
|
| 9 |
|
| 10 |
|
| 11 | #ifndef __ASM_ARC_PROCESSOR_H
|
| 12 | #define __ASM_ARC_PROCESSOR_H
|
| 13 |
|
| 14 | #ifndef __ASSEMBLER__
|
| 15 |
|
| 16 | #include <asm/ptrace.h>
|
| 17 | #include <asm/dsp.h>
|
| 18 | #include <asm/fpu.h>
|
| 19 |
|
| 20 | |
| 21 | * However these items are not so important so as to earn a place in
|
| 22 | * struct thread_info
|
| 23 |
|
| 24 | struct thread_struct {
|
| 25 | unsigned long callee_reg;
|
| 26 | unsigned long fault_address;
|
| 27 | #ifdef CONFIG_ARC_DSP_SAVE_RESTORE_REGS
|
| 28 | struct dsp_callee_regs dsp;
|
| 29 | #endif
|
| 30 | #ifdef CONFIG_ARC_FPU_SAVE_RESTORE
|
| 31 | struct arc_fpu fpu;
|
| 32 | #endif
|
| 33 | };
|
| 34 |
|
| 35 | #define INIT_THREAD { }
|
| 36 |
|
| 37 |
|
| 38 | struct task_struct;
|
| 39 |
|
| 40 | #define task_pt_regs(p) \
|
| 41 | ((struct pt_regs *)(THREAD_SIZE + (void *)task_stack_page(p)) - 1)
|
| 42 |
|
| 43 | |
| 44 | * A lot of busy-wait loops in SMP are based off of non-volatile data otherwise
|
| 45 | * get optimised away by gcc
|
| 46 |
|
| 47 | #define cpu_relax() barrier()
|
| 48 |
|
| 49 | #define KSTK_EIP(tsk) (task_pt_regs(tsk)->ret)
|
| 50 | #define KSTK_ESP(tsk) (task_pt_regs(tsk)->sp)
|
| 51 |
|
| 52 | |
| 53 | * Where about of Task's sp, fp, blink when it was last seen in kernel mode.
|
| 54 | * Look in process.c for details of kernel stack layout
|
| 55 |
|
| 56 | #define TSK_K_ESP(tsk) (task_thread_info(tsk)->ksp)
|
| 57 |
|
| 58 | #define TSK_K_REG(tsk, off) (*((unsigned long *)(TSK_K_ESP(tsk) + \
|
| 59 | sizeof(struct callee_regs) + off)))
|
| 60 |
|
| 61 | #define TSK_K_BLINK(tsk) TSK_K_REG(tsk, 4)
|
| 62 | #define TSK_K_FP(tsk) TSK_K_REG(tsk, 0)
|
| 63 |
|
| 64 | extern void start_thread(struct pt_regs * regs, unsigned long pc,
|
| 65 | unsigned long usp);
|
| 66 |
|
| 67 | extern unsigned int __get_wchan(struct task_struct *p);
|
| 68 |
|
| 69 | #endif
|
| 70 |
|
| 71 | |
| 72 | * Default System Memory Map on ARC
|
| 73 | *
|
| 74 | * ---------------------------- (lower 2G, Translated) -------------------------
|
| 75 | * 0x0000_0000 0x5FFF_FFFF (user vaddr: TASK_SIZE)
|
| 76 | * 0x6000_0000 0x6FFF_FFFF (reserved gutter between U/K)
|
| 77 | * 0x7000_0000 0x7FFF_FFFF (kvaddr: vmalloc/modules/pkmap..)
|
| 78 | *
|
| 79 | * PAGE_OFFSET ---------------- (Upper 2G, Untranslated) -----------------------
|
| 80 | * 0x8000_0000 0xBFFF_FFFF (kernel direct mapped)
|
| 81 | * 0xC000_0000 0xFFFF_FFFF (peripheral uncached space)
|
| 82 | * -----------------------------------------------------------------------------
|
| 83 |
|
| 84 |
|
| 85 | #define TASK_SIZE 0x60000000
|
| 86 |
|
| 87 | #define VMALLOC_START (PAGE_OFFSET - (CONFIG_ARC_KVADDR_SIZE << 20))
|
| 88 |
|
| 89 |
|
| 90 | #define VMALLOC_SIZE ((CONFIG_ARC_KVADDR_SIZE << 20) - PMD_SIZE * 4)
|
| 91 |
|
| 92 | #define VMALLOC_END (VMALLOC_START + VMALLOC_SIZE)
|
| 93 |
|
| 94 | #define USER_KERNEL_GUTTER (VMALLOC_START - TASK_SIZE)
|
| 95 |
|
| 96 | #define STACK_TOP TASK_SIZE
|
| 97 | #define STACK_TOP_MAX STACK_TOP
|
| 98 |
|
| 99 | |
| 100 | * space during mmap's.
|
| 101 |
|
| 102 | #define TASK_UNMAPPED_BASE (TASK_SIZE / 3)
|
| 103 |
|
| 104 | #endif
|