param.h revision 83682
170584Sobrien/*-
270584Sobrien * Copyright (c) 2001 David E. O'Brien
370584Sobrien * Copyright (c) 1990 The Regents of the University of California.
470584Sobrien * All rights reserved.
570584Sobrien *
670584Sobrien * This code is derived from software contributed to Berkeley by
770584Sobrien * William Jolitz.
870584Sobrien *
970584Sobrien * Redistribution and use in source and binary forms, with or without
1070584Sobrien * modification, are permitted provided that the following conditions
1170584Sobrien * are met:
1270584Sobrien * 1. Redistributions of source code must retain the above copyright
1370584Sobrien *    notice, this list of conditions and the following disclaimer.
1470584Sobrien * 2. Redistributions in binary form must reproduce the above copyright
1570584Sobrien *    notice, this list of conditions and the following disclaimer in the
1670584Sobrien *    documentation and/or other materials provided with the distribution.
1770584Sobrien * 3. All advertising materials mentioning features or use of this software
1870584Sobrien *    must display the following acknowledgement:
1970584Sobrien *	This product includes software developed by the University of
2070584Sobrien *	California, Berkeley and its contributors.
2170584Sobrien * 4. Neither the name of the University nor the names of its contributors
2270584Sobrien *    may be used to endorse or promote products derived from this software
2370584Sobrien *    without specific prior written permission.
2470584Sobrien *
2570584Sobrien * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
2670584Sobrien * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
2770584Sobrien * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
2870584Sobrien * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
2970584Sobrien * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
3070584Sobrien * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
3170584Sobrien * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
3270584Sobrien * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
3370584Sobrien * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
3470584Sobrien * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
3570584Sobrien * SUCH DAMAGE.
3670584Sobrien *
3770584Sobrien *	from: @(#)param.h	5.8 (Berkeley) 6/28/91
3870584Sobrien * $FreeBSD: head/sys/powerpc/include/param.h 83682 2001-09-20 00:47:17Z mp $
3970584Sobrien */
4070584Sobrien
4170584Sobrien/*
4270584Sobrien * Machine dependent constants for PowerPC (32-bit only currently)
4370584Sobrien */
4470584Sobrien
4570584Sobrien/*
4670584Sobrien * Round p (pointer or byte index) up to a correctly-aligned value
4770584Sobrien * for all data types (int, long, ...).   The result is unsigned int
4870584Sobrien * and must be cast to any desired pointer type.
4970584Sobrien */
5070584Sobrien#ifndef _ALIGNBYTES
5170584Sobrien#define	_ALIGNBYTES	(sizeof(int) - 1)
5270584Sobrien#endif
5370584Sobrien#ifndef _ALIGN
5470584Sobrien#define	_ALIGN(p)	(((unsigned)(p) + _ALIGNBYTES) & ~_ALIGNBYTES)
5570584Sobrien#endif
5670584Sobrien
5770584Sobrien#ifndef	_MACHINE
5870584Sobrien#define	_MACHIN		"powerpc"
59186128Snwhitehorn#endif
60186128Snwhitehorn#ifndef _MACHINE_ARCH
61186128Snwhitehorn#define	_MACHINE_ARCH	"powerpc"
6270584Sobrien#endif
6370584Sobrien
6470584Sobrien#ifndef _NO_NAMESPACE_POLLUTION
6570584Sobrien
6670584Sobrien#ifndef _MACHINE_PARAM_H_
6770584Sobrien#define	_MACHINE_PARAM_H_
6870584Sobrien
6970584Sobrien#ifndef MACHINE
7070584Sobrien#define	MACHINE		"powerpc"
7170584Sobrien#endif
7270584Sobrien#ifndef MACHINE_ARCH
73177661Sjb#define	MACHINE_ARCH	"powerpc"
7470584Sobrien#endif
7570584Sobrien#define	MID_MACHINE	MID_POWERPC
7670584Sobrien
77177661Sjb#if !defined(LOCORE)
7870584Sobrien#include <machine/cpu.h>
7970584Sobrien#endif
8070584Sobrien
8170584Sobrien/*
82191276Srwatson * OBJFORMAT_NAMES is a comma-separated list of the object formats
83191276Srwatson * that are supported on the architecture.
84191276Srwatson */
85191276Srwatson#define	OBJFORMAT_NAMES		"elf"
86191276Srwatson#define	OBJFORMAT_DEFAULT	"elf"
8770584Sobrien
8870584Sobrien#ifdef SMP
8970584Sobrien#define	MAXCPU		2
9070584Sobrien#else
9170584Sobrien#define	MAXCPU		1
92118239Speter#endif /* SMP */
9396329Sbenno
94118239Speter#define	ALIGNBYTES	_ALIGNBYTES
95116355Salc#define	ALIGN(p)	_ALIGN(p)
9683682Smp
9770584Sobrien#define	PAGE_SHIFT	12
9870584Sobrien#define	PAGE_SIZE	(1 << PAGE_SHIFT)	/* Page size */
9970584Sobrien#define	PAGE_MASK	(PAGE_SIZE - 1)
10070584Sobrien#define	NPTEPG		(PAGE_SIZE/(sizeof (pt_entry_t)))
10178342Sbenno
10270584Sobrien#define	KERNBASE	0x100000	/* start of kernel virtual */
10370584Sobrien#define	BTOPKERNBASE	((u_long)KERNBASE >> PGSHIFT)
10470584Sobrien
10570584Sobrien#define	DEV_BSHIFT	9		/* log2(DEV_BSIZE) */
10678342Sbenno#define	DEV_BSIZE	(1 << DEV_BSHIFT)
10778342Sbenno
10870584Sobrien#ifndef BLKDEV_IOSIZE
10970584Sobrien#define	BLKDEV_IOSIZE	PAGE_SIZE	/* default block device I/O size */
11070584Sobrien#endif
11170584Sobrien#define	DFLTPHYS	(64 * 1024)	/* default max raw I/O transfer size */
11270584Sobrien#define	MAXPHYS		(128 * 1024)	/* max raw I/O transfer size */
11370584Sobrien#define	MAXDUMPPGS	(DFLTPHYS/PAGE_SIZE)
11470584Sobrien
11570584Sobrien#ifndef KSTACK_UPAGES
116#define	KSTACK_PAGES	2		/* includes pcb */
117#endif
118#define	USPACE		(KSTACK_PAGES * PAGE_SIZE)	/* total size of pcb */
119#define	UAREA_PAGES	1		/* holds struct user WITHOUT PCB */
120
121/*
122 * Constants related to network buffer management.
123 * MCLBYTES must be no larger than PAGE_SIZE.
124 */
125#ifndef	MSIZE
126#define	MSIZE		256		/* size of an mbuf */
127#endif	/* MSIZE */
128
129#ifndef	MCLSHIFT
130#define	MCLSHIFT	11		/* convert bytes to mbuf clusters */
131#endif	/* MCLSHIFT */
132#define	MCLBYTES	(1 << MCLSHIFT)	/* size of an mbuf cluster */
133
134/*
135 * Some macros for units conversion
136 */
137
138/* pages ("clicks") to bytes */
139#define	ctob(x)		((x) << PAGE_SHIFT)
140
141/* bytes to clicks */
142#define	btoc(x)		(((unsigned)(x) + PAGE_MASK) >> PAGE_SHIFT)
143
144/* pages ("clicks") to disk blocks */
145#define	ctod(x)		((x) << (PAGE_SHIFT - DEV_BSHIFT))
146#define	dtoc(x)		((x) >> (PAGE_SHIFT - DEV_BSHIFT))
147
148/* bytes to disk blocks */
149/*
150 * btodb() is messy and perhaps slow because `bytes' may be an off_t.  We
151 * want to shift an unsigned type to avoid sign extension and we don't
152 * want to widen `bytes' unnecessarily.  Assume that the result fits in
153 * a daddr_t.
154 */
155#define	btodb(bytes)	 		/* calculates (bytes / DEV_BSIZE) */ \
156	(sizeof (bytes) > sizeof(long) \
157	 ? (daddr_t)((unsigned long long)(bytes) >> DEV_BSHIFT) \
158	 : (daddr_t)((unsigned long)(bytes) >> DEV_BSHIFT))
159
160#define	dbtob(db)			/* calculates (db * DEV_BSIZE) */ \
161	((off_t)(db) << DEV_BSHIFT)
162
163/*
164 * Mach derived conversion macros
165 */
166#define	trunc_page(x)		((unsigned long)(x) & ~(PAGE_MASK))
167#define	round_page(x)		(((x) + PAGE_MASK) & ~PAGE_MASK)
168#define	trunc_4mpage(x)		((unsigned)(x) & ~PDRMASK)
169#define	round_4mpage(x)		((((unsigned)(x)) + PDRMASK) & ~PDRMASK)
170
171#define	atop(x)			((unsigned long)(x) >> PAGE_SHIFT)
172#define	ptoa(x)			((unsigned long)(x) << PAGE_SHIFT)
173
174#define	powerpc_btop(x)		((unsigned)(x) >> PAGE_SHIFT)
175#define	powerpc_ptob(x)		((unsigned)(x) << PAGE_SHIFT)
176
177#define	pgtok(x)		((x) * (PAGE_SIZE / 1024))
178
179/* XXX: NetBSD defines that we're using for the moment */
180#define	USER_SR		13
181#define	KERNEL_SR	14
182#define	KERNEL_SEGMENT	(0xfffff0 + KERNEL_SR)
183#define	EMPTY_SEGMENT	0xfffff0
184#define	USER_ADDR	((void *)(USER_SR << ADDR_SR_SHFT))
185#define	SEGMENT_LENGTH	0x10000000
186#define	SEGMENT_MASK	0xf0000000
187
188#if !defined(NPMAPS)
189#define	NPMAPS		32768
190#endif /* !defined(NPMAPS) */
191
192#if !defined(MSGBUFSIZE)
193#define	MSGBUFSIZE	PAGE_SIZE
194#endif /* !defined(MSGBUFSIZE) */
195
196/*
197 * XXX: Stop NetBSD msgbuf_paddr code from happening.
198 */
199#define	MSGBUFADDR
200
201#endif /* !_MACHINE_PARAM_H_ */
202#endif /* !_NO_NAMESPACE_POLLUTION */
203