param.h revision 1.1.28.3 1 /* $NetBSD: param.h,v 1.1.28.3 2018/10/20 06:58:24 pgoyette Exp $ */
2
3 /*-
4 * Copyright (c) 2014 The NetBSD Foundation, Inc.
5 * All rights reserved.
6 *
7 * This code is derived from software contributed to The NetBSD Foundation
8 * by Matt Thomas of 3am Software Foundry.
9 *
10 * Redistribution and use in source and binary forms, with or without
11 * modification, are permitted provided that the following conditions
12 * are met:
13 * 1. Redistributions of source code must retain the above copyright
14 * notice, this list of conditions and the following disclaimer.
15 * 2. Redistributions in binary form must reproduce the above copyright
16 * notice, this list of conditions and the following disclaimer in the
17 * documentation and/or other materials provided with the distribution.
18 *
19 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
20 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
21 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
23 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29 * POSSIBILITY OF SUCH DAMAGE.
30 */
31
32 #ifndef _AARCH64_PARAM_H_
33 #define _AARCH64_PARAM_H_
34
35 #ifdef __aarch64__
36
37 /*
38 * Machine dependent constants for all ARM processors
39 */
40
41 /*
42 * For KERNEL code:
43 * MACHINE must be defined by the individual port. This is so that
44 * uname returns the correct thing, etc.
45 *
46 * MACHINE_ARCH may be defined by individual ports as a temporary
47 * measure while we're finishing the conversion to ELF.
48 *
49 * For non-KERNEL code:
50 * If ELF, MACHINE and MACHINE_ARCH are forced to "arm/armeb".
51 */
52
53 #if defined(_KERNEL)
54 # ifndef MACHINE_ARCH /* XXX For now */
55 # ifdef __AARCH64EB__
56 # define _MACHINE_ARCH aarch64eb
57 # define MACHINE_ARCH "aarch64eb"
58 # else
59 # define _MACHINE_ARCH aarch64
60 # define MACHINE_ARCH "aarch64"
61 # endif /* __AARCH64EB__ */
62 # endif /* MACHINE_ARCH */
63 #else
64 # undef _MACHINE
65 # undef MACHINE
66 # undef _MACHINE_ARCH
67 # undef MACHINE_ARCH
68 # define _MACHINE aarch64
69 # define MACHINE "aarch64"
70 # ifdef __AARCH64EB__
71 # define _MACHINE_ARCH aarch64eb
72 # define MACHINE_ARCH "aarch64eb"
73 # else
74 # define _MACHINE_ARCH aarch64
75 # define MACHINE_ARCH "aarch64"
76 # endif /* __AARCH64EB__ */
77 #endif /* !_KERNEL */
78
79 #define MID_MACHINE MID_AARCH64
80
81 /* AARCH64-specific macro to align a stack pointer (downwards). */
82 #define STACK_ALIGNBYTES (16 - 1)
83
84 #define ALIGNBYTES32 (4 - 1)
85 #define ALIGN32(p) \
86 (((uintptr_t)(p) + ALIGNBYTES32) & ~ALIGNBYTES32)
87
88 #define DEV_BSHIFT 9 /* log2(DEV_BSIZE) */
89 #define DEV_BSIZE (1 << DEV_BSHIFT)
90 #define BLKDEV_IOSIZE 2048
91
92 #ifndef MAXPHYS
93 #define MAXPHYS 65536 /* max I/O transfer size */
94 #endif
95
96 #define NKMEMPAGES_MAX_DEFAULT ((2048UL * 1024 * 1024) >> PAGE_SHIFT)
97 #define NKMEMPAGES_MIN_DEFAULT ((128UL * 1024 * 1024) >> PAGE_SHIFT)
98
99 #ifdef AARCH64_PAGE_SHIFT
100 #if (1 << AARCH64_PAGE_SHIFT) & ~0x141000
101 #error AARCH64_PAGE_SHIFT contains an unsupported value.
102 #endif
103 #define PGSHIFT AARCH64_PAGE_SHIFT
104 #else
105 #define PGSHIFT 12
106 #endif
107 #define NBPG (1 << PGSHIFT)
108 #define PGOFSET (NBPG - 1)
109
110 /*
111 * Constants related to network buffer management.
112 * MCLBYTES must be no larger than NBPG (the software page size), and
113 * NBPG % MCLBYTES must be zero.
114 */
115 #if PGSHIFT > 12
116 #define MSIZE 256 /* size of an mbuf */
117 #else
118 #define MSIZE 512 /* size of an mbuf */
119 #endif
120
121 #ifndef MCLSHIFT
122 #define MCLSHIFT 11 /* convert bytes to m_buf clusters */
123 /* 2K cluster can hold Ether frame */
124 #endif /* MCLSHIFT */
125
126 #define MCLBYTES (1 << MCLSHIFT) /* size of a m_buf cluster */
127
128
129 #ifndef MSGBUFSIZE
130 #define MSGBUFSIZE 16384 /* default message buffer size */
131 #endif
132
133 #ifdef _KERNEL
134 void delay(unsigned int);
135 #define DELAY(x) delay(x)
136 #endif
137 /*
138 * Compatibility /dev/zero mapping.
139 */
140 #ifdef _KERNEL
141 #ifdef COMPAT_16
142 #define COMPAT_ZERODEV(x) (x == makedev(0, _DEV_ZERO_oARM))
143 #endif
144 #endif /* _KERNEL */
145
146 #define aarch64_btop(x) ((unsigned long)(x) >> PGSHIFT)
147 #define aarch64_ptob(x) ((unsigned long)(x) << PGSHIFT)
148 #define aarch64_trunc_page(x) ((unsigned long)(x) & ~PGSHIFT)
149 #define aarch64_round_page(x) ((((unsigned long)(x)) + PGOFSET) & ~PGOFSET)
150
151 /* compatibility for arm */
152 #define arm_btop(x) aarch64_btop(x)
153 #define arm_ptob(x) aarch64_ptob(x)
154 #define arm_trunc_page(x) aarch64_trunc_page(x)
155 #define arm_round_page(x) aarch64_round_page(x)
156
157 #elif defined(__arm__)
158
159 #include <arm/param.h>
160
161 #endif /* __aarch64__/__arm__ */
162
163 #endif /* _AARCH64_PARAM_H_ */
164