date and time created 91/05/09 00:09:50 by bostic
[unix-history] / usr / src / sys / hp300 / include / param.h
CommitLineData
88a7e859
KM
1/*
2 * Copyright (c) 1988 University of Utah.
3 * Copyright (c) 1982, 1986, 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 * the Systems Programming Group of the University of Utah Computer
8 * Science Department.
9 *
10 * %sccs.include.redist.c%
11 *
12 * from: Utah $Hdr: machparam.h 1.11 89/08/14$
13 *
96b316eb 14 * @(#)param.h 7.5 (Berkeley) %G%
88a7e859
KM
15 */
16
17/*
18 * Machine dependent constants for HP9000 series 300.
19 */
20#define MACHINE "hp300"
21
88a7e859
KM
22#define NBPG 4096 /* bytes/page */
23#define PGOFSET (NBPG-1) /* byte offset into page */
24#define PGSHIFT 12 /* LOG2(NBPG) */
25#define NPTEPG (NBPG/(sizeof (struct pte)))
26
27#define NBSEG (1024*NBPG) /* bytes/segment */
28#define SEGOFSET (NBSEG-1) /* byte offset into segment */
29#define SEGSHIFT 22 /* LOG2(NBSEG) */
30
31#define KERNBASE 0x00000000 /* start of kernel virtual */
32#define BTOPKERNBASE ((u_long)KERNBASE >> PGSHIFT)
33
34#define DEV_BSIZE 512
35#define DEV_BSHIFT 9 /* log2(DEV_BSIZE) */
36#define BLKDEV_IOSIZE 2048
37#define MAXPHYS (64 * 1024) /* max raw I/O transfer size */
38
39#define CLSIZE 1
40#define CLSIZELOG2 0
41
98a9a1f2 42/* NOTE: SSIZE, SINCR and UPAGES must be multiples of CLSIZE */
88a7e859
KM
43#define SSIZE 1 /* initial stack size/NBPG */
44#define SINCR 1 /* increment of stack/NBPG */
45
46#define UPAGES 3 /* pages of u-area */
47
48/*
49 * Constants related to network buffer management.
50 * MCLBYTES must be no larger than CLBYTES (the software page size), and,
51 * on machines that exchange pages of input or output buffers with mbuf
52 * clusters (MAPPED_MBUFS), MCLBYTES must also be an integral multiple
53 * of the hardware page size.
54 */
55#define MSIZE 128 /* size of an mbuf */
56#define MCLBYTES 1024
57#define MCLSHIFT 10
58#define MCLOFSET (MCLBYTES - 1)
59#ifndef NMBCLUSTERS
60#ifdef GATEWAY
61#define NMBCLUSTERS 512 /* map size, max cluster allocation */
62#else
63#define NMBCLUSTERS 256 /* map size, max cluster allocation */
64#endif
65#endif
66
67/*
68 * Size of kernel malloc arena in CLBYTES-sized logical pages
69 */
70#ifndef NKMEMCLUSTERS
71#define NKMEMCLUSTERS (512*1024/CLBYTES)
72#endif
73
96b316eb 74/* pages ("clicks") (4096 bytes) to disk blocks */
88a7e859
KM
75#define ctod(x) ((x)<<(PGSHIFT-DEV_BSHIFT))
76#define dtoc(x) ((x)>>(PGSHIFT-DEV_BSHIFT))
77#define dtob(x) ((x)<<DEV_BSHIFT)
78
96b316eb 79/* pages to bytes */
88a7e859
KM
80#define ctob(x) ((x)<<PGSHIFT)
81
96b316eb 82/* bytes to pages */
88a7e859
KM
83#define btoc(x) (((unsigned)(x)+(NBPG-1))>>PGSHIFT)
84
85#define btodb(bytes) /* calculates (bytes / DEV_BSIZE) */ \
86 ((unsigned)(bytes) >> DEV_BSHIFT)
87#define dbtob(db) /* calculates (db * DEV_BSIZE) */ \
88 ((unsigned)(db) << DEV_BSHIFT)
89
90/*
91 * Map a ``block device block'' to a file system block.
98a9a1f2
MK
92 * This should be device dependent, and should use the bsize
93 * field from the disk label.
88a7e859
KM
94 * For now though just use DEV_BSIZE.
95 */
96#define bdbtofsb(bn) ((bn) / (BLKDEV_IOSIZE/DEV_BSIZE))
97
4534a638
KM
98/*
99 * Mach derived conversion macros
100 */
101#define hp300_round_seg(x) ((((unsigned)(x)) + NBSEG - 1) & ~(NBSEG-1))
102#define hp300_trunc_seg(x) ((unsigned)(x) & ~(NBSEG-1))
103#define hp300_round_page(x) ((((unsigned)(x)) + NBPG - 1) & ~(NBPG-1))
104#define hp300_trunc_page(x) ((unsigned)(x) & ~(NBPG-1))
105#define hp300_btos(x) ((unsigned)(x) >> SEGSHIFT)
106#define hp300_stob(x) ((unsigned)(x) << SEGSHIFT)
107#define hp300_btop(x) ((unsigned)(x) >> PGSHIFT)
108#define hp300_ptob(x) ((unsigned)(x) << PGSHIFT)
109
88a7e859 110/*
98a9a1f2 111 * spl functions; all but spl0 are done in-line
88a7e859 112 */
98a9a1f2
MK
113#include <machine/psl.h>
114
115#define _spl(s) \
116({ \
117 register int _spl_r; \
118\
119 asm __volatile ("clrl %0; movew sr,%0; movew %1,sr" : \
120 "&=d" (_spl_r) : "di" (s)); \
121 _spl_r; \
122})
123
124/* spl0 requires checking for software interrupts */
125#define spl1() _spl(PSL_S|PSL_IPL1)
126#define spl2() _spl(PSL_S|PSL_IPL2)
127#define spl3() _spl(PSL_S|PSL_IPL3)
128#define spl4() _spl(PSL_S|PSL_IPL4)
129#define spl5() _spl(PSL_S|PSL_IPL5)
130#define spl6() _spl(PSL_S|PSL_IPL6)
131#define spl7() _spl(PSL_S|PSL_IPL7)
132
133#define splsoftclock() spl1()
134#define splnet() spl1()
135#define splbio() spl5()
136#define splimp() spl5()
137#define spltty() spl5()
138#define splclock() spl6()
139#define splvm() spl6()
140#define splhigh() spl7()
141#define splsched() spl7()
142
143/* watch out for side effects */
144#define splx(s) (s & PSL_IPL ? _spl(s) : spl0())
88a7e859
KM
145
146#ifdef KERNEL
147#ifndef LOCORE
148int cpuspeed;
149#define DELAY(n) { register int N = cpuspeed * (n); while (--N > 0); }
150#endif
151
152#else KERNEL
153#define DELAY(n) { register int N = (n); while (--N > 0); }
154#endif KERNEL
155
156#ifdef HPUXCOMPAT
157/*
158 * Constants/macros for HPUX multiple mapping of user address space.
159 * Pages in the first 256Mb are mapped in at every 256Mb segment.
160 */
161#define HPMMMASK 0xF0000000
162#define ISHPMMADDR(v) \
98a9a1f2 163 ((curproc->p_addr->u_pcb.pcb_flags&PCB_HPUXMMAP) && ((unsigned)(v)&HPMMMASK) != HPMMMASK)
88a7e859
KM
164#define HPMMBASEADDR(v) ((unsigned)(v) & ~HPMMMASK)
165#endif