1/* 2 * arch/score/kernel/asm-offsets.c 3 * 4 * Score Processor version. 5 * 6 * Copyright (C) 2009 Sunplus Core Technology Co., Ltd. 7 * Chen Liqin <liqin.chen@sunplusct.com> 8 * Lennox Wu <lennox.wu@sunplusct.com> 9 * 10 * This program is free software; you can redistribute it and/or modify 11 * it under the terms of the GNU General Public License as published by 12 * the Free Software Foundation; either version 2 of the License, or 13 * (at your option) any later version. 14 * 15 * This program is distributed in the hope that it will be useful, 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 * GNU General Public License for more details. 19 * 20 * You should have received a copy of the GNU General Public License 21 * along with this program; if not, see the file COPYING, or write 22 * to the Free Software Foundation, Inc., 23 * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 24 */ 25 26#include <linux/kbuild.h> 27#include <linux/interrupt.h> 28#include <linux/mm.h> 29#include <linux/sched.h> 30 31#include <asm-generic/cmpxchg-local.h> 32 33void output_ptreg_defines(void) 34{ 35 COMMENT("SCORE pt_regs offsets."); 36 OFFSET(PT_R0, pt_regs, regs[0]); 37 OFFSET(PT_R1, pt_regs, regs[1]); 38 OFFSET(PT_R2, pt_regs, regs[2]); 39 OFFSET(PT_R3, pt_regs, regs[3]); 40 OFFSET(PT_R4, pt_regs, regs[4]); 41 OFFSET(PT_R5, pt_regs, regs[5]); 42 OFFSET(PT_R6, pt_regs, regs[6]); 43 OFFSET(PT_R7, pt_regs, regs[7]); 44 OFFSET(PT_R8, pt_regs, regs[8]); 45 OFFSET(PT_R9, pt_regs, regs[9]); 46 OFFSET(PT_R10, pt_regs, regs[10]); 47 OFFSET(PT_R11, pt_regs, regs[11]); 48 OFFSET(PT_R12, pt_regs, regs[12]); 49 OFFSET(PT_R13, pt_regs, regs[13]); 50 OFFSET(PT_R14, pt_regs, regs[14]); 51 OFFSET(PT_R15, pt_regs, regs[15]); 52 OFFSET(PT_R16, pt_regs, regs[16]); 53 OFFSET(PT_R17, pt_regs, regs[17]); 54 OFFSET(PT_R18, pt_regs, regs[18]); 55 OFFSET(PT_R19, pt_regs, regs[19]); 56 OFFSET(PT_R20, pt_regs, regs[20]); 57 OFFSET(PT_R21, pt_regs, regs[21]); 58 OFFSET(PT_R22, pt_regs, regs[22]); 59 OFFSET(PT_R23, pt_regs, regs[23]); 60 OFFSET(PT_R24, pt_regs, regs[24]); 61 OFFSET(PT_R25, pt_regs, regs[25]); 62 OFFSET(PT_R26, pt_regs, regs[26]); 63 OFFSET(PT_R27, pt_regs, regs[27]); 64 OFFSET(PT_R28, pt_regs, regs[28]); 65 OFFSET(PT_R29, pt_regs, regs[29]); 66 OFFSET(PT_R30, pt_regs, regs[30]); 67 OFFSET(PT_R31, pt_regs, regs[31]); 68 69 OFFSET(PT_ORIG_R4, pt_regs, orig_r4); 70 OFFSET(PT_ORIG_R7, pt_regs, orig_r7); 71 OFFSET(PT_CEL, pt_regs, cel); 72 OFFSET(PT_CEH, pt_regs, ceh); 73 OFFSET(PT_SR0, pt_regs, sr0); 74 OFFSET(PT_SR1, pt_regs, sr1); 75 OFFSET(PT_SR2, pt_regs, sr2); 76 OFFSET(PT_EPC, pt_regs, cp0_epc); 77 OFFSET(PT_EMA, pt_regs, cp0_ema); 78 OFFSET(PT_PSR, pt_regs, cp0_psr); 79 OFFSET(PT_ECR, pt_regs, cp0_ecr); 80 OFFSET(PT_CONDITION, pt_regs, cp0_condition); 81 OFFSET(PT_IS_SYSCALL, pt_regs, is_syscall); 82 83 DEFINE(PT_SIZE, sizeof(struct pt_regs)); 84 BLANK(); 85} 86 87void output_task_defines(void) 88{ 89 COMMENT("SCORE task_struct offsets."); 90 OFFSET(TASK_STATE, task_struct, state); 91 OFFSET(TASK_THREAD_INFO, task_struct, stack); 92 OFFSET(TASK_FLAGS, task_struct, flags); 93 OFFSET(TASK_MM, task_struct, mm); 94 OFFSET(TASK_PID, task_struct, pid); 95 DEFINE(TASK_STRUCT_SIZE, sizeof(struct task_struct)); 96 BLANK(); 97} 98 99void output_thread_info_defines(void) 100{ 101 COMMENT("SCORE thread_info offsets."); 102 OFFSET(TI_TASK, thread_info, task); 103 OFFSET(TI_FLAGS, thread_info, flags); 104 OFFSET(TI_TP_VALUE, thread_info, tp_value); 105 OFFSET(TI_CPU, thread_info, cpu); 106 OFFSET(TI_PRE_COUNT, thread_info, preempt_count); 107 OFFSET(TI_ADDR_LIMIT, thread_info, addr_limit); 108 OFFSET(TI_REGS, thread_info, regs); 109 DEFINE(KERNEL_STACK_SIZE, THREAD_SIZE); 110 DEFINE(KERNEL_STACK_MASK, THREAD_MASK); 111 BLANK(); 112} 113 114void output_thread_defines(void) 115{ 116 COMMENT("SCORE specific thread_struct offsets."); 117 OFFSET(THREAD_REG0, task_struct, thread.reg0); 118 OFFSET(THREAD_REG2, task_struct, thread.reg2); 119 OFFSET(THREAD_REG3, task_struct, thread.reg3); 120 OFFSET(THREAD_REG12, task_struct, thread.reg12); 121 OFFSET(THREAD_REG13, task_struct, thread.reg13); 122 OFFSET(THREAD_REG14, task_struct, thread.reg14); 123 OFFSET(THREAD_REG15, task_struct, thread.reg15); 124 OFFSET(THREAD_REG16, task_struct, thread.reg16); 125 OFFSET(THREAD_REG17, task_struct, thread.reg17); 126 OFFSET(THREAD_REG18, task_struct, thread.reg18); 127 OFFSET(THREAD_REG19, task_struct, thread.reg19); 128 OFFSET(THREAD_REG20, task_struct, thread.reg20); 129 OFFSET(THREAD_REG21, task_struct, thread.reg21); 130 OFFSET(THREAD_REG29, task_struct, thread.reg29); 131 132 OFFSET(THREAD_PSR, task_struct, thread.cp0_psr); 133 OFFSET(THREAD_EMA, task_struct, thread.cp0_ema); 134 OFFSET(THREAD_BADUADDR, task_struct, thread.cp0_baduaddr); 135 OFFSET(THREAD_ECODE, task_struct, thread.error_code); 136 OFFSET(THREAD_TRAPNO, task_struct, thread.trap_no); 137 BLANK(); 138} 139 140void output_mm_defines(void) 141{ 142 COMMENT("Size of struct page"); 143 DEFINE(STRUCT_PAGE_SIZE, sizeof(struct page)); 144 BLANK(); 145 COMMENT("Linux mm_struct offsets."); 146 OFFSET(MM_USERS, mm_struct, mm_users); 147 OFFSET(MM_PGD, mm_struct, pgd); 148 OFFSET(MM_CONTEXT, mm_struct, context); 149 BLANK(); 150 DEFINE(_PAGE_SIZE, PAGE_SIZE); 151 DEFINE(_PAGE_SHIFT, PAGE_SHIFT); 152 BLANK(); 153 DEFINE(_PGD_T_SIZE, sizeof(pgd_t)); 154 DEFINE(_PTE_T_SIZE, sizeof(pte_t)); 155 BLANK(); 156 DEFINE(_PGD_ORDER, PGD_ORDER); 157 DEFINE(_PTE_ORDER, PTE_ORDER); 158 BLANK(); 159 DEFINE(_PGDIR_SHIFT, PGDIR_SHIFT); 160 BLANK(); 161 DEFINE(_PTRS_PER_PGD, PTRS_PER_PGD); 162 DEFINE(_PTRS_PER_PTE, PTRS_PER_PTE); 163 BLANK(); 164} 165 166void output_sc_defines(void) 167{ 168 COMMENT("Linux sigcontext offsets."); 169 OFFSET(SC_REGS, sigcontext, sc_regs); 170 OFFSET(SC_MDCEH, sigcontext, sc_mdceh); 171 OFFSET(SC_MDCEL, sigcontext, sc_mdcel); 172 OFFSET(SC_PC, sigcontext, sc_pc); 173 OFFSET(SC_PSR, sigcontext, sc_psr); 174 OFFSET(SC_ECR, sigcontext, sc_ecr); 175 OFFSET(SC_EMA, sigcontext, sc_ema); 176 BLANK(); 177} 178 179void output_signal_defined(void) 180{ 181 COMMENT("Linux signal numbers."); 182 DEFINE(_SIGHUP, SIGHUP); 183 DEFINE(_SIGINT, SIGINT); 184 DEFINE(_SIGQUIT, SIGQUIT); 185 DEFINE(_SIGILL, SIGILL); 186 DEFINE(_SIGTRAP, SIGTRAP); 187 DEFINE(_SIGIOT, SIGIOT); 188 DEFINE(_SIGABRT, SIGABRT); 189 DEFINE(_SIGFPE, SIGFPE); 190 DEFINE(_SIGKILL, SIGKILL); 191 DEFINE(_SIGBUS, SIGBUS); 192 DEFINE(_SIGSEGV, SIGSEGV); 193 DEFINE(_SIGSYS, SIGSYS); 194 DEFINE(_SIGPIPE, SIGPIPE); 195 DEFINE(_SIGALRM, SIGALRM); 196 DEFINE(_SIGTERM, SIGTERM); 197 DEFINE(_SIGUSR1, SIGUSR1); 198 DEFINE(_SIGUSR2, SIGUSR2); 199 DEFINE(_SIGCHLD, SIGCHLD); 200 DEFINE(_SIGPWR, SIGPWR); 201 DEFINE(_SIGWINCH, SIGWINCH); 202 DEFINE(_SIGURG, SIGURG); 203 DEFINE(_SIGIO, SIGIO); 204 DEFINE(_SIGSTOP, SIGSTOP); 205 DEFINE(_SIGTSTP, SIGTSTP); 206 DEFINE(_SIGCONT, SIGCONT); 207 DEFINE(_SIGTTIN, SIGTTIN); 208 DEFINE(_SIGTTOU, SIGTTOU); 209 DEFINE(_SIGVTALRM, SIGVTALRM); 210 DEFINE(_SIGPROF, SIGPROF); 211 DEFINE(_SIGXCPU, SIGXCPU); 212 DEFINE(_SIGXFSZ, SIGXFSZ); 213 BLANK(); 214} 215