NetBSD-5.0.2/sys/arch/alpha/alpha/genassym.cf

# $NetBSD: genassym.cf,v 1.16 2008/09/20 18:29:04 tsutsui Exp $

#
# Copyright (c) 1982, 1990, 1993
#	The Regents of the University of California.  All rights reserved.
#
# 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.3 (Berkeley) 1/4/94
#

#
# Copyright (c) 1994, 1995 Gordon W. Ross
# Copyright (c) 1993 Adam Glass
#
# 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.3 (Berkeley) 1/4/94
#

include <sys/param.h>
include <sys/buf.h>
include <sys/proc.h>
include <sys/sched.h>
include <sys/mbuf.h>
include <sys/msgbuf.h>
include <sys/user.h>
include <sys/syscall.h>

include <machine/cpu.h>
include <machine/reg.h>
include <machine/frame.h>
include <machine/rpb.h>
include <machine/vmparam.h>

include <uvm/uvm.h>
include <uvm/uvm_extern.h>

# general constants 
define	VM_MAX_ADDRESS		VM_MAX_ADDRESS

# Register offsets, for stack frames.
define	FRAME_V0		FRAME_V0
define	FRAME_T0		FRAME_T0
define	FRAME_T1		FRAME_T1
define	FRAME_T2		FRAME_T2
define	FRAME_T3		FRAME_T3
define	FRAME_T4		FRAME_T4
define	FRAME_T5		FRAME_T5
define	FRAME_T6		FRAME_T6
define	FRAME_T7		FRAME_T7
define	FRAME_S0		FRAME_S0
define	FRAME_S1		FRAME_S1
define	FRAME_S2		FRAME_S2
define	FRAME_S3		FRAME_S3
define	FRAME_S4		FRAME_S4
define	FRAME_S5		FRAME_S5
define	FRAME_S6		FRAME_S6
define	FRAME_A3		FRAME_A3
define	FRAME_A4		FRAME_A4
define	FRAME_A5		FRAME_A5
define	FRAME_T8		FRAME_T8
define	FRAME_T9		FRAME_T9
define	FRAME_T10		FRAME_T10
define	FRAME_T11		FRAME_T11
define	FRAME_RA		FRAME_RA
define	FRAME_T12		FRAME_T12
define	FRAME_AT		FRAME_AT
define	FRAME_SP		FRAME_SP

define	FRAME_SW_SIZE		FRAME_SW_SIZE

define	FRAME_PS		FRAME_PS
define	FRAME_PC		FRAME_PC
define	FRAME_GP		FRAME_GP
define	FRAME_A0		FRAME_A0
define	FRAME_A1		FRAME_A1
define	FRAME_A2		FRAME_A2

define	FRAME_SIZE		FRAME_SIZE

# bits of the PS register
define	ALPHA_PSL_USERMODE	ALPHA_PSL_USERMODE
define	ALPHA_PSL_IPL_MASK	ALPHA_PSL_IPL_MASK
define	ALPHA_PSL_IPL_0		ALPHA_PSL_IPL_0
define	ALPHA_PSL_IPL_SOFT	ALPHA_PSL_IPL_SOFT
define	ALPHA_PSL_IPL_HIGH	ALPHA_PSL_IPL_HIGH

# pte bits
define	ALPHA_PTE_VALID		ALPHA_PTE_VALID
define	ALPHA_PTE_ASM		ALPHA_PTE_ASM
define	ALPHA_PTE_KR		ALPHA_PTE_KR
define	ALPHA_PTE_KW		ALPHA_PTE_KW

# Important offsets into the lwp and proc structs & associated constants
define	L_ADDR			offsetof(struct lwp, l_addr)
define	L_STAT			offsetof(struct lwp, l_stat)
define	L_CPU			offsetof(struct lwp, l_cpu)
define	L_PROC			offsetof(struct lwp, l_proc)
define	L_PRIORITY		offsetof(struct lwp, l_priority)
define	L_MD_FLAGS		offsetof(struct lwp, l_md.md_flags)
define	L_MD_PCBPADDR		offsetof(struct lwp, l_md.md_pcbpaddr)
define	L_MD_TF			offsetof(struct lwp, l_md.md_tf)
define	L_MD_ASTPENDING		offsetof(struct lwp, l_md.md_astpending)

define	P_VMSPACE		offsetof(struct proc, p_vmspace)
define	P_RASLIST		offsetof(struct proc, p_raslist)
define	P_MD_SYSCALL		offsetof(struct proc, p_md.md_syscall)

# offsets needed by cpu_switch() to switch mappings.
define	VM_MAP_PMAP		offsetof(struct vmspace, vm_map.pmap)

# Important offsets into the user struct & associated constants
define	UPAGES			UPAGES
define	U_PCB			offsetof(struct user, u_pcb)
define	U_PCB_HWPCB		offsetof(struct user, u_pcb.pcb_hw)
define	U_PCB_HWPCB_KSP		offsetof(struct user, u_pcb.pcb_hw.apcb_ksp)
define	U_PCB_CONTEXT		offsetof(struct user, u_pcb.pcb_context[0])
define	U_PCB_ONFAULT		offsetof(struct user, u_pcb.pcb_onfault)
define	U_PCB_ACCESSADDR	offsetof(struct user, u_pcb.pcb_accessaddr)

# Offsets into struct fpstate, for save, restore
define	FPREG_FPR_REGS		offsetof(struct fpreg, fpr_regs[0])
define	FPREG_FPR_CR		offsetof(struct fpreg, fpr_cr)

# Important other addresses
define	HWRPB_ADDR		HWRPB_ADDR	/* Restart parameter block */
define	VPTBASE			VPTBASE		/* Virtual Page Table base */

# Offsets into the HWRPB.
define	RPB_PRIMARY_CPU_ID	offsetof(struct rpb, rpb_primary_cpu_id)

# Kernel entries
define	ALPHA_KENTRY_ARITH	ALPHA_KENTRY_ARITH
define	ALPHA_KENTRY_MM		ALPHA_KENTRY_MM
define	ALPHA_KENTRY_IF		ALPHA_KENTRY_IF
define	ALPHA_KENTRY_UNA	ALPHA_KENTRY_UNA

# errno values
define	ENAMETOOLONG		ENAMETOOLONG
define	EFAULT			EFAULT

# Syscalls called from sigreturn.
define	SYS_compat_16___sigreturn14	SYS_compat_16___sigreturn14
define	SYS_exit		SYS_exit

# CPU info
define	CPU_INFO_CURLWP		offsetof(struct cpu_info, ci_curlwp)
define	CPU_INFO_FPCURLWP	offsetof(struct cpu_info, ci_fpcurlwp)
define	CPU_INFO_CURPCB		offsetof(struct cpu_info, ci_curpcb)
define	CPU_INFO_IDLE_LWP	offsetof(struct cpu_info, ci_data.cpu_idlelwp)
define	CPU_INFO_SIZEOF		sizeof(struct cpu_info)