xref: /openbsd/sys/uvm/uvm_map.h (revision 133306f0)
1 /*	$OpenBSD: uvm_map.h,v 1.5 2001/01/29 02:07:46 niklas Exp $	*/
2 /*	$NetBSD: uvm_map.h,v 1.14 1999/05/26 19:16:36 thorpej Exp $	*/
3 
4 /*
5  * Copyright (c) 1997 Charles D. Cranor and Washington University.
6  * Copyright (c) 1991, 1993, The Regents of the University of California.
7  *
8  * All rights reserved.
9  *
10  * This code is derived from software contributed to Berkeley by
11  * The Mach Operating System project at Carnegie-Mellon University.
12  *
13  * Redistribution and use in source and binary forms, with or without
14  * modification, are permitted provided that the following conditions
15  * are met:
16  * 1. Redistributions of source code must retain the above copyright
17  *    notice, this list of conditions and the following disclaimer.
18  * 2. Redistributions in binary form must reproduce the above copyright
19  *    notice, this list of conditions and the following disclaimer in the
20  *    documentation and/or other materials provided with the distribution.
21  * 3. All advertising materials mentioning features or use of this software
22  *    must display the following acknowledgement:
23  *	This product includes software developed by Charles D. Cranor,
24  *      Washington University, the University of California, Berkeley and
25  *      its contributors.
26  * 4. Neither the name of the University nor the names of its contributors
27  *    may be used to endorse or promote products derived from this software
28  *    without specific prior written permission.
29  *
30  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
31  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
32  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
33  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
34  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
35  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
36  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
37  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
38  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
39  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
40  * SUCH DAMAGE.
41  *
42  *	@(#)vm_map.h    8.3 (Berkeley) 3/15/94
43  * from: Id: uvm_map.h,v 1.1.2.3 1998/02/07 01:16:55 chs Exp
44  *
45  *
46  * Copyright (c) 1987, 1990 Carnegie-Mellon University.
47  * All rights reserved.
48  *
49  * Permission to use, copy, modify and distribute this software and
50  * its documentation is hereby granted, provided that both the copyright
51  * notice and this permission notice appear in all copies of the
52  * software, derivative works or modified versions, and any portions
53  * thereof, and that both notices appear in supporting documentation.
54  *
55  * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
56  * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND
57  * FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
58  *
59  * Carnegie Mellon requests users of this software to return to
60  *
61  *  Software Distribution Coordinator  or  Software.Distribution@CS.CMU.EDU
62  *  School of Computer Science
63  *  Carnegie Mellon University
64  *  Pittsburgh PA 15213-3890
65  *
66  * any improvements or extensions that they make and grant Carnegie the
67  * rights to redistribute these changes.
68  */
69 
70 #ifndef _UVM_UVM_MAP_H_
71 #define _UVM_UVM_MAP_H_
72 
73 /*
74  * uvm_map.h
75  */
76 
77 /*
78  * macros
79  */
80 
81 /*
82  * UVM_MAP_CLIP_START: ensure that the entry begins at or after
83  * the starting address, if it doesn't we split the entry.
84  *
85  * => map must be locked by caller
86  */
87 
88 #define UVM_MAP_CLIP_START(MAP,ENTRY,VA) { \
89 	if ((VA) > (ENTRY)->start) uvm_map_clip_start(MAP,ENTRY,VA); }
90 
91 /*
92  * UVM_MAP_CLIP_END: ensure that the entry ends at or before
93  *      the ending address, if it does't we split the entry.
94  *
95  * => map must be locked by caller
96  */
97 
98 #define UVM_MAP_CLIP_END(MAP,ENTRY,VA) { \
99 	if ((VA) < (ENTRY)->end) uvm_map_clip_end(MAP,ENTRY,VA); }
100 
101 /*
102  * extract flags
103  */
104 #define UVM_EXTRACT_REMOVE	0x1	/* remove mapping from old map */
105 #define UVM_EXTRACT_CONTIG	0x2	/* try to keep it contig */
106 #define UVM_EXTRACT_QREF	0x4	/* use quick refs */
107 #define UVM_EXTRACT_FIXPROT	0x8	/* set prot to maxprot as we go */
108 
109 
110 /*
111  * handle inline options
112  */
113 
114 #ifdef UVM_MAP_INLINE
115 #define MAP_INLINE static __inline
116 #else
117 #define MAP_INLINE /* nothing */
118 #endif /* UVM_MAP_INLINE */
119 
120 /*
121  * globals:
122  */
123 
124 #ifdef PMAP_GROWKERNEL
125 extern vaddr_t	uvm_maxkaddr;
126 #endif
127 
128 /*
129  * protos: the following prototypes define the interface to vm_map
130  */
131 
132 MAP_INLINE
133 void		uvm_map_deallocate __P((vm_map_t));
134 
135 int		uvm_map_clean __P((vm_map_t, vaddr_t, vaddr_t, int));
136 void		uvm_map_clip_start __P((vm_map_t,
137 				vm_map_entry_t, vaddr_t));
138 void		uvm_map_clip_end __P((vm_map_t, vm_map_entry_t,
139 				vaddr_t));
140 MAP_INLINE
141 vm_map_t	uvm_map_create __P((pmap_t, vaddr_t,
142 			vaddr_t, int));
143 int		uvm_map_extract __P((vm_map_t, vaddr_t, vsize_t,
144 			vm_map_t, vaddr_t *, int));
145 vm_map_entry_t	uvm_map_findspace __P((vm_map_t, vaddr_t, vsize_t,
146 			vaddr_t *, struct uvm_object *, vaddr_t,
147 			boolean_t));
148 int		uvm_map_inherit __P((vm_map_t, vaddr_t, vaddr_t,
149 			vm_inherit_t));
150 int		uvm_map_advice __P((vm_map_t, vaddr_t, vaddr_t, int));
151 void		uvm_map_init __P((void));
152 boolean_t	uvm_map_lookup_entry __P((vm_map_t, vaddr_t,
153 			vm_map_entry_t *));
154 MAP_INLINE
155 void		uvm_map_reference __P((vm_map_t));
156 int		uvm_map_replace __P((vm_map_t, vaddr_t, vaddr_t,
157 			vm_map_entry_t, int));
158 int		uvm_map_reserve __P((vm_map_t, vsize_t, vaddr_t,
159 			vaddr_t *));
160 void		uvm_map_setup __P((vm_map_t, vaddr_t,
161 			vaddr_t, int));
162 int		uvm_map_submap __P((vm_map_t, vaddr_t,
163 			vaddr_t, vm_map_t));
164 MAP_INLINE
165 int		uvm_unmap __P((vm_map_t, vaddr_t, vaddr_t));
166 void		uvm_unmap_detach __P((vm_map_entry_t,int));
167 int		uvm_unmap_remove __P((vm_map_t, vaddr_t, vaddr_t,
168 				      vm_map_entry_t *));
169 
170 struct vmspace *uvmspace_fork __P((struct vmspace *));
171 
172 #endif /* _UVM_UVM_MAP_H_ */
173