xref: /netbsd-src/sys/arch/vax/include/param.h (revision 76dfffe33547c37f8bdd446e3e4ab0f3c16cea4b)
1 /*      $NetBSD: param.h,v 1.21 1996/07/20 17:58:21 ragge Exp $    */
2 /*-
3  * Copyright (c) 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. All advertising materials mentioning features or use of this software
18  *    must display the following acknowledgement:
19  *	This product includes software developed by the University of
20  *	California, Berkeley and its contributors.
21  * 4. Neither the name of the University nor the names of its contributors
22  *    may be used to endorse or promote products derived from this software
23  *    without specific prior written permission.
24  *
25  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
26  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
27  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
28  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
29  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
30  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
31  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
32  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
33  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
34  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
35  * SUCH DAMAGE.
36  *
37  *	@(#)param.h	5.8 (Berkeley) 6/28/91
38  */
39 
40 #ifndef _VAX_PARAM_H_
41 #define _VAX_PARAM_H_
42 
43 #include <machine/macros.h>
44 #include <machine/psl.h>
45 
46 /*
47  * Machine dependent constants for VAX.
48  */
49 
50 #define	_MACHINE	vax
51 #define	MACHINE		"vax"
52 #define	_MACHINE_ARCH	vax
53 #define	MACHINE_ARCH	"vax"
54 #define	MID_MACHINE	MID_VAX
55 
56 /*
57  * Round p (pointer or byte index) up to a correctly-aligned value
58  * for all data types (int, long, ...).   The result is u_int and
59  * must be cast to any desired pointer type.
60  */
61 
62 #define ALIGNBYTES	(sizeof(int) - 1)
63 #define ALIGN(p)	(((u_int)(p) + ALIGNBYTES) &~ ALIGNBYTES)
64 
65 #define	PGSHIFT	 9                             /* LOG2(NBPG) */
66 #define	NBPG     (1<<PGSHIFT)                  /* (1 << PGSHIFT) bytes/page */
67 #define	PGOFSET	 (NBPG-1)	               /* byte offset into page */
68 #define	NPTEPG	 (NBPG/(sizeof (struct pte)))
69 
70 #define	KERNBASE     0x80000000	               /* start of kernel virtual */
71 #define	BTOPKERNBASE ((u_long)KERNBASE >> PGSHIFT)
72 
73 #define	DEV_BSHIFT   9		               /* log2(DEV_BSIZE) */
74 #define	DEV_BSIZE    (1 << DEV_BSHIFT)
75 
76 #define BLKDEV_IOSIZE 2048
77 #define	MAXPHYS	      (63 * 1024)     /* max raw I/O transfer size */
78 
79 #define	CLSIZELOG2    1
80 #define	CLSIZE	      2
81 
82 /* NOTE: SSIZE, SINCR and UPAGES must be multiples of CLSIZE */
83 #define	SSIZE	4		/* initial stack size/NBPG */
84 #define	SINCR	4		/* increment of stack/NBPG */
85 
86 #define	UPAGES	16		/* pages of u-area */
87 #define USPACE  (NBPG*UPAGES)
88 
89 /*
90  * Constants related to network buffer management.
91  * MCLBYTES must be no larger than CLBYTES (the software page size), and,
92  * on machines that exchange pages of input or output buffers with mbuf
93  * clusters (MAPPED_MBUFS), MCLBYTES must also be an integral multiple
94  * of the hardware page size.
95  */
96 
97 #ifndef	MSIZE
98 #define	MSIZE		128		/* size of an mbuf */
99 #endif	/* MSIZE */
100 
101 #ifndef	MCLSHIFT
102 #define	MCLSHIFT	10		/* convert bytes to m_buf clusters */
103 #endif	/* MCLSHIFT */
104 #define	MCLBYTES	(1 << MCLSHIFT)	/* size of an m_buf cluster */
105 #define	MCLOFSET	(MCLBYTES - 1)	/* offset within an m_buf cluster */
106 
107 #ifndef NMBCLUSTERS
108 #ifdef GATEWAY
109 #define	NMBCLUSTERS	512		/* map size, max cluster allocation */
110 #else
111 #define	NMBCLUSTERS	256		/* map size, max cluster allocation */
112 #endif	/* GATEWAY */
113 #endif	/* NMBCLUSTERS */
114 
115 /*
116  * Size of kernel malloc arena in CLBYTES-sized logical pages
117  */
118 
119 #ifndef NKMEMCLUSTERS
120 #define	NKMEMCLUSTERS	(2048*1024/CLBYTES)
121 #endif
122 
123 /*
124  * Some macros for units conversion
125  */
126 
127 /* pages ("clicks") to disk blocks */
128 #define	ctod(x)		((x) << (PGSHIFT - DEV_BSHIFT))
129 #define	dtoc(x)		((x) >> (PGSHIFT - DEV_BSHIFT))
130 
131 /* clicks to bytes */
132 #define	ctob(x)		((x) << PGSHIFT)
133 #define	btoc(x)		(((x) + PGOFSET) >> PGSHIFT)
134 #define	btop(x)		(((unsigned)(x)) >> PGSHIFT)
135 
136 /* bytes to disk blocks */
137 #define	btodb(x)	((x) >> DEV_BSHIFT)
138 #define	dbtob(x)	((x) << DEV_BSHIFT)
139 
140 /*
141  * Map a ``block device block'' to a file system block.
142  * This should be device dependent, and will be if we
143  * add an entry to cdevsw/bdevsw for that purpose.
144  * For now though just use DEV_BSIZE.
145  */
146 
147 #define	bdbtofsb(bn)	((bn) / (BLKDEV_IOSIZE/DEV_BSIZE))
148 
149 #define splx(reg)                                       \
150 ({                                                      \
151         register int val;                               \
152         asm __volatile ("mfpr $0x12,%0;mtpr %1,$0x12"	\
153                         : "&=g" (val)                   \
154                         : "g" (reg));                   \
155         val;                                            \
156 })
157 
158 
159 #define	spl0()		splx(0)		/* IPL0  */
160 #define splsoftclock()  splx(8)		/* IPL08 */
161 #define splsoftnet()    splx(0xc)	/* IPL0C */
162 #define	splddb()	splx(0xf)	/* IPL0F */
163 #define splbio()        splx(0x15)	/* IPL15 */
164 #define splnet()        splx(0x15)	/* IPL15 */
165 #define spltty()        splx(0x15)	/* IPL15 */
166 #define splimp()        splx(0x17)	/* IPL17 */
167 #define splclock()      splx(0x18)	/* IPL18 */
168 #define splhigh()       splx(0x1f)	/* IPL1F */
169 #define	splstatclock()	splclock()
170 
171 /* These are better to use when playing with VAX buses */
172 #define	spl4()		splx(0x14)
173 #define	spl5()		splx(0x15)
174 #define	spl6()		splx(0x16)
175 #define	spl7()		splx(0x17)
176 
177 #define	ovbcopy(x,y,z)	bcopy(x,y,z)
178 
179 #if !defined(VAX410) && !defined(VAX43)
180 #define vmapbuf(p,q)
181 #define vunmapbuf(p,q)
182 #endif
183 
184 /* Prototype needed for delay() */
185 #ifndef	_LOCORE
186 void	delay __P((int));
187 #endif
188 
189 #define	DELAY(x) delay(x)
190 
191 #endif /* _VAX_PARAM_H_ */
192