xref: /netbsd-src/sys/arch/arm/arm32/genassym.cf (revision dd3ee07da436799d8de85f3055253118b76bf345)
1#	$NetBSD: genassym.cf,v 1.95 2020/08/28 13:36:52 skrll Exp $
2
3# Copyright (c) 1982, 1990 The Regents of the University of California.
4# All rights reserved.
5#
6# This code is derived from software contributed to Berkeley by
7# William Jolitz.
8#
9# Redistribution and use in source and binary forms, with or without
10# modification, are permitted provided that the following conditions
11# are met:
12# 1. Redistributions of source code must retain the above copyright
13#    notice, this list of conditions and the following disclaimer.
14# 2. Redistributions in binary form must reproduce the above copyright
15#    notice, this list of conditions and the following disclaimer in the
16#    documentation and/or other materials provided with the distribution.
17# 3. Neither the name of the University nor the names of its contributors
18#    may be used to endorse or promote products derived from this software
19#    without specific prior written permission.
20#
21# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
22# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24# ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
25# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31# SUCH DAMAGE.
32
33if defined(_KERNEL_OPT)
34include "opt_arm_start.h"
35include "opt_execfmt.h"
36include "opt_multiprocessor.h"
37endif
38
39include <sys/param.h>
40
41include <sys/device.h>
42include <sys/mbuf.h>
43include <sys/proc.h>
44include <sys/resourcevar.h>
45include <sys/signal.h>
46include <sys/systm.h>
47
48include <netinet/in.h>
49include <netinet/in_systm.h>
50include <netinet/ip.h>
51include <netinet/ip6.h>
52include <netinet/ip_var.h>
53
54include <uvm/uvm_extern.h>
55
56include <arm/fiq.h>
57include <arm/locore.h>
58include <arm/vfpreg.h>
59include <arm/undefined.h>
60
61include <arm/arm32/machdep.h>
62include <arm/arm32/pte.h>
63
64include <machine/pmap.h>
65include <machine/pcb.h>
66include <machine/vmparam.h>
67
68define	__PROG32		1
69ifdef __ARM_FIQ_INDIRECT
70define	__ARM_FIQ_INDIRECT	1
71endif
72
73ifdef __HAVE_FAST_SOFTINTS
74define	__HAVE_FAST_SOFTINTS	1
75endif
76
77ifdef __HAVE_GENERIC_START
78define	__HAVE_GENERIC_START	1
79endif
80
81ifdef __HAVE_MM_MD_DIRECT_MAPPED_PHYS
82define	__HAVE_MM_MD_DIRECT_MAPPED_PHYS	1
83endif
84
85ifdef __HAVE_PIC_FAST_SOFTINTS
86define	__HAVE_PIC_FAST_SOFTINTS	1
87endif
88
89ifdef __HAVE_PREEMPTION
90define	__HAVE_PREEMPTION	1
91endif
92
93ifdef ARM_MMU_EXTENDED
94define  ARM_MMU_EXTENDED	1
95endif
96
97ifdef VERBOSE_INIT_ARM
98define	VERBOSE_INIT_ARM	1
99endif
100
101define	KERNEL_BASE		KERNEL_BASE
102define	VM_MIN_ADDRESS		VM_MIN_ADDRESS
103define	VM_MAXUSER_ADDRESS	VM_MAXUSER_ADDRESS
104
105define	PMAP_DOMAIN_KERNEL	PMAP_DOMAIN_KERNEL
106define	DOMAIN_CLIENT		DOMAIN_CLIENT
107define	DOMAIN_DEFAULT		DOMAIN_DEFAULT
108
109define	L1_S_PROTO_generic	L1_S_PROTO_generic
110define	L1_S_PROTO_armv7	L1_S_PROTO_armv7
111
112define	L1_S_PROTO_xscale	L1_S_PROTO_xscale
113if ARM_NMMUS == 1
114define	L1_S_PROTO		L1_S_PROTO
115endif
116define	L1_S_FRAME		L1_S_FRAME
117define	L1_S_SHIFT		L1_S_SHIFT
118define	L1_S_SIZE		L1_S_SIZE
119define	L1_S_CACHEABLE		L1_S_C|L1_S_B|L1_S_V6_S
120define	L1_S_NOCACHE		L1_S_XS_TEX(1)
121define	L1_S_B			L1_S_B
122define	L1_S_C			L1_S_C
123define	L1_S_V6_S		L1_S_V6_S
124define	L1_S_V6_XN		L1_S_V6_XN
125define	L1_S_AP_KR		L1_S_AP(AP_KR)
126define	L1_S_AP_KRW		L1_S_AP(AP_KRW)
127define	L1_S_APv7_KRW		L1_S_AP(AP7_KRW)
128define	L1_S_DOM_MASK		L1_S_DOM_MASK
129define	L1_TABLE_SIZE		L1_TABLE_SIZE
130define	L1_TYPE_S		L1_TYPE_S
131define	L1_S_DOM_KERNEL		L1_S_DOM(PMAP_DOMAIN_KERNEL)
132define	L2_S_SIZE		L2_S_SIZE
133
134define	L1_C_PROTO_generic	L1_C_PROTO_generic
135
136define	L2_S_PROTO_generic	L2_S_PROTO_generic
137define	L2_S_SHIFT		L2_S_SHIFT
138define	L2_S_SIZE		L2_S_SIZE
139define	L2_C			L2_C
140define	L2_AP_KRW		L2_AP(AP_KRW)
141
142define	TTBCR_S_N_1		__SHIFTIN(1, TTBCR_S_N)
143
144define	TTBR_UPATTR		TTBR_UPATTR
145define	TTBR_MPATTR		TTBR_MPATTR
146
147ifdef PMAP_INCLUDE_PTE_SYNC
148define	PMAP_INCLUDE_PTE_SYNC	1
149endif
150
151define	PAGE_MASK		PAGE_MASK
152define	PAGE_SIZE		PAGE_SIZE
153define	UPAGES			UPAGES
154define	PGSHIFT			PGSHIFT
155
156define	MAXCPUS			MAXCPUS
157
158#define	PSR_HYP32_MODE		PSR_HYP32_MODE
159#define	PSR_SVC32_MODE		PSR_SVC32_MODE
160#define	PSR_MODE		PSR_MODE
161#define	CPU_CONTROL_DC_ENABLE	CPU_CONTROL_DC_ENABLE
162#define	TTBCR_S_PD0		TTBCR_S_PD0
163
164define	INIT_ARM_STACK_SHIFT	INIT_ARM_STACK_SHIFT
165define	INIT_ARM_STACK_SIZE	INIT_ARM_STACK_SIZE
166define	INIT_ARM_TOTAL_STACK	INIT_ARM_TOTAL_STACK
167
168# Important offsets into the lwp and proc structs & associated constants
169define	L_PCB			offsetof(struct lwp, l_addr)
170define	L_CPU			offsetof(struct lwp, l_cpu)
171define	L_PROC			offsetof(struct lwp, l_proc)
172define	L_PRIVATE		offsetof(struct lwp, l_private)
173define	L_FLAG			offsetof(struct lwp, l_flag)
174define	L_MD_ASTPENDING		offsetof(struct lwp, l_md.md_astpending)
175define	L_MD_FLAGS		offsetof(struct lwp, l_md.md_flags)
176define	L_MD_TF			offsetof(struct lwp, l_md.md_tf)
177define	MDLWP_NOALIGNFLT	MDLWP_NOALIGNFLT
178
179define	LW_SYSTEM		LW_SYSTEM
180
181define	P_RASLIST		offsetof(struct proc, p_raslist)
182
183define	PCB_R8			offsetof(struct pcb, pcb_r8)
184define	PCB_R9			offsetof(struct pcb, pcb_r9)
185define	PCB_R10			offsetof(struct pcb, pcb_r10)
186define	PCB_R11			offsetof(struct pcb, pcb_r11)
187define	PCB_R12			offsetof(struct pcb, pcb_r12)
188define	PCB_KSP			offsetof(struct pcb, pcb_sp)
189define	PCB_LR			offsetof(struct pcb, pcb_lr)
190define	PCB_PC			offsetof(struct pcb, pcb_pc)
191define	PCB_USER_PID_RW		offsetof(struct pcb, pcb_user_pid_rw)
192define	PCB_ONFAULT		offsetof(struct pcb, pcb_onfault)
193define	PCB_VFP_FPEXC		offsetof(struct pcb, pcb_vfp.vfp_fpexc)
194
195define	PCB_SIZE		sizeof(struct pcb)
196
197define	VM_MAP			offsetof(struct vmspace, vm_map)
198define	VM_PMAP			offsetof(struct vmspace, vm_map.pmap)
199
200define	PR_BASE			offsetof(struct uprof, pr_base)
201define	PR_SIZE			offsetof(struct uprof, pr_size)
202define	PR_OFF			offsetof(struct uprof, pr_off)
203define	PR_SCALE		offsetof(struct uprof, pr_scale)
204
205define	SIGTRAP			SIGTRAP
206define	SIGEMT			SIGEMT
207
208define	TF_SPSR			offsetof(struct trapframe, tf_spsr)
209define	TF_FILL			offsetof(struct trapframe, tf_fill)
210define	TF_R0			offsetof(struct trapframe, tf_r0)
211define	TF_R4			offsetof(struct trapframe, tf_r4)
212define	TF_R6			offsetof(struct trapframe, tf_r6)
213define	TF_R8			offsetof(struct trapframe, tf_r8)
214define	TF_R10			offsetof(struct trapframe, tf_r10)
215define	TF_R12			offsetof(struct trapframe, tf_r12)
216define	TF_USR_SP		offsetof(struct trapframe, tf_usr_sp)
217define	TF_USR_LR		offsetof(struct trapframe, tf_usr_lr)
218define	TF_SVC_SP		offsetof(struct trapframe, tf_svc_sp)
219define	TF_SVC_LR		offsetof(struct trapframe, tf_svc_lr)
220define	TF_PC			offsetof(struct trapframe, tf_pc)
221
222define	PROCSIZE		sizeof(struct proc)
223define	TRAPFRAMESIZE		sizeof(struct trapframe)
224
225define	CF_IDCACHE_WBINV_ALL	offsetof(struct cpu_functions, cf_idcache_wbinv_all)
226define	CF_DCACHE_WB_RANGE	offsetof(struct cpu_functions, cf_dcache_wb_range)
227define	CF_TLB_FLUSHID_SE	offsetof(struct cpu_functions, cf_tlb_flushID_SE)
228define	CF_CONTEXT_SWITCH	offsetof(struct cpu_functions, cf_context_switch)
229define	CF_SLEEP		offsetof(struct cpu_functions, cf_sleep)
230define	CF_CONTROL		offsetof(struct cpu_functions, cf_control)
231
232define	CPU_INFO_SIZE		sizeof(struct cpu_info)
233define	CI_ARM_CPUID		offsetof(struct cpu_info, ci_arm_cpuid)
234define	CI_CPL			offsetof(struct cpu_info, ci_cpl)
235define	CI_CURLWP		offsetof(struct cpu_info, ci_curlwp)
236define	CI_INTR_DEPTH		offsetof(struct cpu_info, ci_intr_depth)
237define	CI_MIDR			offsetof(struct cpu_info, ci_midr)
238define	CI_MPIDR		offsetof(struct cpu_info, ci_mpidr)
239define	CI_MTX_COUNT		offsetof(struct cpu_info, ci_mtx_count)
240define	CI_LASTLWP		offsetof(struct cpu_info, ci_lastlwp)
241define	CI_UNDEFSAVE		offsetof(struct cpu_info, ci_undefsave[0])
242define	CI_IDLELWP		offsetof(struct cpu_info, ci_data.cpu_idlelwp)
243define	CI_CC_NINTR		offsetof(struct cpu_info, ci_data.cpu_nintr)
244if defined(EXEC_AOUT)
245define	CI_CTRL			offsetof(struct cpu_info, ci_ctrl)
246endif
247ifdef __HAVE_FAST_SOFTINTS
248define	CI_SOFTINTS		offsetof(struct cpu_info, ci_softints)
249endif
250ifdef FPU_VFP
251define	CI_VFP_ID		offsetof(struct cpu_info, ci_vfp_id)
252endif
253
254define	VFP_FPEXC_EN		VFP_FPEXC_EN
255
256define	NSACR_VFPCP		NSACR_CPn(VFP_COPROC)|NSACR_CPn(VFP_COPROC2)
257
258# Constants required for in_cksum() and friends.
259define	M_LEN			offsetof(struct mbuf, m_len)
260define	M_DATA			offsetof(struct mbuf, m_data)
261define	M_NEXT			offsetof(struct mbuf, m_next)
262define	IP_SRC			offsetof(struct ip, ip_src)
263define	IP_DST			offsetof(struct ip, ip_dst)
264
265# Cache information
266define	DCACHE_LINE_SIZE	offsetof(struct arm_cache_info, dcache_line_size)
267define	DCACHE_SIZE		offsetof(struct arm_cache_info, dcache_size)
268