~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/arch/arc/include/asm/processor.h

Version: ~ [ linux-6.2-rc3 ] ~ [ linux-6.1.5 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.87 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.162 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.228 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.269 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.302 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.8.17 ] ~ [ linux-4.7.10 ] ~ [ linux-4.6.7 ] ~ [ linux-4.5.7 ] ~ [ linux-4.4.302 ] ~ [ linux-4.3.6 ] ~ [ linux-4.2.8 ] ~ [ linux-4.1.52 ] ~ [ linux-4.0.9 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /* SPDX-License-Identifier: GPL-2.0-only */
  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 __ASSEMBLY__
 15 
 16 #include <asm/ptrace.h>
 17 #include <asm/dsp.h>
 18 #include <asm/fpu.h>
 19 
 20 #ifdef CONFIG_ARC_PLAT_EZNPS
 21 struct eznps_dp {
 22         unsigned int eflags;
 23         unsigned int gpa1;
 24 };
 25 #endif
 26 
 27 /* Arch specific stuff which needs to be saved per task.
 28  * However these items are not so important so as to earn a place in
 29  * struct thread_info
 30  */
 31 struct thread_struct {
 32         unsigned long ksp;      /* kernel mode stack pointer */
 33         unsigned long callee_reg;       /* pointer to callee regs */
 34         unsigned long fault_address;    /* dbls as brkpt holder as well */
 35 #ifdef CONFIG_ARC_DSP_SAVE_RESTORE_REGS
 36         struct dsp_callee_regs dsp;
 37 #endif
 38 #ifdef CONFIG_ARC_FPU_SAVE_RESTORE
 39         struct arc_fpu fpu;
 40 #endif
 41 #ifdef CONFIG_ARC_PLAT_EZNPS
 42         struct eznps_dp dp;
 43 #endif
 44 };
 45 
 46 #define INIT_THREAD  {                          \
 47         .ksp = sizeof(init_stack) + (unsigned long) init_stack, \
 48 }
 49 
 50 /* Forward declaration, a strange C thing */
 51 struct task_struct;
 52 
 53 #define task_pt_regs(p) \
 54         ((struct pt_regs *)(THREAD_SIZE + (void *)task_stack_page(p)) - 1)
 55 
 56 /* Free all resources held by a thread */
 57 #define release_thread(thread) do { } while (0)
 58 
 59 /*
 60  * A lot of busy-wait loops in SMP are based off of non-volatile data otherwise
 61  * get optimised away by gcc
 62  */
 63 #ifndef CONFIG_EZNPS_MTM_EXT
 64 
 65 #define cpu_relax()             barrier()
 66 
 67 #else
 68 
 69 #define cpu_relax()     \
 70         __asm__ __volatile__ (".word %0" : : "i"(CTOP_INST_SCHD_RW) : "memory")
 71 
 72 #endif
 73 
 74 #define KSTK_EIP(tsk)   (task_pt_regs(tsk)->ret)
 75 #define KSTK_ESP(tsk)   (task_pt_regs(tsk)->sp)
 76 
 77 /*
 78  * Where about of Task's sp, fp, blink when it was last seen in kernel mode.
 79  * Look in process.c for details of kernel stack layout
 80  */
 81 #define TSK_K_ESP(tsk)          (tsk->thread.ksp)
 82 
 83 #define TSK_K_REG(tsk, off)     (*((unsigned long *)(TSK_K_ESP(tsk) + \
 84                                         sizeof(struct callee_regs) + off)))
 85 
 86 #define TSK_K_BLINK(tsk)        TSK_K_REG(tsk, 4)
 87 #define TSK_K_FP(tsk)           TSK_K_REG(tsk, 0)
 88 
 89 extern void start_thread(struct pt_regs * regs, unsigned long pc,
 90                          unsigned long usp);
 91 
 92 extern unsigned int get_wchan(struct task_struct *p);
 93 
 94 #endif /* !__ASSEMBLY__ */
 95 
 96 /*
 97  * Default System Memory Map on ARC
 98  *
 99  * ---------------------------- (lower 2G, Translated) -------------------------
100  * 0x0000_0000          0x5FFF_FFFF     (user vaddr: TASK_SIZE)
101  * 0x6000_0000          0x6FFF_FFFF     (reserved gutter between U/K)
102  * 0x7000_0000          0x7FFF_FFFF     (kvaddr: vmalloc/modules/pkmap..)
103  *
104  * PAGE_OFFSET ---------------- (Upper 2G, Untranslated) -----------------------
105  * 0x8000_0000          0xBFFF_FFFF     (kernel direct mapped)
106  * 0xC000_0000          0xFFFF_FFFF     (peripheral uncached space)
107  * -----------------------------------------------------------------------------
108  */
109 
110 #define TASK_SIZE       0x60000000
111 
112 #define VMALLOC_START   (PAGE_OFFSET - (CONFIG_ARC_KVADDR_SIZE << 20))
113 
114 /* 1 PGDIR_SIZE each for fixmap/pkmap, 2 PGDIR_SIZE gutter (see asm/highmem.h) */
115 #define VMALLOC_SIZE    ((CONFIG_ARC_KVADDR_SIZE << 20) - PGDIR_SIZE * 4)
116 
117 #define VMALLOC_END     (VMALLOC_START + VMALLOC_SIZE)
118 
119 #define USER_KERNEL_GUTTER    (VMALLOC_START - TASK_SIZE)
120 
121 #ifdef CONFIG_ARC_PLAT_EZNPS
122 /* NPS architecture defines special window of 129M in user address space for
123  * special memory areas, when accessing this window the MMU do not use TLB.
124  * Instead MMU direct the access to:
125  * 0x57f00000:0x57ffffff -- 1M of closely coupled memory (aka CMEM)
126  * 0x58000000:0x5fffffff -- 16 huge pages, 8M each, with fixed map (aka FMTs)
127  *
128  * CMEM - is the fastest memory we got and its size is 16K.
129  * FMT  - is used to map either to internal/external memory.
130  * Internal memory is the second fast memory and its size is 16M
131  * External memory is the biggest memory (16G) and also the slowest.
132  *
133  * STACK_TOP need to be PMD align (21bit) that is why we supply 0x57e00000.
134  */
135 #define STACK_TOP       0x57e00000
136 #else
137 #define STACK_TOP       TASK_SIZE
138 #endif
139 
140 #define STACK_TOP_MAX   STACK_TOP
141 
142 /* This decides where the kernel will search for a free chunk of vm
143  * space during mmap's.
144  */
145 #define TASK_UNMAPPED_BASE      (TASK_SIZE / 3)
146 
147 #endif /* __ASM_ARC_PROCESSOR_H */
148 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | Wiki (Japanese) | Wiki (English) | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

osdn.jp