# $NetBSD: genassym.cf,v 1.44 2008/09/20 18:29:05 tsutsui Exp $ # # Copyright (c) 1992, 1993 # The Regents of the University of California. All rights reserved. # # This code is derived from software contributed to Berkeley by # Ralph Campbell. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. Neither the name of the University nor the names of its contributors # may be used to endorse or promote products derived from this software # without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # # from @(#)genassym.c 8.2 (Berkeley) 9/23/93 # # # Copyright (c) 1997 # Jonathan Stone. All rights reserved. # # This code is derived from software contributed to Berkeley by # Ralph Campbell. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # 3. All advertising materials mentioning features or use of this software # must display the following acknowledgement: # This product includes software developed by the University of # California, Berkeley and its contributors. # 4. Neither the name of the University nor the names of its contributors # may be used to endorse or promote products derived from this software # without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # # from @(#)genassym.c 8.2 (Berkeley) 9/23/93 # quote #define __MUTEX_PRIVATE 1 include <sys/param.h> include <sys/buf.h> include <sys/proc.h> include <sys/mbuf.h> include <sys/user.h> include <sys/mutex.h> include <uvm/uvm.h> include <mips/cpu.h> include <mips/cache.h> include <mips/regnum.h> include <mips/vmparam.h> include <mips/pte.h> include <mips/locore.h> define PAGE_SIZE PAGE_SIZE # Important offsets into the lwp and proc structs & associated constants define L_ADDR offsetof(struct lwp, l_addr) define L_PRIORITY offsetof(struct lwp, l_priority) define L_WCHAN offsetof(struct lwp, l_wchan) define L_STAT offsetof(struct lwp, l_stat) define L_PROC offsetof(struct lwp, l_proc) # Process status constants define L_CPU offsetof(struct lwp, l_cpu) define L_MD_REGS offsetof(struct lwp, l_md.md_regs) define L_MD_UPTE_0 offsetof(struct lwp, l_md.md_upte[0]) define L_MD_UPTE_1 offsetof(struct lwp, l_md.md_upte[1]) define L_MD_ASTPENDING offsetof(struct lwp, l_md.md_astpending) define P_RASLIST offsetof(struct proc, p_raslist) define P_MD_SYSCALL offsetof(struct proc, p_md.md_syscall) define U_PCB_FPREGS offsetof(struct user, u_pcb.pcb_fpregs) define U_PCB_CONTEXT offsetof(struct user, u_pcb.pcb_context) define U_PCB_ONFAULT offsetof(struct user, u_pcb.pcb_onfault) define U_PCB_PPL offsetof(struct user, u_pcb.pcb_ppl) define VM_MIN_ADDRESS VM_MIN_ADDRESS define VM_MIN_KERNEL_ADDRESS VM_MIN_KERNEL_ADDRESS define UVMEXP_SWTCH offsetof(struct uvmexp, swtch) define SIGFPE SIGFPE define SIGILL SIGILL define SIGSEGV SIGSEGV # CPU info define CPU_INFO_DIVISOR_DELAY offsetof(struct cpu_info, ci_divisor_delay) define CPU_INFO_MTX_COUNT offsetof(struct cpu_info, ci_mtx_count) define CPU_INFO_MTX_OLDSPL offsetof(struct cpu_info, ci_mtx_oldspl) # /* XXX */ define MIPSX_FLUSHICACHE 0 define MIPSX_CPU_SWITCH_RESUME sizeof(long *) * 0 define MIPSX_CPU_IDLE sizeof(long *) * 2 define MIPS1_PG_G MIPS1_PG_G define MIPS1_PG_V MIPS1_PG_V define MIPS3_PG_G MIPS3_PG_G define MIPS3_PG_V MIPS3_PG_V define MIPS3_PG_HVPN MIPS3_PG_HVPN define MIPS3_PG_ASID MIPS3_PG_ASID define MIPS3_PG_ODDPG MIPS3_PG_ODDPG define FRAME_SIZ sizeof(struct frame) define FRAME_ZERO offsetof(struct frame, f_regs[_R_ZERO]) define FRAME_AST offsetof(struct frame, f_regs[_R_AST]) define FRAME_V0 offsetof(struct frame, f_regs[_R_V0]) define FRAME_V1 offsetof(struct frame, f_regs[_R_V1]) define FRAME_A0 offsetof(struct frame, f_regs[_R_A0]) define FRAME_A1 offsetof(struct frame, f_regs[_R_A1]) define FRAME_A2 offsetof(struct frame, f_regs[_R_A2]) define FRAME_A3 offsetof(struct frame, f_regs[_R_A3]) define FRAME_T0 offsetof(struct frame, f_regs[_R_T0]) define FRAME_T1 offsetof(struct frame, f_regs[_R_T1]) define FRAME_T2 offsetof(struct frame, f_regs[_R_T2]) define FRAME_T3 offsetof(struct frame, f_regs[_R_T3]) # For old-ABI, these are T4-T7. For new-ABI, these are A4-A7. # Use these in code shared by 32-bit and 64-bit processors. define FRAME_TA0 offsetof(struct frame, f_regs[_R_TA0]) define FRAME_TA1 offsetof(struct frame, f_regs[_R_TA1]) define FRAME_TA2 offsetof(struct frame, f_regs[_R_TA2]) define FRAME_TA3 offsetof(struct frame, f_regs[_R_TA3]) if !defined(__mips_n32) && !defined(__mips_n64) # Use these only in code used by 32-bit processors (which cannot # use new-ABI). define FRAME_T4 offsetof(struct frame, f_regs[_R_T4]) define FRAME_T5 offsetof(struct frame, f_regs[_R_T5]) define FRAME_T6 offsetof(struct frame, f_regs[_R_T6]) define FRAME_T7 offsetof(struct frame, f_regs[_R_T7]) endif define FRAME_S0 offsetof(struct frame, f_regs[_R_S0]) define FRAME_S1 offsetof(struct frame, f_regs[_R_S1]) define FRAME_S2 offsetof(struct frame, f_regs[_R_S2]) define FRAME_S3 offsetof(struct frame, f_regs[_R_S3]) define FRAME_S4 offsetof(struct frame, f_regs[_R_S4]) define FRAME_S5 offsetof(struct frame, f_regs[_R_S5]) define FRAME_S6 offsetof(struct frame, f_regs[_R_S6]) define FRAME_S7 offsetof(struct frame, f_regs[_R_S7]) define FRAME_T8 offsetof(struct frame, f_regs[_R_T8]) define FRAME_T9 offsetof(struct frame, f_regs[_R_T9]) define FRAME_K0 offsetof(struct frame, f_regs[_R_K0]) define FRAME_K1 offsetof(struct frame, f_regs[_R_K1]) define FRAME_GP offsetof(struct frame, f_regs[_R_GP]) define FRAME_SP offsetof(struct frame, f_regs[_R_SP]) define FRAME_S8 offsetof(struct frame, f_regs[_R_S8]) define FRAME_RA offsetof(struct frame, f_regs[_R_RA]) define FRAME_SR offsetof(struct frame, f_regs[_R_SR]) define FRAME_MULLO offsetof(struct frame, f_regs[_R_MULLO]) define FRAME_MULHI offsetof(struct frame, f_regs[_R_MULHI]) define FRAME_BADVADDR offsetof(struct frame, f_regs[_R_BADVADDR]) define FRAME_CAUSE offsetof(struct frame, f_regs[_R_CAUSE]) define FRAME_EPC offsetof(struct frame, f_regs[_R_PC]) define FRAME_PPL offsetof(struct frame, f_ppl) define FRAME_FSR sizeof(mips_fpreg_t) * 32 define FRAME_FP0 sizeof(mips_fpreg_t) * 0 define FRAME_FP1 sizeof(mips_fpreg_t) * 1 define FRAME_FP2 sizeof(mips_fpreg_t) * 2 define FRAME_FP3 sizeof(mips_fpreg_t) * 3 define FRAME_FP4 sizeof(mips_fpreg_t) * 4 define FRAME_FP5 sizeof(mips_fpreg_t) * 5 define FRAME_FP6 sizeof(mips_fpreg_t) * 6 define FRAME_FP7 sizeof(mips_fpreg_t) * 7 define FRAME_FP8 sizeof(mips_fpreg_t) * 8 define FRAME_FP9 sizeof(mips_fpreg_t) * 9 define FRAME_FP10 sizeof(mips_fpreg_t) * 10 define FRAME_FP11 sizeof(mips_fpreg_t) * 11 define FRAME_FP12 sizeof(mips_fpreg_t) * 12 define FRAME_FP13 sizeof(mips_fpreg_t) * 13 define FRAME_FP14 sizeof(mips_fpreg_t) * 14 define FRAME_FP15 sizeof(mips_fpreg_t) * 15 define FRAME_FP16 sizeof(mips_fpreg_t) * 16 define FRAME_FP17 sizeof(mips_fpreg_t) * 17 define FRAME_FP18 sizeof(mips_fpreg_t) * 18 define FRAME_FP19 sizeof(mips_fpreg_t) * 19 define FRAME_FP20 sizeof(mips_fpreg_t) * 20 define FRAME_FP21 sizeof(mips_fpreg_t) * 21 define FRAME_FP22 sizeof(mips_fpreg_t) * 22 define FRAME_FP23 sizeof(mips_fpreg_t) * 23 define FRAME_FP24 sizeof(mips_fpreg_t) * 24 define FRAME_FP25 sizeof(mips_fpreg_t) * 25 define FRAME_FP26 sizeof(mips_fpreg_t) * 26 define FRAME_FP27 sizeof(mips_fpreg_t) * 27 define FRAME_FP28 sizeof(mips_fpreg_t) * 28 define FRAME_FP29 sizeof(mips_fpreg_t) * 29 define FRAME_FP30 sizeof(mips_fpreg_t) * 30 define FRAME_FP31 sizeof(mips_fpreg_t) * 31 #define KERNFRAME_SIZ (sizeof(register_t) * (6 + 2 ) + sizeof(mips_reg_t) * (17 + 5)) define KERNFRAME_SIZ sizeof(struct kernframe) define KERNFRAME_ARG5 offsetof(struct kernframe, cf_args[4]) define KERNFRAME_ARG6 offsetof(struct kernframe, cf_args[5]) define KERNFRAME_SP offsetof(struct kernframe, cf_sp) define KERNFRAME_RA offsetof(struct kernframe, cf_ra) # offset of trapframe in struct kernframe define TF_BASE offsetof(struct kernframe, cf_frame) define TF_REG_AST offsetof(struct trapframe, tf_regs[TF_AST]) define TF_REG_V0 offsetof(struct trapframe, tf_regs[TF_V0]) define TF_REG_V1 offsetof(struct trapframe, tf_regs[TF_V1]) define TF_REG_A0 offsetof(struct trapframe, tf_regs[TF_A0]) define TF_REG_A1 offsetof(struct trapframe, tf_regs[TF_A1]) define TF_REG_A2 offsetof(struct trapframe, tf_regs[TF_A2]) define TF_REG_A3 offsetof(struct trapframe, tf_regs[TF_A3]) define TF_REG_T0 offsetof(struct trapframe, tf_regs[TF_T0]) define TF_REG_T1 offsetof(struct trapframe, tf_regs[TF_T1]) define TF_REG_T2 offsetof(struct trapframe, tf_regs[TF_T2]) define TF_REG_T3 offsetof(struct trapframe, tf_regs[TF_T3]) # For old-ABI, these are T4-T7. For new-ABI, these are A4-A7. # Use these in code shared by 32-bit and 64-bit processors. define TF_REG_TA0 offsetof(struct trapframe, tf_regs[TF_TA0]) define TF_REG_TA1 offsetof(struct trapframe, tf_regs[TF_TA1]) define TF_REG_TA2 offsetof(struct trapframe, tf_regs[TF_TA2]) define TF_REG_TA3 offsetof(struct trapframe, tf_regs[TF_TA3]) if !defined(__mips_n32) && !defined(__mips_n64) # Use these only in code used by 32-bit processors (which cannot # use new-ABI). define TF_REG_T4 offsetof(struct trapframe, tf_regs[TF_T4]) define TF_REG_T5 offsetof(struct trapframe, tf_regs[TF_T5]) define TF_REG_T6 offsetof(struct trapframe, tf_regs[TF_T6]) define TF_REG_T7 offsetof(struct trapframe, tf_regs[TF_T7]) endif define TF_REG_T8 offsetof(struct trapframe, tf_regs[TF_T8]) define TF_REG_T9 offsetof(struct trapframe, tf_regs[TF_T9]) define TF_REG_RA offsetof(struct trapframe, tf_regs[TF_RA]) define TF_REG_SR offsetof(struct trapframe, tf_regs[TF_SR]) define TF_REG_MULLO offsetof(struct trapframe, tf_regs[TF_MULLO]) define TF_REG_MULHI offsetof(struct trapframe, tf_regs[TF_MULHI]) define TF_REG_EPC offsetof(struct trapframe, tf_regs[TF_EPC]) define TF_PPL offsetof(struct trapframe, tf_ppl) # XXX Atheros HAL define TF_PAD offsetof(struct trapframe, tf_pad) define CTXSWFRAME_SIZ sizeof(label_t) define SF_REG_SR offsetof(label_t, val[11]) define SF_REG_RA offsetof(label_t, val[10]) define SF_REG_S0 offsetof(label_t, val[0]) define SF_REG_S1 offsetof(label_t, val[1]) define SF_REG_S2 offsetof(label_t, val[2]) define SF_REG_S3 offsetof(label_t, val[3]) define SF_REG_S4 offsetof(label_t, val[4]) define SF_REG_S5 offsetof(label_t, val[5]) define SF_REG_S6 offsetof(label_t, val[6]) define SF_REG_S7 offsetof(label_t, val[7]) define SF_REG_SP offsetof(label_t, val[8]) define SF_REG_S8 offsetof(label_t, val[9]) define MTX_OWNER offsetof(struct kmutex, mtx_owner) define MTX_LOCK offsetof(struct kmutex, mtx_lock) define MTX_IPL offsetof(struct kmutex, mtx_ipl) define CPU_INFO_CURLWP offsetof(struct cpu_info, ci_curlwp) define CPU_INFO_FPCURLWP offsetof(struct cpu_info, ci_fpcurlwp)