1 /* $OpenBSD: vmparam.h,v 1.39 2007/06/01 18:57:02 miod Exp $ */
2 /* $NetBSD: vmparam.h,v 1.15 1994/10/27 04:16:34 cgd Exp $ */
3
4 /*-
5 * Copyright (c) 1990 The Regents of the University of California.
6 * All rights reserved.
7 *
8 * This code is derived from software contributed to Berkeley by
9 * William Jolitz.
10 *
11 * Redistribution and use in source and binary forms, with or without
12 * modification, are permitted provided that the following conditions
13 * are met:
14 * 1. Redistributions of source code must retain the above copyright
15 * notice, this list of conditions and the following disclaimer.
16 * 2. Redistributions in binary form must reproduce the above copyright
17 * notice, this list of conditions and the following disclaimer in the
18 * documentation and/or other materials provided with the distribution.
19 * 3. Neither the name of the University nor the names of its contributors
20 * may be used to endorse or promote products derived from this software
21 * without specific prior written permission.
22 *
23 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
24 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
26 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
27 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
28 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
29 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
30 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
32 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
33 * SUCH DAMAGE.
34 *
35 * @(#)vmparam.h 5.9 (Berkeley) 5/12/91
36 */
37
38 #ifndef _MACHINE_VM_PARAM_H_
39 #define _MACHINE_VM_PARAM_H_
40 /*
41 * Machine dependent constants for 386.
42 */
43
44 /*
45 * Virtual address space arrangement. On 386, both user and kernel
46 * share the address space, not unlike the vax.
47 * USRTEXT is the start of the user text/data space, while USRSTACK
48 * is the top (end) of the user stack. Immediately above the user stack
49 * resides the user structure, which is UPAGES long and contains the
50 * kernel stack.
51 *
52 * Immediately after the user structure is the page table map, and then
53 * kernel address space.
54 */
55 #define USRTEXT PAGE_SIZE
56 #define USRSTACK VM_MAXUSER_ADDRESS
57
58 /*
59 * Virtual memory related constants, all in bytes
60 */
61 #define MAXTSIZ (64*1024*1024) /* max text size */
62 #ifndef DFLDSIZ
63 #define DFLDSIZ (64*1024*1024) /* initial data size limit */
64 #endif
65 #ifndef MAXDSIZ
66 #define MAXDSIZ (1024*1024*1024) /* max data size */
67 #endif
68 #ifndef DFLSSIZ
69 #define DFLSSIZ (4*1024*1024) /* initial stack size limit */
70 #endif
71 #ifndef MAXSSIZ
72 #define MAXSSIZ (32*1024*1024) /* max stack size */
73 #endif
74
75 #define STACKGAP_RANDOM 256*1024
76
77 /* I386 has a line where all code is executable: 0 - I386_MAX_EXE_ADDR */
78 #define I386_MAX_EXE_ADDR 0x20000000 /* exec line */
79
80 /*
81 * Size of shared memory map
82 */
83 #ifndef SHMMAXPGS
84 #define SHMMAXPGS 8192
85 #endif
86
87 /*
88 * Size of User Raw I/O map
89 */
90 #define USRIOSIZE 300
91
92 /*
93 * Specific addresses being unmapped and used as fillers for free memory.
94 */
95 #define DEADBEEF0 0xefffeecc /* malloc's filler */
96 #define DEADBEEF1 0xefffaabb /* pool's filler */
97
98 /* user/kernel map constants */
99 #define VM_MIN_ADDRESS ((vaddr_t)0)
100 #define VM_MAXUSER_ADDRESS ((vaddr_t)((PDSLOT_PTE<<PDSHIFT) - USPACE))
101 #define VM_MAX_ADDRESS ((vaddr_t)((PDSLOT_PTE<<PDSHIFT) + \
102 (PDSLOT_PTE<<PGSHIFT)))
103 #define VM_MIN_KERNEL_ADDRESS ((vaddr_t)KERNBASE)
104 #define VM_MAX_KERNEL_ADDRESS ((vaddr_t)(PDSLOT_APTE<<PDSHIFT))
105
106 /* virtual sizes (bytes) for various kernel submaps */
107 #define VM_PHYS_SIZE (USRIOSIZE*PAGE_SIZE)
108
109 #define VM_PHYSSEG_MAX 16 /* actually we could have this many segments */
110 #define VM_PHYSSEG_STRAT VM_PSTRAT_BSEARCH
111 #define VM_PHYSSEG_NOADD /* can't add RAM after vm_mem_init */
112
113 #define VM_NFREELIST 2
114 #define VM_FREELIST_DEFAULT 0
115 #define VM_FREELIST_FIRST16 1
116
117 #define __HAVE_VM_PAGE_MD
118 struct pv_entry;
119 struct vm_page_md {
120 struct pv_entry *pv_list;
121 };
122
123 #define VM_MDPAGE_INIT(pg) do { \
124 (pg)->mdpage.pv_list = NULL; \
125 } while (0)
126
127 #endif /* _MACHINE_VM_PARAM_H_ */