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

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

Version: ~ [ linux-6.6-rc1 ] ~ [ linux-6.5.2 ] ~ [ linux-6.4.15 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.52 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.131 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.194 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.256 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.294 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.325 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ 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 */
  2 /*
  3  * include/asm-h8300/processor.h
  4  *
  5  * Copyright (C) 2002 Yoshinori Sato
  6  *
  7  * Based on: linux/asm-m68nommu/processor.h
  8  *
  9  * Copyright (C) 1995 Hamish Macdonald
 10  */
 11 
 12 #ifndef __ASM_H8300_PROCESSOR_H
 13 #define __ASM_H8300_PROCESSOR_H
 14 
 15 /*
 16  * Default implementation of macro that returns current
 17  * instruction pointer ("program counter").
 18  */
 19 #define current_text_addr() ({ __label__ _l; _l: &&_l; })
 20 
 21 #include <linux/compiler.h>
 22 #include <asm/segment.h>
 23 #include <asm/ptrace.h>
 24 #include <asm/current.h>
 25 
 26 static inline unsigned long rdusp(void)
 27 {
 28         extern unsigned int     _sw_usp;
 29 
 30         return _sw_usp;
 31 }
 32 
 33 static inline void wrusp(unsigned long usp)
 34 {
 35         extern unsigned int     _sw_usp;
 36 
 37         _sw_usp = usp;
 38 }
 39 
 40 /*
 41  * User space process size: 3.75GB. This is hardcoded into a few places,
 42  * so don't change it unless you know what you are doing.
 43  */
 44 #define TASK_SIZE       (0xFFFFFFFFUL)
 45 
 46 #ifdef __KERNEL__
 47 #define STACK_TOP       TASK_SIZE
 48 #define STACK_TOP_MAX   STACK_TOP
 49 #endif
 50 
 51 /*
 52  * This decides where the kernel will search for a free chunk of vm
 53  * space during mmap's. We won't be using it
 54  */
 55 #define TASK_UNMAPPED_BASE      0
 56 
 57 struct thread_struct {
 58         unsigned long  ksp;             /* kernel stack pointer */
 59         unsigned long  usp;             /* user stack pointer */
 60         unsigned long  ccr;             /* saved status register */
 61         unsigned long  esp0;            /* points to SR of stack frame */
 62         struct {
 63                 unsigned short *addr;
 64                 unsigned short inst;
 65         } breakinfo;
 66 };
 67 
 68 #define INIT_THREAD  {                                          \
 69         .ksp  = sizeof(init_stack) + (unsigned long)init_stack, \
 70         .usp  = 0,                                              \
 71         .ccr  = PS_S,                                           \
 72         .esp0 = 0,                                              \
 73         .breakinfo = {                                          \
 74                 .addr = (unsigned short *)-1,                   \
 75                 .inst = 0                                       \
 76         }                                                       \
 77 }
 78 
 79 /*
 80  * Do necessary setup to start up a newly executed thread.
 81  *
 82  * pass the data segment into user programs if it exists,
 83  * it can't hurt anything as far as I can tell
 84  */
 85 #if defined(CONFIG_CPU_H8300H)
 86 #define start_thread(_regs, _pc, _usp)                          \
 87 do {                                                            \
 88         (_regs)->pc = (_pc);                                    \
 89         (_regs)->ccr = 0x00;       /* clear all flags */        \
 90         (_regs)->er5 = current->mm->start_data; /* GOT base */  \
 91         (_regs)->sp = ((unsigned long)(_usp)) - sizeof(unsigned long) * 3; \
 92 } while (0)
 93 #endif
 94 #if defined(CONFIG_CPU_H8S)
 95 #define start_thread(_regs, _pc, _usp)                          \
 96 do {                                                            \
 97         (_regs)->pc = (_pc);                                    \
 98         (_regs)->ccr = 0x00;       /* clear kernel flag */      \
 99         (_regs)->exr = 0x78;       /* enable all interrupts */  \
100         (_regs)->er5 = current->mm->start_data; /* GOT base */  \
101         /* 14 = space for retaddr(4), vector(4), er0(4) and exr(2) on stack */ \
102         (_regs)->sp = ((unsigned long)(_usp)) - 14;             \
103 } while (0)
104 #endif
105 
106 /* Forward declaration, a strange C thing */
107 struct task_struct;
108 
109 /* Free all resources held by a thread. */
110 static inline void release_thread(struct task_struct *dead_task)
111 {
112 }
113 
114 unsigned long get_wchan(struct task_struct *p);
115 
116 #define KSTK_EIP(tsk)   \
117         ({                       \
118                 unsigned long eip = 0;        \
119                 if ((tsk)->thread.esp0 > PAGE_SIZE &&   \
120                     MAP_NR((tsk)->thread.esp0) < max_mapnr)      \
121                         eip = ((struct pt_regs *) (tsk)->thread.esp0)->pc; \
122                 eip; })
123 
124 #define KSTK_ESP(tsk)   ((tsk) == current ? rdusp() : (tsk)->thread.usp)
125 
126 #define cpu_relax()    barrier()
127 
128 #define HARD_RESET_NOW() ({             \
129         local_irq_disable();            \
130         asm("jmp @@0");                 \
131 })
132 
133 #endif
134 

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

kernel.org | git.kernel.org | LWN.net | Project Home | 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