1251881Speter/*- 2251881Speter * Copyright (c) 1990 The Regents of the University of California. 3251881Speter * All rights reserved. 4251881Speter * 5251881Speter * This code is derived from software contributed to Berkeley by 6251881Speter * William Jolitz. 7251881Speter * 8251881Speter * Redistribution and use in source and binary forms, with or without 9251881Speter * modification, are permitted provided that the following conditions 10251881Speter * are met: 11251881Speter * 1. Redistributions of source code must retain the above copyright 12251881Speter * notice, this list of conditions and the following disclaimer. 13251881Speter * 2. Redistributions in binary form must reproduce the above copyright 14251881Speter * notice, this list of conditions and the following disclaimer in the 15251881Speter * documentation and/or other materials provided with the distribution. 16251881Speter * 4. Neither the name of the University nor the names of its contributors 17251881Speter * may be used to endorse or promote products derived from this software 18251881Speter * without specific prior written permission. 19251881Speter * 20251881Speter * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 21251881Speter * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 22251881Speter * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 23251881Speter * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 24251881Speter * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 25251881Speter * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 26251881Speter * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 27251881Speter * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 28251881Speter * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 29251881Speter * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 30251881Speter * SUCH DAMAGE. 31251881Speter * 32251881Speter * from: @(#)param.h 5.8 (Berkeley) 6/28/91 33251881Speter * $FreeBSD: releng/10.3/sys/i386/include/param.h 286878 2015-08-18 09:09:39Z kib $ 34251881Speter */ 35251881Speter 36251881Speter 37251881Speter#ifndef _I386_INCLUDE_PARAM_H_ 38251881Speter#define _I386_INCLUDE_PARAM_H_ 39251881Speter 40251881Speter#include <machine/_align.h> 41251881Speter 42251881Speter/* 43251881Speter * Machine dependent constants for Intel 386. 44251881Speter */ 45251881Speter 46251881Speter 47251881Speter#define __HAVE_ACPI 48251881Speter#define __HAVE_PIR 49251881Speter#define __PCI_REROUTE_INTERRUPT 50251881Speter 51251881Speter#ifndef MACHINE 52251881Speter#define MACHINE "i386" 53251881Speter#endif 54251881Speter#ifndef MACHINE_ARCH 55251881Speter#define MACHINE_ARCH "i386" 56251881Speter#endif 57251881Speter#define MID_MACHINE MID_I386 58251881Speter 59251881Speter#if defined(SMP) || defined(KLD_MODULE) 60251881Speter#ifndef MAXCPU 61251881Speter#define MAXCPU 32 62251881Speter#endif 63251881Speter#else 64251881Speter#define MAXCPU 1 65251881Speter#endif /* SMP || KLD_MODULE */ 66251881Speter 67251881Speter#ifndef MAXMEMDOM 68251881Speter#define MAXMEMDOM 1 69251881Speter#endif 70251881Speter 71251881Speter#define ALIGNBYTES _ALIGNBYTES 72251881Speter#define ALIGN(p) _ALIGN(p) 73251881Speter/* 74251881Speter * ALIGNED_POINTER is a boolean macro that checks whether an address 75251881Speter * is valid to fetch data elements of type t from on this architecture. 76251881Speter * This does not reflect the optimal alignment, just the possibility 77251881Speter * (within reasonable limits). 78262253Speter */ 79262253Speter#define ALIGNED_POINTER(p, t) 1 80262253Speter 81262253Speter/* 82251881Speter * CACHE_LINE_SIZE is the compile-time maximum cache line size for an 83251881Speter * architecture. It should be used with appropriate caution. 84251881Speter */ 85251881Speter#define CACHE_LINE_SHIFT 7 86251881Speter#define CACHE_LINE_SIZE (1 << CACHE_LINE_SHIFT) 87251881Speter 88251881Speter#define PAGE_SHIFT 12 /* LOG2(PAGE_SIZE) */ 89262253Speter#define PAGE_SIZE (1<<PAGE_SHIFT) /* bytes/page */ 90251881Speter#define PAGE_MASK (PAGE_SIZE-1) 91262253Speter#define NPTEPG (PAGE_SIZE/(sizeof (pt_entry_t))) 92251881Speter 93251881Speter#if defined(PAE) || defined(PAE_TABLES) 94251881Speter#define NPGPTD 4 95262253Speter#define PDRSHIFT 21 /* LOG2(NBPDR) */ 96262253Speter#define NPGPTD_SHIFT 9 97262253Speter#else 98262253Speter#define NPGPTD 1 99262253Speter#define PDRSHIFT 22 /* LOG2(NBPDR) */ 100251881Speter#define NPGPTD_SHIFT 10 101251881Speter#endif 102251881Speter 103251881Speter#define NBPTD (NPGPTD<<PAGE_SHIFT) 104251881Speter#define NPDEPTD (NBPTD/(sizeof (pd_entry_t))) 105251881Speter#define NPDEPG (PAGE_SIZE/(sizeof (pd_entry_t))) 106251881Speter#define NBPDR (1<<PDRSHIFT) /* bytes/page dir */ 107251881Speter#define PDRMASK (NBPDR-1) 108251881Speter 109251881Speter#define MAXPAGESIZES 2 /* maximum number of supported page sizes */ 110251881Speter 111251881Speter#define IOPAGES 2 /* pages of i/o permission bitmap */ 112251881Speter 113251881Speter#ifndef KSTACK_PAGES 114251881Speter#define KSTACK_PAGES 2 /* Includes pcb! */ 115251881Speter#endif 116251881Speter#define KSTACK_GUARD_PAGES 1 /* pages of kstack guard; 0 disables */ 117251881Speter#if KSTACK_PAGES < 4 118251881Speter#define TD0_KSTACK_PAGES 4 119251881Speter#else 120251881Speter#define TD0_KSTACK_PAGES KSTACK_PAGES 121251881Speter#endif 122251881Speter 123251881Speter/* 124251881Speter * Ceiling on amount of swblock kva space, can be changed via 125251881Speter * the kern.maxswzone /boot/loader.conf variable. 126251881Speter * 127251881Speter * 276 is sizeof(struct swblock), but we do not always have a definition 128251881Speter * in scope for struct swblock, so we have to hardcode it. Each struct 129251881Speter * swblock holds metadata for 32 pages, so in theory, this is enough for 130251881Speter * 16 GB of swap. In practice, however, the usable amount is considerably 131251881Speter * lower due to fragmentation. 132251881Speter */ 133251881Speter#ifndef VM_SWZONE_SIZE_MAX 134251881Speter#define VM_SWZONE_SIZE_MAX (276 * 128 * 1024) 135257286Scperciva#endif 136257286Scperciva 137251881Speter/* 138251881Speter * Ceiling on size of buffer cache (really only effects write queueing, 139289166Speter * the VM page cache is not effected), can be changed via 140251881Speter * the kern.maxbcache /boot/loader.conf variable. 141251881Speter * 142251881Speter * The value is equal to the size of the auto-tuned buffer map for 143251881Speter * the machine with 4GB of RAM, see vfs_bio.c:kern_vfs_bio_buffer_alloc(). 144251881Speter */ 145251881Speter#ifndef VM_BCACHE_SIZE_MAX 146251881Speter#define VM_BCACHE_SIZE_MAX (7224 * 16 * 1024) 147251881Speter#endif 148251881Speter 149251881Speter/* 150251881Speter * Mach derived conversion macros 151251881Speter */ 152251881Speter#define trunc_page(x) ((x) & ~PAGE_MASK) 153251881Speter#define round_page(x) (((x) + PAGE_MASK) & ~PAGE_MASK) 154251881Speter#define trunc_4mpage(x) ((x) & ~PDRMASK) 155251881Speter#define round_4mpage(x) ((((x)) + PDRMASK) & ~PDRMASK) 156251881Speter 157251881Speter#define atop(x) ((x) >> PAGE_SHIFT) 158251881Speter#define ptoa(x) ((x) << PAGE_SHIFT) 159251881Speter 160251881Speter#define i386_btop(x) ((x) >> PAGE_SHIFT) 161251881Speter#define i386_ptob(x) ((x) << PAGE_SHIFT) 162251881Speter 163251881Speter#define pgtok(x) ((x) * (PAGE_SIZE / 1024)) 164251881Speter 165251881Speter#define INKERNEL(va) (((vm_offset_t)(va)) >= VM_MAXUSER_ADDRESS && \ 166251881Speter ((vm_offset_t)(va)) < VM_MAX_KERNEL_ADDRESS) 167251881Speter 168251881Speter#endif /* !_I386_INCLUDE_PARAM_H_ */ 169251881Speter