param.h revision 88781
180708Sjake/*- 280708Sjake * Copyright (c) 1990 The Regents of the University of California. 380708Sjake * All rights reserved. 480708Sjake * 580708Sjake * This code is derived from software contributed to Berkeley by 680708Sjake * William Jolitz. 780708Sjake * 880708Sjake * Redistribution and use in source and binary forms, with or without 980708Sjake * modification, are permitted provided that the following conditions 1080708Sjake * are met: 1180708Sjake * 1. Redistributions of source code must retain the above copyright 1280708Sjake * notice, this list of conditions and the following disclaimer. 1380708Sjake * 2. Redistributions in binary form must reproduce the above copyright 1480708Sjake * notice, this list of conditions and the following disclaimer in the 1580708Sjake * documentation and/or other materials provided with the distribution. 1680708Sjake * 1780708Sjake * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 1880708Sjake * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 1980708Sjake * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 2080708Sjake * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 2180708Sjake * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 2280708Sjake * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 2380708Sjake * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 2480708Sjake * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 2580708Sjake * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 2680708Sjake * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 2780708Sjake * SUCH DAMAGE. 2880708Sjake * 2980708Sjake * from: @(#)param.h 5.8 (Berkeley) 6/28/91 3080708Sjake * $FreeBSD: head/sys/sparc64/include/param.h 88781 2002-01-01 20:26:46Z jake $ 3180708Sjake */ 3280708Sjake 3380708Sjake/* 3480708Sjake * Machine dependent constants for sparc64. 3580708Sjake */ 3680708Sjake 3780708Sjake#define TODO \ 3888624Sjake panic("implement %s", __func__) 3980708Sjake 4080708Sjake/* 4180708Sjake * Round p (pointer or byte index) up to a correctly-aligned value 4280708Sjake * for all data types (int, long, ...). The result is unsigned int 4380708Sjake * and must be cast to any desired pointer type. 4480708Sjake */ 4580708Sjake#ifndef _ALIGNBYTES 4680708Sjake#define _ALIGNBYTES 0xf 4780708Sjake#endif 4880708Sjake#ifndef _ALIGN 4980708Sjake#define _ALIGN(p) (((u_long)(p) + _ALIGNBYTES) & ~_ALIGNBYTES) 5080708Sjake#endif 5180708Sjake 5280708Sjake#ifndef _MACHINE 5380708Sjake#define _MACHINE sparc64 5480708Sjake#endif 5580708Sjake#ifndef _MACHINE_ARCH 5680708Sjake#define _MACHINE_ARCH sparc64 5780708Sjake#endif 5880708Sjake 5980708Sjake#ifndef _NO_NAMESPACE_POLLUTION 6080708Sjake 6180708Sjake#ifndef _MACHINE_PARAM_H_ 6280708Sjake#define _MACHINE_PARAM_H_ 6380708Sjake 6480708Sjake#ifndef MACHINE 6580708Sjake#define MACHINE "sparc64" 6680708Sjake#endif 6780708Sjake#ifndef MACHINE_ARCH 6880708Sjake#define MACHINE_ARCH "sparc64" 6980708Sjake#endif 7080708Sjake#define MID_MACHINE MID_SPARC64 7180708Sjake 7280708Sjake/* 7380708Sjake * OBJFORMAT_NAMES is a comma-separated list of the object formats 7480708Sjake * that are supported on the architecture. 7580708Sjake */ 7680708Sjake#define OBJFORMAT_NAMES "elf" 7780708Sjake#define OBJFORMAT_DEFAULT "elf" 7880708Sjake 7980708Sjake#ifdef SMP 8080708Sjake#define MAXCPU 16 8180708Sjake#else 8280708Sjake#define MAXCPU 1 8380708Sjake#endif /* SMP */ 8480708Sjake 8580708Sjake#define ALIGNBYTES _ALIGNBYTES 8680708Sjake#define ALIGN(p) _ALIGN(p) 8780708Sjake 8880709Sjake#define PAGE_SHIFT_8K 13 8988624Sjake#define PAGE_SIZE_8K (1UL<<PAGE_SHIFT_8K) 9080709Sjake#define PAGE_MASK_8K (PAGE_SIZE_8K-1) 9180708Sjake 9280709Sjake#define PAGE_SHIFT_64K 16 9388624Sjake#define PAGE_SIZE_64K (1UL<<PAGE_SHIFT_64K) 9480709Sjake#define PAGE_MASK_64K (PAGE_SIZE_64K-1) 9580708Sjake 9680709Sjake#define PAGE_SHIFT_512K 19 9788624Sjake#define PAGE_SIZE_512K (1UL<<PAGE_SHIFT_512K) 9880709Sjake#define PAGE_MASK_512K (PAGE_SIZE_512K-1) 9980709Sjake 10080709Sjake#define PAGE_SHIFT_4M 22 10188624Sjake#define PAGE_SIZE_4M (1UL<<PAGE_SHIFT_4M) 10280709Sjake#define PAGE_MASK_4M (PAGE_SIZE_4M-1) 10380709Sjake 10486226Stmm#define PAGE_SHIFT_MIN PAGE_SHIFT_8K 10586226Stmm#define PAGE_SIZE_MIN PAGE_SIZE_8K 10686226Stmm#define PAGE_MASK_MIN PAGE_MASK_8K 10780709Sjake#define PAGE_SHIFT PAGE_SHIFT_8K /* LOG2(PAGE_SIZE) */ 10880709Sjake#define PAGE_SIZE PAGE_SIZE_8K /* bytes/page */ 10980709Sjake#define PAGE_MASK PAGE_MASK_8K 11086226Stmm#define PAGE_SHIFT_MAX PAGE_SHIFT_4M 11186226Stmm#define PAGE_SIZE_MAX PAGE_SIZE_4M 11286226Stmm#define PAGE_MASK_MAX PAGE_MASK_4M 11380709Sjake 11480708Sjake#define DEV_BSHIFT 9 /* log2(DEV_BSIZE) */ 11580708Sjake#define DEV_BSIZE (1<<DEV_BSHIFT) 11680708Sjake 11780708Sjake#ifndef BLKDEV_IOSIZE 11880708Sjake#define BLKDEV_IOSIZE PAGE_SIZE /* default block device I/O size */ 11980708Sjake#endif 12080708Sjake#define DFLTPHYS (64 * 1024) /* default max raw I/O transfer size */ 12180708Sjake#define MAXPHYS (128 * 1024) /* max raw I/O transfer size */ 12280708Sjake#define MAXDUMPPGS (DFLTPHYS/PAGE_SIZE) 12380708Sjake 12488781Sjake#define KSTACK_PAGES 4 /* pages of kernel stack (with pcb) */ 12588781Sjake#define UAREA_PAGES 1 /* pages of user area */ 12683366Sjulian 12788781Sjake#define PANIC_STACK_PAGES 1 12888781Sjake 12984178Sjake#define KSTACK_GUARD /* compile in kstack guard page */ 13084178Sjake#define KSTACK_GUARD_PAGES 1 13183366Sjulian 13280708Sjake/* 13380708Sjake * Constants related to network buffer management. 13480708Sjake * MCLBYTES must be no larger than PAGE_SIZE. 13580708Sjake */ 13680708Sjake#ifndef MSIZE 13780708Sjake#define MSIZE 256 /* size of an mbuf */ 13880708Sjake#endif /* MSIZE */ 13980708Sjake 14080708Sjake#ifndef MCLSHIFT 14180708Sjake#define MCLSHIFT 11 /* convert bytes to mbuf clusters */ 14280708Sjake#endif /* MCLSHIFT */ 14380708Sjake#define MCLBYTES (1 << MCLSHIFT) /* size of an mbuf cluster */ 14480708Sjake 14580708Sjake/* 14680708Sjake * Some macros for units conversion 14780708Sjake */ 14880708Sjake 14980708Sjake/* clicks to bytes */ 15080709Sjake#define ctob(x) ((unsigned long)(x)<<PAGE_SHIFT) 15180708Sjake 15280708Sjake/* bytes to clicks */ 15380709Sjake#define btoc(x) (((unsigned long)(x)+PAGE_MASK)>>PAGE_SHIFT) 15480708Sjake 15580709Sjake/* bytes to disk blocks */ 15680708Sjake#define btodb(bytes) /* calculates (bytes / DEV_BSIZE) */ \ 15780709Sjake (daddr_t)((unsigned long)(bytes) >> DEV_BSHIFT) 15880708Sjake 15980709Sjake/* disk blocks to bytes */ 16080708Sjake#define dbtob(db) /* calculates (db * DEV_BSIZE) */ \ 16180709Sjake (off_t)((unsigned long)(db) << DEV_BSHIFT) 16280708Sjake 16380708Sjake/* 16480708Sjake * Mach derived conversion macros 16580708Sjake */ 16680709Sjake#define round_page(x) (((unsigned long)(x) + PAGE_MASK) & ~PAGE_MASK) 16780708Sjake#define trunc_page(x) ((unsigned long)(x) & ~PAGE_MASK) 16880708Sjake 16980708Sjake#define atop(x) ((unsigned long)(x) >> PAGE_SHIFT) 17080708Sjake#define ptoa(x) ((unsigned long)(x) << PAGE_SHIFT) 17180708Sjake 17280708Sjake#define sparc64_btop(x) ((unsigned long)(x) >> PAGE_SHIFT) 17380708Sjake#define sparc64_ptob(x) ((unsigned long)(x) << PAGE_SHIFT) 17480708Sjake 17580708Sjake#define pgtok(x) ((unsigned long)(x) * (PAGE_SIZE / 1024)) 17680708Sjake 17788624Sjake#define ASSERT_EQUAL(x, y) _ASSERT_EQUAL(x, y, __LINE__) 17888624Sjake#define _ASSERT_EQUAL(x, y, z) __ASSERT_EQUAL(x, y, z) 17988624Sjake#define __ASSERT_EQUAL(x, y, z) typedef char __assert ## z[(x) == (y) ? 1 : -1] 18088624Sjake 18180708Sjake#endif /* !_MACHINE_PARAM_H_ */ 18280708Sjake#endif /* !_NO_NAMESPACE_POLLUTION */ 183