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