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