xref: /netbsd/sys/arch/mips/mips/genassym.cf (revision c4a72b64)
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