param.h revision 195376
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 195376 2009-07-05 17:45:48Z sam $ 3180708Sjake */ 3280708Sjake 3380708Sjake/* 3480708Sjake * Machine dependent constants for sparc64. 3580708Sjake */ 3680708Sjake 3780708Sjake/* 3880708Sjake * Round p (pointer or byte index) up to a correctly-aligned value 3980708Sjake * for all data types (int, long, ...). The result is unsigned int 4080708Sjake * and must be cast to any desired pointer type. 4180708Sjake */ 4280708Sjake#ifndef _ALIGNBYTES 4380708Sjake#define _ALIGNBYTES 0xf 4480708Sjake#endif 4580708Sjake#ifndef _ALIGN 4680708Sjake#define _ALIGN(p) (((u_long)(p) + _ALIGNBYTES) & ~_ALIGNBYTES) 4780708Sjake#endif 4880708Sjake 4980708Sjake#ifndef _NO_NAMESPACE_POLLUTION 5080708Sjake 5180708Sjake#ifndef _MACHINE_PARAM_H_ 5280708Sjake#define _MACHINE_PARAM_H_ 5380708Sjake 5480708Sjake#ifndef MACHINE 5580708Sjake#define MACHINE "sparc64" 5680708Sjake#endif 5780708Sjake#ifndef MACHINE_ARCH 5880708Sjake#define MACHINE_ARCH "sparc64" 5980708Sjake#endif 6080708Sjake#define MID_MACHINE MID_SPARC64 6180708Sjake 62177661Sjb#if defined(SMP) || defined(KLD_MODULE) 6380708Sjake#define MAXCPU 16 6480708Sjake#else 6580708Sjake#define MAXCPU 1 66177661Sjb#endif /* SMP || KLD_MODULE */ 6780708Sjake 6891336Sjake#define INT_SHIFT 2 6991336Sjake#define PTR_SHIFT 3 7091336Sjake 7180708Sjake#define ALIGNBYTES _ALIGNBYTES 7280708Sjake#define ALIGN(p) _ALIGN(p) 73195376Ssam/* 74195376Ssam * ALIGNED_POINTER is a boolean macro that checks whether an address 75195376Ssam * is valid to fetch data elements of type t from on this architecture. 76195376Ssam * This does not reflect the optimal alignment, just the possibility 77195376Ssam * (within reasonable limits). 78195376Ssam */ 79195376Ssam#define ALIGNED_POINTER(p, t) ((((u_long)(p)) & (sizeof (t) - 1)) == 0) 8080708Sjake 81191278Srwatson/* 82191278Srwatson * CACHE_LINE_SIZE is the compile-time maximum cache line size for an 83191278Srwatson * architecture. It should be used with appropriate caution. 84191278Srwatson */ 85191309Srwatson#define CACHE_LINE_SHIFT 7 86191276Srwatson#define CACHE_LINE_SIZE (1 << CACHE_LINE_SHIFT) 87191276Srwatson 8880709Sjake#define PAGE_SHIFT_8K 13 89120710Salc#define PAGE_SIZE_8K (1L<<PAGE_SHIFT_8K) 9080709Sjake#define PAGE_MASK_8K (PAGE_SIZE_8K-1) 9180708Sjake 9280709Sjake#define PAGE_SHIFT_64K 16 93120710Salc#define PAGE_SIZE_64K (1L<<PAGE_SHIFT_64K) 9480709Sjake#define PAGE_MASK_64K (PAGE_SIZE_64K-1) 9580708Sjake 9680709Sjake#define PAGE_SHIFT_512K 19 97120710Salc#define PAGE_SIZE_512K (1L<<PAGE_SHIFT_512K) 9880709Sjake#define PAGE_MASK_512K (PAGE_SIZE_512K-1) 9980709Sjake 10080709Sjake#define PAGE_SHIFT_4M 22 101120710Salc#define PAGE_SIZE_4M (1L<<PAGE_SHIFT_4M) 10280709Sjake#define PAGE_MASK_4M (PAGE_SIZE_4M-1) 10380709Sjake 104165324Skmacy#define PAGE_SHIFT_32M 25 105165324Skmacy#define PAGE_SIZE_32M (1L<<PAGE_SHIFT_32M) 106165324Skmacy#define PAGE_MASK_32M (PAGE_SIZE_32M-1) 107165324Skmacy 108165324Skmacy#define PAGE_SHIFT_256M 28 109165324Skmacy#define PAGE_SIZE_256M (1L<<PAGE_SHIFT_256M) 110165324Skmacy#define PAGE_MASK_256M (PAGE_SIZE_256M-1) 111165324Skmacy 11286226Stmm#define PAGE_SHIFT_MIN PAGE_SHIFT_8K 11386226Stmm#define PAGE_SIZE_MIN PAGE_SIZE_8K 11486226Stmm#define PAGE_MASK_MIN PAGE_MASK_8K 11580709Sjake#define PAGE_SHIFT PAGE_SHIFT_8K /* LOG2(PAGE_SIZE) */ 11680709Sjake#define PAGE_SIZE PAGE_SIZE_8K /* bytes/page */ 11780709Sjake#define PAGE_MASK PAGE_MASK_8K 11886226Stmm#define PAGE_SHIFT_MAX PAGE_SHIFT_4M 11986226Stmm#define PAGE_SIZE_MAX PAGE_SIZE_4M 12086226Stmm#define PAGE_MASK_MAX PAGE_MASK_4M 12180709Sjake 122118239Speter#ifndef KSTACK_PAGES 12388781Sjake#define KSTACK_PAGES 4 /* pages of kernel stack (with pcb) */ 124118239Speter#endif 125116355Salc#define KSTACK_GUARD_PAGES 1 /* pages of kstack guard; 0 disables */ 12691360Sjake#define PCPU_PAGES 1 12783366Sjulian 128151344Skris/* 129151344Skris * Ceiling on size of buffer cache (really only effects write queueing, 130151344Skris * the VM page cache is not effected), can be changed via 131151344Skris * the kern.maxbcache /boot/loader.conf variable. 132151344Skris */ 133151344Skris#ifndef VM_BCACHE_SIZE_MAX 134151344Skris#define VM_BCACHE_SIZE_MAX (400 * 1024 * 1024) 135151344Skris#endif 13683366Sjulian 13780708Sjake/* 13880708Sjake * Mach derived conversion macros 13980708Sjake */ 14080709Sjake#define round_page(x) (((unsigned long)(x) + PAGE_MASK) & ~PAGE_MASK) 14180708Sjake#define trunc_page(x) ((unsigned long)(x) & ~PAGE_MASK) 14280708Sjake 14380708Sjake#define atop(x) ((unsigned long)(x) >> PAGE_SHIFT) 14480708Sjake#define ptoa(x) ((unsigned long)(x) << PAGE_SHIFT) 14580708Sjake 14680708Sjake#define sparc64_btop(x) ((unsigned long)(x) >> PAGE_SHIFT) 14780708Sjake#define sparc64_ptob(x) ((unsigned long)(x) << PAGE_SHIFT) 14880708Sjake 14980708Sjake#define pgtok(x) ((unsigned long)(x) * (PAGE_SIZE / 1024)) 15080708Sjake 15180708Sjake#endif /* !_MACHINE_PARAM_H_ */ 15280708Sjake#endif /* !_NO_NAMESPACE_POLLUTION */ 153