xref: /netbsd-src/sys/arch/vax/include/param.h (revision d0fed6c87ddc40a8bffa6f99e7433ddfc864dd83)
1 /*      $NetBSD: param.h,v 1.23 1997/02/24 23:23:06 fvdl 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  * ALIGNED_POINTER is a boolean macro that checks whether an address
62  * is valid to fetch data elements of type t from on this architecture.
63  * This does not reflect the optimal alignment, just the possibility
64  * (within reasonable limits).
65  *
66  */
67 
68 #define ALIGNBYTES		(sizeof(int) - 1)
69 #define ALIGN(p)		(((u_int)(p) + ALIGNBYTES) &~ ALIGNBYTES)
70 #define ALIGNED_POINTER(p,t)	((((u_long)(p)) & (sizeof(t)-1)) == 0)
71 
72 #define	PGSHIFT	 9                             /* LOG2(NBPG) */
73 #define	NBPG     (1<<PGSHIFT)                  /* (1 << PGSHIFT) bytes/page */
74 #define	PGOFSET	 (NBPG-1)	               /* byte offset into page */
75 #define	NPTEPG	 (NBPG/(sizeof (struct pte)))
76 
77 #define	KERNBASE     0x80000000	               /* start of kernel virtual */
78 #define	BTOPKERNBASE ((u_long)KERNBASE >> PGSHIFT)
79 
80 #define	DEV_BSHIFT   9		               /* log2(DEV_BSIZE) */
81 #define	DEV_BSIZE    (1 << DEV_BSHIFT)
82 
83 #define BLKDEV_IOSIZE 2048
84 #define	MAXPHYS		(63 * 1024)	/* max raw I/O transfer size */
85 #define	MAXBSIZE	0x4000		/* max FS block size - XXX */
86 
87 #define	CLSIZELOG2    1
88 #define	CLSIZE	      2
89 
90 /* NOTE: SSIZE, SINCR and UPAGES must be multiples of CLSIZE */
91 #define	SSIZE	4		/* initial stack size/NBPG */
92 #define	SINCR	4		/* increment of stack/NBPG */
93 
94 #define	UPAGES	16		/* pages of u-area */
95 #define USPACE  (NBPG*UPAGES)
96 
97 /*
98  * Constants related to network buffer management.
99  * MCLBYTES must be no larger than CLBYTES (the software page size), and,
100  * on machines that exchange pages of input or output buffers with mbuf
101  * clusters (MAPPED_MBUFS), MCLBYTES must also be an integral multiple
102  * of the hardware page size.
103  */
104 
105 #ifndef	MSIZE
106 #define	MSIZE		128		/* size of an mbuf */
107 #endif	/* MSIZE */
108 
109 #ifndef	MCLSHIFT
110 #define	MCLSHIFT	10		/* convert bytes to m_buf clusters */
111 #endif	/* MCLSHIFT */
112 #define	MCLBYTES	(1 << MCLSHIFT)	/* size of an m_buf cluster */
113 #define	MCLOFSET	(MCLBYTES - 1)	/* offset within an m_buf cluster */
114 
115 #ifndef NMBCLUSTERS
116 #ifdef GATEWAY
117 #define	NMBCLUSTERS	512		/* map size, max cluster allocation */
118 #else
119 #define	NMBCLUSTERS	256		/* map size, max cluster allocation */
120 #endif	/* GATEWAY */
121 #endif	/* NMBCLUSTERS */
122 
123 /*
124  * Size of kernel malloc arena in CLBYTES-sized logical pages
125  */
126 
127 #ifndef NKMEMCLUSTERS
128 #define	NKMEMCLUSTERS	(2048*1024/CLBYTES)
129 #endif
130 
131 /*
132  * Some macros for units conversion
133  */
134 
135 /* pages ("clicks") to disk blocks */
136 #define	ctod(x)		((x) << (PGSHIFT - DEV_BSHIFT))
137 #define	dtoc(x)		((x) >> (PGSHIFT - DEV_BSHIFT))
138 
139 /* clicks to bytes */
140 #define	ctob(x)		((x) << PGSHIFT)
141 #define	btoc(x)		(((x) + PGOFSET) >> PGSHIFT)
142 #define	btop(x)		(((unsigned)(x)) >> PGSHIFT)
143 
144 /* bytes to disk blocks */
145 #define	btodb(x)	((x) >> DEV_BSHIFT)
146 #define	dbtob(x)	((x) << DEV_BSHIFT)
147 
148 /*
149  * Map a ``block device block'' to a file system block.
150  * This should be device dependent, and will be if we
151  * add an entry to cdevsw/bdevsw for that purpose.
152  * For now though just use DEV_BSIZE.
153  */
154 
155 #define	bdbtofsb(bn)	((bn) / (BLKDEV_IOSIZE/DEV_BSIZE))
156 
157 #define splx(reg)                                       \
158 ({                                                      \
159         register int val;                               \
160         asm __volatile ("mfpr $0x12,%0;mtpr %1,$0x12"	\
161                         : "&=g" (val)                   \
162                         : "g" (reg));                   \
163         val;                                            \
164 })
165 
166 
167 #define	spl0()		splx(0)		/* IPL0  */
168 #define splsoftclock()  splx(8)		/* IPL08 */
169 #define splsoftnet()    splx(0xc)	/* IPL0C */
170 #define	splddb()	splx(0xf)	/* IPL0F */
171 #define splbio()        splx(0x15)	/* IPL15 */
172 #define splnet()        splx(0x15)	/* IPL15 */
173 #define spltty()        splx(0x15)	/* IPL15 */
174 #define splimp()        splx(0x17)	/* IPL17 */
175 #define splclock()      splx(0x18)	/* IPL18 */
176 #define splhigh()       splx(0x1f)	/* IPL1F */
177 #define	splstatclock()	splclock()
178 
179 /* These are better to use when playing with VAX buses */
180 #define	spl4()		splx(0x14)
181 #define	spl5()		splx(0x15)
182 #define	spl6()		splx(0x16)
183 #define	spl7()		splx(0x17)
184 
185 #define	ovbcopy(x,y,z)	bcopy(x,y,z)
186 
187 #if !defined(VAX410) && !defined(VAX43)
188 #define vmapbuf(p,q)
189 #define vunmapbuf(p,q)
190 #endif
191 
192 /* Prototype needed for delay() */
193 #ifndef	_LOCORE
194 void	delay __P((int));
195 #endif
196 
197 #define	DELAY(x) delay(x)
198 
199 #endif /* _VAX_PARAM_H_ */
200