root / lab4 / .minix-src / include / uvm / uvm_param.h @ 14
History | View | Annotate | Download (7.63 KB)
1 | 13 | up20180614 | /* $NetBSD: uvm_param.h,v 1.35 2015/09/26 20:28:38 christos Exp $ */
|
---|---|---|---|
2 | |||
3 | /*
|
||
4 | * Copyright (c) 1991, 1993
|
||
5 | * The Regents of the University of California. All rights reserved.
|
||
6 | *
|
||
7 | * This code is derived from software contributed to Berkeley by
|
||
8 | * The Mach Operating System project at Carnegie-Mellon University.
|
||
9 | *
|
||
10 | * Redistribution and use in source and binary forms, with or without
|
||
11 | * modification, are permitted provided that the following conditions
|
||
12 | * are met:
|
||
13 | * 1. Redistributions of source code must retain the above copyright
|
||
14 | * notice, this list of conditions and the following disclaimer.
|
||
15 | * 2. Redistributions in binary form must reproduce the above copyright
|
||
16 | * notice, this list of conditions and the following disclaimer in the
|
||
17 | * documentation and/or other materials provided with the distribution.
|
||
18 | * 3. Neither the name of the University nor the names of its contributors
|
||
19 | * may be used to endorse or promote products derived from this software
|
||
20 | * without specific prior written permission.
|
||
21 | *
|
||
22 | * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
|
||
23 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||
24 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||
25 | * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
|
||
26 | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||
27 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||
28 | * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||
29 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||
30 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||
31 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||
32 | * SUCH DAMAGE.
|
||
33 | *
|
||
34 | * @(#)vm_param.h 8.2 (Berkeley) 1/9/95
|
||
35 | *
|
||
36 | *
|
||
37 | * Copyright (c) 1987, 1990 Carnegie-Mellon University.
|
||
38 | * All rights reserved.
|
||
39 | *
|
||
40 | * Authors: Avadis Tevanian, Jr., Michael Wayne Young
|
||
41 | *
|
||
42 | * Permission to use, copy, modify and distribute this software and
|
||
43 | * its documentation is hereby granted, provided that both the copyright
|
||
44 | * notice and this permission notice appear in all copies of the
|
||
45 | * software, derivative works or modified versions, and any portions
|
||
46 | * thereof, and that both notices appear in supporting documentation.
|
||
47 | *
|
||
48 | * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
|
||
49 | * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND
|
||
50 | * FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
|
||
51 | *
|
||
52 | * Carnegie Mellon requests users of this software to return to
|
||
53 | *
|
||
54 | * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
|
||
55 | * School of Computer Science
|
||
56 | * Carnegie Mellon University
|
||
57 | * Pittsburgh PA 15213-3890
|
||
58 | *
|
||
59 | * any improvements or extensions that they make and grant Carnegie the
|
||
60 | * rights to redistribute these changes.
|
||
61 | */
|
||
62 | |||
63 | /*
|
||
64 | * Machine independent virtual memory parameters.
|
||
65 | */
|
||
66 | |||
67 | #ifndef _VM_PARAM_
|
||
68 | #define _VM_PARAM_
|
||
69 | |||
70 | #ifdef _KERNEL_OPT
|
||
71 | #include "opt_modular.h" |
||
72 | #include "opt_uvm.h" |
||
73 | #endif
|
||
74 | #ifdef _KERNEL
|
||
75 | #include <sys/types.h> |
||
76 | #include <machine/vmparam.h> |
||
77 | #include <sys/resourcevar.h> |
||
78 | #endif
|
||
79 | |||
80 | #if defined(_KERNEL)
|
||
81 | |||
82 | #if defined(PAGE_SIZE)
|
||
83 | |||
84 | /*
|
||
85 | * If PAGE_SIZE is defined at this stage, it must be a constant.
|
||
86 | */
|
||
87 | |||
88 | #if PAGE_SIZE == 0 |
||
89 | #error Invalid PAGE_SIZE definition
|
||
90 | #endif
|
||
91 | |||
92 | /*
|
||
93 | * If the platform does not need to support a variable PAGE_SIZE,
|
||
94 | * then provide default values for MIN_PAGE_SIZE and MAX_PAGE_SIZE.
|
||
95 | */
|
||
96 | |||
97 | #if !defined(MIN_PAGE_SIZE)
|
||
98 | #define MIN_PAGE_SIZE PAGE_SIZE
|
||
99 | #endif /* ! MIN_PAGE_SIZE */ |
||
100 | |||
101 | #if !defined(MAX_PAGE_SIZE)
|
||
102 | #define MAX_PAGE_SIZE PAGE_SIZE
|
||
103 | #endif /* ! MAX_PAGE_SIZE */ |
||
104 | |||
105 | #else /* ! PAGE_SIZE */ |
||
106 | |||
107 | /*
|
||
108 | * PAGE_SIZE is not a constant; MIN_PAGE_SIZE and MAX_PAGE_SIZE must
|
||
109 | * be defined.
|
||
110 | */
|
||
111 | |||
112 | #if !defined(MIN_PAGE_SIZE)
|
||
113 | #error MIN_PAGE_SIZE not defined
|
||
114 | #endif
|
||
115 | |||
116 | #if !defined(MAX_PAGE_SIZE)
|
||
117 | #error MAX_PAGE_SIZE not defined
|
||
118 | #endif
|
||
119 | |||
120 | #endif /* PAGE_SIZE */ |
||
121 | |||
122 | /*
|
||
123 | * MIN_PAGE_SIZE and MAX_PAGE_SIZE must be constants.
|
||
124 | */
|
||
125 | |||
126 | #if MIN_PAGE_SIZE == 0 |
||
127 | #error Invalid MIN_PAGE_SIZE definition
|
||
128 | #endif
|
||
129 | |||
130 | #if MAX_PAGE_SIZE == 0 |
||
131 | #error Invalid MAX_PAGE_SIZE definition
|
||
132 | #endif
|
||
133 | |||
134 | /*
|
||
135 | * If MIN_PAGE_SIZE and MAX_PAGE_SIZE are not equal, then we must use
|
||
136 | * non-constant PAGE_SIZE, et al for LKMs.
|
||
137 | */
|
||
138 | #if (MIN_PAGE_SIZE != MAX_PAGE_SIZE)
|
||
139 | #define __uvmexp_pagesize
|
||
140 | #if defined(_LKM) || defined(_MODULE)
|
||
141 | #undef PAGE_SIZE
|
||
142 | #undef PAGE_MASK
|
||
143 | #undef PAGE_SHIFT
|
||
144 | #endif
|
||
145 | #endif
|
||
146 | |||
147 | /*
|
||
148 | * Now provide PAGE_SIZE, PAGE_MASK, and PAGE_SHIFT if we do not
|
||
149 | * have ones that are compile-time constants.
|
||
150 | */
|
||
151 | #if !defined(PAGE_SIZE)
|
||
152 | extern const int *const uvmexp_pagesize; |
||
153 | extern const int *const uvmexp_pagemask; |
||
154 | extern const int *const uvmexp_pageshift; |
||
155 | #define PAGE_SIZE (*uvmexp_pagesize) /* size of page */ |
||
156 | #define PAGE_MASK (*uvmexp_pagemask) /* size of page - 1 */ |
||
157 | #define PAGE_SHIFT (*uvmexp_pageshift) /* bits to shift for pages */ |
||
158 | #endif /* PAGE_SIZE */ |
||
159 | |||
160 | #endif /* _KERNEL */ |
||
161 | |||
162 | /*
|
||
163 | * CTL_VM identifiers
|
||
164 | */
|
||
165 | #define VM_METER 1 /* struct vmmeter */ |
||
166 | #define VM_LOADAVG 2 /* struct loadavg */ |
||
167 | #define VM_UVMEXP 3 /* struct uvmexp */ |
||
168 | #define VM_NKMEMPAGES 4 /* kmem_map pages */ |
||
169 | #define VM_UVMEXP2 5 /* struct uvmexp_sysctl */ |
||
170 | #define VM_ANONMIN 6 |
||
171 | #define VM_EXECMIN 7 |
||
172 | #define VM_FILEMIN 8 |
||
173 | #define VM_MAXSLP 9 |
||
174 | #define VM_USPACE 10 |
||
175 | #define VM_ANONMAX 11 |
||
176 | #define VM_EXECMAX 12 |
||
177 | #define VM_FILEMAX 13 |
||
178 | #define VM_MINADDRESS 14 |
||
179 | #define VM_MAXADDRESS 15 |
||
180 | #define VM_PROC 16 /* process information */ |
||
181 | |||
182 | #define VM_MAXID 17 /* number of valid vm ids */ |
||
183 | |||
184 | #define VM_PROC_MAP 1 /* struct kinfo_vmentry */ |
||
185 | |||
186 | #define CTL_VM_NAMES { \
|
||
187 | { 0, 0 }, \ |
||
188 | { "vmmeter", CTLTYPE_STRUCT }, \
|
||
189 | { "loadavg", CTLTYPE_STRUCT }, \
|
||
190 | { "uvmexp", CTLTYPE_STRUCT }, \
|
||
191 | { "nkmempages", CTLTYPE_INT }, \
|
||
192 | { "uvmexp2", CTLTYPE_STRUCT }, \
|
||
193 | { "anonmin", CTLTYPE_INT }, \
|
||
194 | { "execmin", CTLTYPE_INT }, \
|
||
195 | { "filemin", CTLTYPE_INT }, \
|
||
196 | { "maxslp", CTLTYPE_INT }, \
|
||
197 | { "uspace", CTLTYPE_INT }, \
|
||
198 | { "anonmax", CTLTYPE_INT }, \
|
||
199 | { "execmax", CTLTYPE_INT }, \
|
||
200 | { "filemax", CTLTYPE_INT }, \
|
||
201 | { "minaddress", CTLTYPE_LONG }, \
|
||
202 | { "maxaddress", CTLTYPE_LONG }, \
|
||
203 | { "proc", CTLTYPE_STRUCT }, \
|
||
204 | } |
||
205 | |||
206 | #ifndef ASSEMBLER
|
||
207 | /*
|
||
208 | * Convert addresses to pages and vice versa.
|
||
209 | * No rounding is used.
|
||
210 | */
|
||
211 | #ifdef _KERNEL
|
||
212 | #define atop(x) (((paddr_t)(x)) >> PAGE_SHIFT)
|
||
213 | #define ptoa(x) (((paddr_t)(x)) << PAGE_SHIFT)
|
||
214 | |||
215 | /*
|
||
216 | * Round off or truncate to the nearest page. These will work
|
||
217 | * for either addresses or counts (i.e., 1 byte rounds to 1 page).
|
||
218 | */
|
||
219 | #define round_page(x) (((x) + PAGE_MASK) & ~PAGE_MASK)
|
||
220 | #define trunc_page(x) ((x) & ~PAGE_MASK)
|
||
221 | |||
222 | #ifndef VM_DEFAULT_ADDRESS_BOTTOMUP
|
||
223 | #define VM_DEFAULT_ADDRESS_BOTTOMUP(da, sz) \
|
||
224 | round_page((vaddr_t)(da) + (vsize_t)maxdmap) |
||
225 | #endif
|
||
226 | |||
227 | #ifndef VM_DEFAULT_ADDRESS_TOPDOWN
|
||
228 | #define VM_DEFAULT_ADDRESS_TOPDOWN(da, sz) \
|
||
229 | trunc_page(VM_MAXUSER_ADDRESS - MAXSSIZ - (sz)) |
||
230 | #endif
|
||
231 | |||
232 | extern int ubc_nwins; /* number of UBC mapping windows */ |
||
233 | extern int ubc_winshift; /* shift for a UBC mapping window */ |
||
234 | extern u_int uvm_emap_size; /* size of emap */ |
||
235 | |||
236 | #else
|
||
237 | /* out-of-kernel versions of round_page and trunc_page */
|
||
238 | #if !defined(__minix)
|
||
239 | #define round_page(x) \
|
||
240 | ((((vaddr_t)(x) + (vm_page_size - 1)) / vm_page_size) * \
|
||
241 | vm_page_size) |
||
242 | #define trunc_page(x) \
|
||
243 | ((((vaddr_t)(x)) / vm_page_size) * vm_page_size) |
||
244 | #else
|
||
245 | /* LSC: Minix always uses the same definition of those. */
|
||
246 | #define round_page(x) (((x) + PAGE_MASK) & ~PAGE_MASK)
|
||
247 | #define trunc_page(x) ((x) & ~PAGE_MASK)
|
||
248 | #endif /* !defined(__minix) */ |
||
249 | |||
250 | #endif /* _KERNEL */ |
||
251 | |||
252 | /*
|
||
253 | * typedefs, necessary for standard UVM headers.
|
||
254 | */
|
||
255 | |||
256 | typedef unsigned int uvm_flag_t; |
||
257 | |||
258 | typedef int vm_inherit_t; /* XXX: inheritance codes */ |
||
259 | typedef off_t voff_t; /* XXX: offset within a uvm_object */ |
||
260 | typedef voff_t pgoff_t; /* XXX: number of pages within a uvm object */ |
||
261 | |||
262 | #endif /* ASSEMBLER */ |
||
263 | #endif /* _VM_PARAM_ */ |