xref: /netbsd-src/sys/arch/vax/include/param.h (revision 2a399c6883d870daece976daec6ffa7bb7f934ce)
1 /*      $NetBSD: param.h,v 1.28 1997/11/05 04:23:39 thorpej 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 #ifndef MSGBUFSIZE
98 #define MSGBUFSIZE	(CLBYTES * 4)	/* default message buffer size */
99 #endif
100 
101 /*
102  * Constants related to network buffer management.
103  * MCLBYTES must be no larger than CLBYTES (the software page size), and,
104  * on machines that exchange pages of input or output buffers with mbuf
105  * clusters (MAPPED_MBUFS), MCLBYTES must also be an integral multiple
106  * of the hardware page size.
107  */
108 
109 #ifndef	MSIZE
110 #define	MSIZE		128		/* size of an mbuf */
111 #endif	/* MSIZE */
112 
113 #ifndef	MCLSHIFT
114 #define	MCLSHIFT	10		/* convert bytes to m_buf clusters */
115 #endif	/* MCLSHIFT */
116 #define	MCLBYTES	(1 << MCLSHIFT)	/* size of an m_buf cluster */
117 #define	MCLOFSET	(MCLBYTES - 1)	/* offset within an m_buf cluster */
118 
119 #ifndef NMBCLUSTERS
120 #ifdef GATEWAY
121 #define	NMBCLUSTERS	512		/* map size, max cluster allocation */
122 #else
123 #define	NMBCLUSTERS	256		/* map size, max cluster allocation */
124 #endif	/* GATEWAY */
125 #endif	/* NMBCLUSTERS */
126 
127 /*
128  * Size of kernel malloc arena in CLBYTES-sized logical pages
129  */
130 
131 #ifndef NKMEMCLUSTERS
132 #define	NKMEMCLUSTERS	(2048*1024/CLBYTES)
133 #endif
134 
135 /*
136  * Some macros for units conversion
137  */
138 
139 /* pages ("clicks") to disk blocks */
140 #define	ctod(x)		((x) << (PGSHIFT - DEV_BSHIFT))
141 #define	dtoc(x)		((x) >> (PGSHIFT - DEV_BSHIFT))
142 
143 /* clicks to bytes */
144 #define	ctob(x)		((x) << PGSHIFT)
145 #define	btoc(x)		(((unsigned)(x) + PGOFSET) >> PGSHIFT)
146 #define	btop(x)		(((unsigned)(x)) >> PGSHIFT)
147 
148 /* bytes to disk blocks */
149 #define	btodb(x)	((x) >> DEV_BSHIFT)
150 #define	dbtob(x)	((x) << DEV_BSHIFT)
151 
152 /*
153  * Map a ``block device block'' to a file system block.
154  * This should be device dependent, and will be if we
155  * add an entry to cdevsw/bdevsw for that purpose.
156  * For now though just use DEV_BSIZE.
157  */
158 
159 #define	bdbtofsb(bn)	((bn) / (BLKDEV_IOSIZE/DEV_BSIZE))
160 
161 #define splx(reg)                                       \
162 ({                                                      \
163         register int val;                               \
164         __asm__ __volatile ("mfpr $0x12,%0;mtpr %1,$0x12"	\
165                         : "&=g" (val)                   \
166                         : "g" (reg));                   \
167         val;                                            \
168 })
169 
170 
171 #define	spl0()		splx(0)		/* IPL0  */
172 #define splsoftclock()  splx(8)		/* IPL08 */
173 #define splsoftnet()    splx(0xc)	/* IPL0C */
174 #define	splddb()	splx(0xf)	/* IPL0F */
175 #define splbio()        splx(0x15)	/* IPL15 */
176 #define splnet()        splx(0x15)	/* IPL15 */
177 #define spltty()        splx(0x15)	/* IPL15 */
178 #define splimp()        splx(0x17)	/* IPL17 */
179 #define splclock()      splx(0x18)	/* IPL18 */
180 #define splhigh()       splx(0x1f)	/* IPL1F */
181 #define	splstatclock()	splclock()
182 
183 /* These are better to use when playing with VAX buses */
184 #define	spl4()		splx(0x14)
185 #define	spl5()		splx(0x15)
186 #define	spl6()		splx(0x16)
187 #define	spl7()		splx(0x17)
188 
189 #define	ovbcopy(x,y,z)	bcopy(x,y,z)
190 
191 #if !defined(VAX410) && !defined(VAX43)
192 #define vmapbuf(p,q)
193 #define vunmapbuf(p,q)
194 #endif
195 
196 #ifdef _KERNEL
197 /* Prototype needed for delay() */
198 #ifndef	_LOCORE
199 void	delay __P((int));
200 #endif
201 
202 #define	DELAY(x) delay(x)
203 #endif /* _KERNEL */
204 
205 #endif /* _VAX_PARAM_H_ */
206