1# $NetBSD: genassym.cf,v 1.32 2002/11/09 10:59:52 nisimura Exp $ 2# 3# Copyright (c) 1997 4# Jonathan Stone. All rights reserved. 5# Copyright (c) 1992, 1993 6# The Regents of the University of California. All rights reserved. 7# 8# This code is derived from software contributed to Berkeley by 9# Ralph Campbell. 10# 11# Redistribution and use in source and binary forms, with or without 12# modification, are permitted provided that the following conditions 13# are met: 14# 1. Redistributions of source code must retain the above copyright 15# notice, this list of conditions and the following disclaimer. 16# 2. Redistributions in binary form must reproduce the above copyright 17# notice, this list of conditions and the following disclaimer in the 18# documentation and/or other materials provided with the distribution. 19# 3. All advertising materials mentioning features or use of this software 20# must display the following acknowledgement: 21# This product includes software developed by the University of 22# California, Berkeley and its contributors. 23# 4. Neither the name of the University nor the names of its contributors 24# may be used to endorse or promote products derived from this software 25# without specific prior written permission. 26# 27# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 28# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 29# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 30# ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 31# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 32# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 33# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 34# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 35# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 36# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 37# SUCH DAMAGE. 38# 39# from @(#)genassym.c 8.2 (Berkeley) 9/23/93 40# 41 42include <sys/param.h> 43include <sys/buf.h> 44include <sys/proc.h> 45include <sys/mbuf.h> 46include <sys/user.h> 47 48include <uvm/uvm.h> 49 50include <mips/cpu.h> 51include <mips/cache.h> 52include <mips/regnum.h> 53include <mips/vmparam.h> 54include <mips/pte.h> 55include <mips/locore.h> 56 57define P_FORW offsetof(struct proc, p_forw) 58define P_BACK offsetof(struct proc, p_back) 59define P_PRIORITY offsetof(struct proc, p_priority) 60define P_ADDR offsetof(struct proc, p_addr) 61define P_STAT offsetof(struct proc, p_stat) 62define P_NRAS offsetof(struct proc, p_nras) 63 64define SONPROC SONPROC 65 66define P_MD_REGS offsetof(struct proc, p_md.md_regs) 67define P_MD_UPTE_0 offsetof(struct proc, p_md.md_upte[0]) 68define P_MD_UPTE_1 offsetof(struct proc, p_md.md_upte[1]) 69define P_MD_ASTPENDING offsetof(struct proc, p_md.md_astpending) 70define P_MD_SYSCALL offsetof(struct proc, p_md.md_syscall) 71 72define U_PCB_FPREGS offsetof(struct user, u_pcb.pcb_fpregs) 73define U_PCB_CONTEXT offsetof(struct user, u_pcb.pcb_context) 74define U_PCB_ONFAULT offsetof(struct user, u_pcb.pcb_onfault) 75define U_PCB_PPL offsetof(struct user, u_pcb.pcb_ppl) 76 77define VM_MIN_ADDRESS VM_MIN_ADDRESS 78define VM_MIN_KERNEL_ADDRESS VM_MIN_KERNEL_ADDRESS 79 80define UVM_PAGE_IDLE_ZERO offsetof(struct uvm, page_idle_zero) 81define UVMEXP_SWTCH offsetof(struct uvmexp, swtch) 82 83define SIGFPE SIGFPE 84define SIGILL SIGILL 85define SIGSEGV SIGSEGV 86 87# CPU info 88define CPU_INFO_DIVISOR_DELAY offsetof(struct cpu_info, ci_divisor_delay) 89 90 91# /* XXX */ 92define MIPSX_FLUSHICACHE 0 93define MIPSX_CPU_SWITCH_RESUME sizeof(long *) * 0 94define MIPSX_CPU_IDLE sizeof(long *) * 2 95 96define MIPS1_PG_G MIPS1_PG_G 97define MIPS1_PG_V MIPS1_PG_V 98define MIPS3_PG_G MIPS3_PG_G 99define MIPS3_PG_V MIPS3_PG_V 100define MIPS3_PG_HVPN MIPS3_PG_HVPN 101define MIPS3_PG_ASID MIPS3_PG_ASID 102define MIPS3_PG_ODDPG MIPS3_PG_ODDPG 103 104define FRAME_SIZ sizeof(struct frame) 105define FRAME_ZERO offsetof(struct frame, f_regs[ZERO]) 106define FRAME_AST offsetof(struct frame, f_regs[AST]) 107define FRAME_V0 offsetof(struct frame, f_regs[V0]) 108define FRAME_V1 offsetof(struct frame, f_regs[V1]) 109define FRAME_A0 offsetof(struct frame, f_regs[A0]) 110define FRAME_A1 offsetof(struct frame, f_regs[A1]) 111define FRAME_A2 offsetof(struct frame, f_regs[A2]) 112define FRAME_A3 offsetof(struct frame, f_regs[A3]) 113define FRAME_T0 offsetof(struct frame, f_regs[T0]) 114define FRAME_T1 offsetof(struct frame, f_regs[T1]) 115define FRAME_T2 offsetof(struct frame, f_regs[T2]) 116define FRAME_T3 offsetof(struct frame, f_regs[T3]) 117 118# For old-ABI, these are T4-T7. For new-ABI, these are A4-A7. 119# Use these in code shared by 32-bit and 64-bit processors. 120define FRAME_TA0 offsetof(struct frame, f_regs[TA0]) 121define FRAME_TA1 offsetof(struct frame, f_regs[TA1]) 122define FRAME_TA2 offsetof(struct frame, f_regs[TA2]) 123define FRAME_TA3 offsetof(struct frame, f_regs[TA3]) 124 125#if !defined(__mips_n32) && !defined(__mips_n64) 126# Use these only in code used by 32-bit processors (which cannot 127# use new-ABI). 128define FRAME_T4 offsetof(struct frame, f_regs[T4]) 129define FRAME_T5 offsetof(struct frame, f_regs[T5]) 130define FRAME_T6 offsetof(struct frame, f_regs[T6]) 131define FRAME_T7 offsetof(struct frame, f_regs[T7]) 132#endif 133 134define FRAME_S0 offsetof(struct frame, f_regs[S0]) 135define FRAME_S1 offsetof(struct frame, f_regs[S1]) 136define FRAME_S2 offsetof(struct frame, f_regs[S2]) 137define FRAME_S3 offsetof(struct frame, f_regs[S3]) 138define FRAME_S4 offsetof(struct frame, f_regs[S4]) 139define FRAME_S5 offsetof(struct frame, f_regs[S5]) 140define FRAME_S6 offsetof(struct frame, f_regs[S6]) 141define FRAME_S7 offsetof(struct frame, f_regs[S7]) 142define FRAME_T8 offsetof(struct frame, f_regs[T8]) 143define FRAME_T9 offsetof(struct frame, f_regs[T9]) 144define FRAME_K0 offsetof(struct frame, f_regs[K0]) 145define FRAME_K1 offsetof(struct frame, f_regs[K1]) 146define FRAME_GP offsetof(struct frame, f_regs[GP]) 147define FRAME_SP offsetof(struct frame, f_regs[SP]) 148define FRAME_S8 offsetof(struct frame, f_regs[S8]) 149define FRAME_RA offsetof(struct frame, f_regs[RA]) 150define FRAME_SR offsetof(struct frame, f_regs[SR]) 151define FRAME_MULLO offsetof(struct frame, f_regs[MULLO]) 152define FRAME_MULHI offsetof(struct frame, f_regs[MULHI]) 153define FRAME_BADVADDR offsetof(struct frame, f_regs[BADVADDR]) 154define FRAME_CAUSE offsetof(struct frame, f_regs[CAUSE]) 155define FRAME_EPC offsetof(struct frame, f_regs[PC]) 156define FRAME_PPL offsetof(struct frame, f_ppl) 157 158define FRAME_FSR sizeof(mips_fpreg_t) * 32 159define FRAME_FP0 sizeof(mips_fpreg_t) * 0 160define FRAME_FP1 sizeof(mips_fpreg_t) * 1 161define FRAME_FP2 sizeof(mips_fpreg_t) * 2 162define FRAME_FP3 sizeof(mips_fpreg_t) * 3 163define FRAME_FP4 sizeof(mips_fpreg_t) * 4 164define FRAME_FP5 sizeof(mips_fpreg_t) * 5 165define FRAME_FP6 sizeof(mips_fpreg_t) * 6 166define FRAME_FP7 sizeof(mips_fpreg_t) * 7 167define FRAME_FP8 sizeof(mips_fpreg_t) * 8 168define FRAME_FP9 sizeof(mips_fpreg_t) * 9 169define FRAME_FP10 sizeof(mips_fpreg_t) * 10 170define FRAME_FP11 sizeof(mips_fpreg_t) * 11 171define FRAME_FP12 sizeof(mips_fpreg_t) * 12 172define FRAME_FP13 sizeof(mips_fpreg_t) * 13 173define FRAME_FP14 sizeof(mips_fpreg_t) * 14 174define FRAME_FP15 sizeof(mips_fpreg_t) * 15 175define FRAME_FP16 sizeof(mips_fpreg_t) * 16 176define FRAME_FP17 sizeof(mips_fpreg_t) * 17 177define FRAME_FP18 sizeof(mips_fpreg_t) * 18 178define FRAME_FP19 sizeof(mips_fpreg_t) * 19 179define FRAME_FP20 sizeof(mips_fpreg_t) * 20 180define FRAME_FP21 sizeof(mips_fpreg_t) * 21 181define FRAME_FP22 sizeof(mips_fpreg_t) * 22 182define FRAME_FP23 sizeof(mips_fpreg_t) * 23 183define FRAME_FP24 sizeof(mips_fpreg_t) * 24 184define FRAME_FP25 sizeof(mips_fpreg_t) * 25 185define FRAME_FP26 sizeof(mips_fpreg_t) * 26 186define FRAME_FP27 sizeof(mips_fpreg_t) * 27 187define FRAME_FP28 sizeof(mips_fpreg_t) * 28 188define FRAME_FP29 sizeof(mips_fpreg_t) * 29 189define FRAME_FP30 sizeof(mips_fpreg_t) * 30 190define FRAME_FP31 sizeof(mips_fpreg_t) * 31 191 192 193#define KERNFRAME_SIZ (sizeof(register_t) * (6 + 2 ) + sizeof(mips_reg_t) * (17 + 5)) 194define KERNFRAME_SIZ sizeof(struct kernframe) 195define KERNFRAME_ARG5 offsetof(struct kernframe, cf_args[4]) 196define KERNFRAME_ARG6 offsetof(struct kernframe, cf_args[5]) 197define KERNFRAME_SP offsetof(struct kernframe, cf_sp) 198define KERNFRAME_RA offsetof(struct kernframe, cf_ra) 199 200# offset of trapframe in struct kernframe 201define TF_BASE offsetof(struct kernframe, cf_frame) 202 203define TF_REG_AST offsetof(struct trapframe, tf_regs[TF_AST]) 204define TF_REG_V0 offsetof(struct trapframe, tf_regs[TF_V0]) 205define TF_REG_V1 offsetof(struct trapframe, tf_regs[TF_V1]) 206define TF_REG_A0 offsetof(struct trapframe, tf_regs[TF_A0]) 207define TF_REG_A1 offsetof(struct trapframe, tf_regs[TF_A1]) 208define TF_REG_A2 offsetof(struct trapframe, tf_regs[TF_A2]) 209define TF_REG_A3 offsetof(struct trapframe, tf_regs[TF_A3]) 210define TF_REG_T0 offsetof(struct trapframe, tf_regs[TF_T0]) 211define TF_REG_T1 offsetof(struct trapframe, tf_regs[TF_T1]) 212define TF_REG_T2 offsetof(struct trapframe, tf_regs[TF_T2]) 213define TF_REG_T3 offsetof(struct trapframe, tf_regs[TF_T3]) 214 215# For old-ABI, these are T4-T7. For new-ABI, these are A4-A7. 216# Use these in code shared by 32-bit and 64-bit processors. 217define TF_REG_TA0 offsetof(struct trapframe, tf_regs[TF_TA0]) 218define TF_REG_TA1 offsetof(struct trapframe, tf_regs[TF_TA1]) 219define TF_REG_TA2 offsetof(struct trapframe, tf_regs[TF_TA2]) 220define TF_REG_TA3 offsetof(struct trapframe, tf_regs[TF_TA3]) 221 222if !defined(__mips_n32) && !defined(__mips_n64) 223# Use these only in code used by 32-bit processors (which cannot 224# use new-ABI). 225define TF_REG_T4 offsetof(struct trapframe, tf_regs[TF_T4]) 226define TF_REG_T5 offsetof(struct trapframe, tf_regs[TF_T5]) 227define TF_REG_T6 offsetof(struct trapframe, tf_regs[TF_T6]) 228define TF_REG_T7 offsetof(struct trapframe, tf_regs[TF_T7]) 229endif 230 231define TF_REG_T8 offsetof(struct trapframe, tf_regs[TF_T8]) 232define TF_REG_T9 offsetof(struct trapframe, tf_regs[TF_T9]) 233define TF_REG_RA offsetof(struct trapframe, tf_regs[TF_RA]) 234define TF_REG_SR offsetof(struct trapframe, tf_regs[TF_SR]) 235define TF_REG_MULLO offsetof(struct trapframe, tf_regs[TF_MULLO]) 236define TF_REG_MULHI offsetof(struct trapframe, tf_regs[TF_MULHI]) 237define TF_REG_EPC offsetof(struct trapframe, tf_regs[TF_EPC]) 238define TF_PPL offsetof(struct trapframe, tf_ppl) 239 240define CTXSWFRAME_SIZ sizeof(label_t) 241define SF_REG_SR offsetof(label_t, val[11]) 242define SF_REG_RA offsetof(label_t, val[10]) 243define SF_REG_S0 offsetof(label_t, val[0]) 244define SF_REG_S1 offsetof(label_t, val[1]) 245define SF_REG_S2 offsetof(label_t, val[2]) 246define SF_REG_S3 offsetof(label_t, val[3]) 247define SF_REG_S4 offsetof(label_t, val[4]) 248define SF_REG_S5 offsetof(label_t, val[5]) 249define SF_REG_S6 offsetof(label_t, val[6]) 250define SF_REG_S7 offsetof(label_t, val[7]) 251define SF_REG_SP offsetof(label_t, val[8]) 252define SF_REG_S8 offsetof(label_t, val[9]) 253