xref: /freebsd-src/sys/arm/include/param.h (revision 5884fab46153dee52bda660bcabca95c3cc97f44)
1d4cfb421SDavid E. O'Brien /*-
2df57947fSPedro F. Giffuni  * SPDX-License-Identifier: BSD-4-Clause
3df57947fSPedro F. Giffuni  *
4d4cfb421SDavid E. O'Brien  * Copyright (c) 2001 David E. O'Brien
5d4cfb421SDavid E. O'Brien  * Copyright (c) 1990 The Regents of the University of California.
6d4cfb421SDavid E. O'Brien  * All rights reserved.
7d4cfb421SDavid E. O'Brien  *
8d4cfb421SDavid E. O'Brien  * This code is derived from software contributed to Berkeley by
9d4cfb421SDavid E. O'Brien  * William Jolitz.
10d4cfb421SDavid E. O'Brien  *
11d4cfb421SDavid E. O'Brien  * Redistribution and use in source and binary forms, with or without
12d4cfb421SDavid E. O'Brien  * modification, are permitted provided that the following conditions
13d4cfb421SDavid E. O'Brien  * are met:
14d4cfb421SDavid E. O'Brien  * 1. Redistributions of source code must retain the above copyright
15d4cfb421SDavid E. O'Brien  *    notice, this list of conditions and the following disclaimer.
16d4cfb421SDavid E. O'Brien  * 2. Redistributions in binary form must reproduce the above copyright
17d4cfb421SDavid E. O'Brien  *    notice, this list of conditions and the following disclaimer in the
18d4cfb421SDavid E. O'Brien  *    documentation and/or other materials provided with the distribution.
19d4cfb421SDavid E. O'Brien  * 3. All advertising materials mentioning features or use of this software
20d4cfb421SDavid E. O'Brien  *    must display the following acknowledgement:
21d4cfb421SDavid E. O'Brien  *	This product includes software developed by the University of
22d4cfb421SDavid E. O'Brien  *	California, Berkeley and its contributors.
23d4cfb421SDavid E. O'Brien  * 4. Neither the name of the University nor the names of its contributors
24d4cfb421SDavid E. O'Brien  *    may be used to endorse or promote products derived from this software
25d4cfb421SDavid E. O'Brien  *    without specific prior written permission.
26d4cfb421SDavid E. O'Brien  *
27d4cfb421SDavid E. O'Brien  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
28d4cfb421SDavid E. O'Brien  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
29d4cfb421SDavid E. O'Brien  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
30d4cfb421SDavid E. O'Brien  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
31d4cfb421SDavid E. O'Brien  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
32d4cfb421SDavid E. O'Brien  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
33d4cfb421SDavid E. O'Brien  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
34d4cfb421SDavid E. O'Brien  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
35d4cfb421SDavid E. O'Brien  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
36d4cfb421SDavid E. O'Brien  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
37d4cfb421SDavid E. O'Brien  * SUCH DAMAGE.
38d4cfb421SDavid E. O'Brien  */
39d4cfb421SDavid E. O'Brien 
40a254d1f1SPoul-Henning Kamp #ifndef _ARM_INCLUDE_PARAM_H_
41a254d1f1SPoul-Henning Kamp #define	_ARM_INCLUDE_PARAM_H_
42a254d1f1SPoul-Henning Kamp 
43d4cfb421SDavid E. O'Brien /*
44d4cfb421SDavid E. O'Brien  * Machine dependent constants for StrongARM
45d4cfb421SDavid E. O'Brien  */
46d4cfb421SDavid E. O'Brien 
47a254d1f1SPoul-Henning Kamp #include <machine/_align.h>
48d4cfb421SDavid E. O'Brien 
49c038ee81SOlivier Houchard #define STACKALIGNBYTES	(8 - 1)
50c038ee81SOlivier Houchard #define STACKALIGN(p)	((u_int)(p) & ~STACKALIGNBYTES)
51d4cfb421SDavid E. O'Brien 
52d4cfb421SDavid E. O'Brien #ifndef MACHINE
536fc729afSOlivier Houchard #define	MACHINE		"arm"
54d4cfb421SDavid E. O'Brien #endif
55d4cfb421SDavid E. O'Brien #ifndef MACHINE_ARCH
56ad54157bSJohn Baldwin #define	MACHINE_ARCH	"armv7"
57cf1a573fSOleksandr Tymoshenko #endif
58d4cfb421SDavid E. O'Brien 
59c3d326fdSMark Johnston #ifdef SMP
6068b739cdSAttilio Rao #ifndef MAXCPU
61cf1a573fSOleksandr Tymoshenko #define	MAXCPU		4
6268b739cdSAttilio Rao #endif
63d4cfb421SDavid E. O'Brien #else
64d4cfb421SDavid E. O'Brien #define	MAXCPU		1
65c3d326fdSMark Johnston #endif
66d4cfb421SDavid E. O'Brien 
67941646f5SAttilio Rao #ifndef MAXMEMDOM
68941646f5SAttilio Rao #define	MAXMEMDOM	1
69941646f5SAttilio Rao #endif
70941646f5SAttilio Rao 
71d4cfb421SDavid E. O'Brien #define	ALIGNBYTES	_ALIGNBYTES
72d4cfb421SDavid E. O'Brien #define	ALIGN(p)	_ALIGN(p)
738c393fd1SSam Leffler /*
748c393fd1SSam Leffler  * ALIGNED_POINTER is a boolean macro that checks whether an address
758c393fd1SSam Leffler  * is valid to fetch data elements of type t from on this architecture.
768c393fd1SSam Leffler  * This does not reflect the optimal alignment, just the possibility
778c393fd1SSam Leffler  * (within reasonable limits).
7840cb6df5SIan Lepore  *
7945cd4c8cSIan Lepore  * armv4 and v5 require alignment to the type's size.  armv6 requires 8-byte
8045cd4c8cSIan Lepore  * alignment for the ldrd/strd instructions, but otherwise follows armv7 rules.
8145cd4c8cSIan Lepore  * armv7 requires that an 8-byte type be aligned to at least a 4-byte boundary;
8245cd4c8cSIan Lepore  * access to smaller types can be unaligned, except that the compiler may
8345cd4c8cSIan Lepore  * optimize access to adjacent uint32_t values into a single load/store-multiple
8445cd4c8cSIan Lepore  * instruction which requires 4-byte alignment, so we must provide the most-
8545cd4c8cSIan Lepore  * pessimistic answer possible even on armv7.
868c393fd1SSam Leffler  */
878c393fd1SSam Leffler #define	ALIGNED_POINTER(p, t)	((((unsigned)(p)) & (sizeof(t)-1)) == 0)
88d4cfb421SDavid E. O'Brien 
8922037b2dSRobert Watson /*
9022037b2dSRobert Watson  * CACHE_LINE_SIZE is the compile-time maximum cache line size for an
9122037b2dSRobert Watson  * architecture.  It should be used with appropriate caution.
9222037b2dSRobert Watson  */
93a93fa8f2SRobert Watson #define	CACHE_LINE_SHIFT	6
94a93fa8f2SRobert Watson #define	CACHE_LINE_SIZE		(1 << CACHE_LINE_SHIFT)
95a93fa8f2SRobert Watson 
96d4cfb421SDavid E. O'Brien #define	PAGE_SHIFT	12
97d4cfb421SDavid E. O'Brien #define	PAGE_SIZE	(1 << PAGE_SHIFT)	/* Page size */
98d4cfb421SDavid E. O'Brien #define	PAGE_MASK	(PAGE_SIZE - 1)
99d4cfb421SDavid E. O'Brien 
1006fc729afSOlivier Houchard #define PDR_SHIFT	20 /* log2(NBPDR) */
1016fc729afSOlivier Houchard #define NBPDR		(1 << PDR_SHIFT)
102b949475dSRafal Jaworowski #define PDRMASK		(NBPDR - 1)
1036fc729afSOlivier Houchard #define NPDEPG          (1 << (32 - PDR_SHIFT))
104d4cfb421SDavid E. O'Brien 
105b949475dSRafal Jaworowski #define	MAXPAGESIZES	2		/* maximum number of supported page sizes */
106fe105d45SAlan Cox 
1076fc729afSOlivier Houchard #ifndef KSTACK_PAGES
108*5647f85aSKevin Bowling #define KSTACK_PAGES    2
1096fc729afSOlivier Houchard #endif /* !KSTACK_PAGES */
110d4cfb421SDavid E. O'Brien 
1116fc729afSOlivier Houchard #ifndef FPCONTEXTSIZE
1126fc729afSOlivier Houchard #define FPCONTEXTSIZE	(0x100)
1136fc729afSOlivier Houchard #endif
1146fc729afSOlivier Houchard 
1156fc729afSOlivier Houchard #ifndef KSTACK_GUARD_PAGES
1166fc729afSOlivier Houchard #define KSTACK_GUARD_PAGES	1
1176fc729afSOlivier Houchard #endif /* !KSTACK_GUARD_PAGES */
1186fc729afSOlivier Houchard 
119edc82223SKonstantin Belousov #define USPACE_SVC_STACK_TOP		(kstack_pages * PAGE_SIZE)
120f00519b6SIan Lepore 
121d4cfb421SDavid E. O'Brien /*
122d4cfb421SDavid E. O'Brien  * Mach derived conversion macros
123d4cfb421SDavid E. O'Brien  */
124b949475dSRafal Jaworowski #define	trunc_1mpage(x)		((unsigned)(x) & ~PDRMASK)
125b949475dSRafal Jaworowski #define	round_1mpage(x)		((((unsigned)(x)) + PDRMASK) & ~PDRMASK)
126d4cfb421SDavid E. O'Brien 
127d4cfb421SDavid E. O'Brien #define	arm32_btop(x)		((unsigned)(x) >> PAGE_SHIFT)
128d4cfb421SDavid E. O'Brien #define	arm32_ptob(x)		((unsigned)(x) << PAGE_SHIFT)
129d4cfb421SDavid E. O'Brien 
130a254d1f1SPoul-Henning Kamp #endif /* !_ARM_INCLUDE_PARAM_H_ */
131