]> git.saurik.com Git - apple/xnu.git/blob - osfmk/vm/vm_protos.h
b5405cda1354c02c5f54a9da2839e688465d9c5a
[apple/xnu.git] / osfmk / vm / vm_protos.h
1 /*
2 * Copyright (c) 2004 Apple Computer, Inc. All rights reserved.
3 *
4 * @APPLE_LICENSE_HEADER_START@
5 *
6 * This file contains Original Code and/or Modifications of Original Code
7 * as defined in and that are subject to the Apple Public Source License
8 * Version 2.0 (the 'License'). You may not use this file except in
9 * compliance with the License. Please obtain a copy of the License at
10 * http://www.opensource.apple.com/apsl/ and read it before using this
11 * file.
12 *
13 * The Original Code and all software distributed under the License are
14 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
15 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
16 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
18 * Please see the License for the specific language governing rights and
19 * limitations under the License.
20 *
21 * @APPLE_LICENSE_HEADER_END@
22 */
23
24 #ifdef XNU_KERNEL_PRIVATE
25
26 #ifndef _VM_VM_PROTOS_H_
27 #define _VM_VM_PROTOS_H_
28
29 #include <mach/mach_types.h>
30 #include <kern/kern_types.h>
31
32 /*
33 * This file contains various type definitions and routine prototypes
34 * that are needed to avoid compilation warnings for VM code (in osfmk,
35 * default_pager and bsd).
36 * Most of these should eventually go into more appropriate header files.
37 *
38 * Include it after all other header files since it doesn't include any
39 * type definitions and it works around some conflicts with other header
40 * files.
41 */
42
43 /*
44 * iokit
45 */
46 extern kern_return_t device_data_action(
47 int device_handle,
48 ipc_port_t device_pager,
49 vm_prot_t protection,
50 vm_object_offset_t offset,
51 vm_size_t size);
52
53 extern kern_return_t device_close(
54 int device_handle);
55
56 /*
57 * default_pager
58 */
59 extern int start_def_pager(
60 char *bs_device);
61
62 /*
63 * osfmk
64 */
65 #ifndef _KERN_IPC_TT_H_ /* XXX FBDP */
66 /* these should be exported cleanly from OSFMK since BSD needs them */
67 extern ipc_port_t convert_task_to_port(
68 task_t task);
69 #endif /* _KERN_IPC_TT_H_ */
70 #ifndef _IPC_IPC_PORT_H_
71 extern mach_port_name_t ipc_port_copyout_send(
72 ipc_port_t sright,
73 ipc_space_t space);
74 extern task_t port_name_to_task(
75 mach_port_name_t name);
76 #endif /* _IPC_IPC_PORT_H_ */
77
78 extern ipc_space_t get_task_ipcspace(
79 task_t t);
80
81 /* Some loose-ends VM stuff */
82
83 extern vm_map_t kalloc_map;
84 extern vm_size_t msg_ool_size_small;
85 extern vm_map_t zone_map;
86
87 extern void consider_machine_adjust(void);
88 extern pmap_t get_map_pmap(vm_map_t);
89 extern vm_map_offset_t get_map_min(vm_map_t);
90 extern vm_map_offset_t get_map_max(vm_map_t);
91 extern vm_map_size_t get_vmmap_size(vm_map_t);
92 extern int get_vmmap_entries(vm_map_t);
93
94 extern boolean_t coredumpok(vm_map_t map, vm_offset_t va);
95
96 /*
97 * VM routines that used to be published to
98 * user space, and are now restricted to the kernel.
99 *
100 * They should eventually go away entirely -
101 * to be replaced with standard vm_map() and
102 * vm_deallocate() calls.
103 */
104
105 extern kern_return_t vm_upl_map
106 (
107 vm_map_t target_task,
108 upl_t upl,
109 vm_address_t *address
110 );
111
112 extern kern_return_t vm_upl_unmap
113 (
114 vm_map_t target_task,
115 upl_t upl
116 );
117
118 extern kern_return_t vm_region_object_create
119 (
120 vm_map_t target_task,
121 vm_size_t size,
122 ipc_port_t *object_handle
123 );
124
125 extern mach_vm_offset_t mach_get_vm_start(vm_map_t);
126 extern mach_vm_offset_t mach_get_vm_end(vm_map_t);
127
128 /*
129 * Legacy routines to get the start and end for a vm_map_t. They
130 * return them in the vm_offset_t format. So, they should only be
131 * called on maps that are the same size as the kernel map for
132 * accurate results.
133 */
134 extern vm_offset_t get_vm_start(vm_map_t);
135 extern vm_offset_t get_vm_end(vm_map_t);
136
137 #ifdef __PPC__
138 /*
139 * LP64todo - map in the commpage cleanly and remove these.
140 */
141 extern void vm_map_commpage64( vm_map_t );
142 extern void vm_map_remove_commpage64( vm_map_t );
143 #endif /* __PPC__ */
144
145 /*
146 * bsd
147 */
148 struct vnode;
149 extern int is_suser(void);
150 extern int bsd_read_page_cache_file(
151 unsigned int user,
152 int *fid,
153 int *mod,
154 char *app_name,
155 struct vnode *app_vp,
156 vm_offset_t *buffer,
157 vm_offset_t *bufsize);
158 extern int bsd_write_page_cache_file(
159 unsigned int user,
160 char *file_name,
161 caddr_t buffer,
162 vm_size_t size,
163 int mod,
164 int fid);
165 extern int prepare_profile_database(
166 int user);
167 extern void vnode_pager_shutdown(void);
168 extern void *upl_get_internal_page_list(
169 upl_t upl);
170 #ifndef _VNODE_PAGER_
171 typedef int pager_return_t;
172 extern pager_return_t vnode_pagein(
173 struct vnode *, upl_t,
174 vm_offset_t, vm_object_offset_t,
175 vm_size_t, int, int *);
176 extern pager_return_t vnode_pageout(
177 struct vnode *, upl_t,
178 vm_offset_t, vm_object_offset_t,
179 vm_size_t, int, int *);
180 extern memory_object_t vnode_pager_setup(
181 struct vnode *, memory_object_t);
182 extern vm_object_offset_t vnode_pager_get_filesize(
183 struct vnode *);
184 #endif /* _VNODE_PAGER_ */
185 extern void vnode_pager_bootstrap(void);
186 extern kern_return_t
187 vnode_pager_data_unlock(
188 memory_object_t mem_obj,
189 memory_object_offset_t offset,
190 vm_size_t size,
191 vm_prot_t desired_access);
192 extern kern_return_t vnode_pager_init(
193 memory_object_t,
194 memory_object_control_t,
195 vm_size_t);
196 extern kern_return_t vnode_pager_get_object_size(
197 memory_object_t,
198 memory_object_offset_t *);
199 extern kern_return_t vnode_pager_data_request(
200 memory_object_t,
201 memory_object_offset_t,
202 vm_size_t,
203 vm_prot_t);
204 extern kern_return_t vnode_pager_data_return(
205 memory_object_t,
206 memory_object_offset_t,
207 vm_size_t,
208 memory_object_offset_t *,
209 int *,
210 boolean_t,
211 boolean_t,
212 int);
213 extern kern_return_t vnode_pager_data_initialize(
214 memory_object_t,
215 memory_object_offset_t,
216 vm_size_t);
217 extern void vnode_pager_reference(
218 memory_object_t mem_obj);
219 extern kern_return_t vnode_pager_synchronize(
220 memory_object_t mem_obj,
221 memory_object_offset_t offset,
222 vm_size_t length,
223 vm_sync_t sync_flags);
224 extern kern_return_t vnode_pager_unmap(
225 memory_object_t mem_obj);
226 extern void vnode_pager_deallocate(
227 memory_object_t);
228 extern kern_return_t vnode_pager_terminate(
229 memory_object_t);
230 extern void vnode_pager_vrele(
231 struct vnode *vp);
232 extern void vnode_pager_release_from_cache(
233 int *);
234 extern void ubc_unmap(
235 struct vnode *vp);
236
237 extern int vnode_pager_workaround;
238 extern int device_pager_workaround;
239
240 extern void dp_memory_object_reference(memory_object_t);
241 extern void dp_memory_object_deallocate(memory_object_t);
242 #ifndef _memory_object_server_
243 extern kern_return_t dp_memory_object_init(memory_object_t,
244 memory_object_control_t,
245 vm_size_t);
246 extern kern_return_t dp_memory_object_terminate(memory_object_t);
247 extern kern_return_t dp_memory_object_data_request(memory_object_t,
248 memory_object_offset_t, vm_size_t, vm_prot_t);
249 extern kern_return_t dp_memory_object_data_return(memory_object_t,
250 memory_object_offset_t,
251 vm_size_t,
252 vm_size_t *,
253 int *,
254 boolean_t,
255 boolean_t,
256 int);
257 extern kern_return_t dp_memory_object_data_initialize(memory_object_t,
258 memory_object_offset_t,
259 vm_size_t);
260 extern kern_return_t dp_memory_object_data_unlock(memory_object_t,
261 memory_object_offset_t,
262 vm_size_t,
263 vm_prot_t);
264 extern kern_return_t dp_memory_object_synchronize(memory_object_t,
265 memory_object_offset_t,
266 vm_size_t,
267 vm_sync_t);
268 extern kern_return_t dp_memory_object_unmap(memory_object_t);
269 #endif /* _memory_object_server_ */
270 #ifndef _memory_object_default_server_
271 extern kern_return_t default_pager_memory_object_create(
272 memory_object_default_t,
273 vm_size_t,
274 memory_object_t *);
275 #endif /* _memory_object_default_server_ */
276
277 extern void device_pager_reference(memory_object_t);
278 extern void device_pager_deallocate(memory_object_t);
279 extern kern_return_t device_pager_init(memory_object_t,
280 memory_object_control_t,
281 vm_size_t);
282 extern kern_return_t device_pager_terminate(memory_object_t);
283 extern kern_return_t device_pager_data_request(memory_object_t,
284 memory_object_offset_t,
285 vm_size_t,
286 vm_prot_t);
287 extern kern_return_t device_pager_data_return(memory_object_t,
288 memory_object_offset_t,
289 vm_size_t,
290 boolean_t,
291 boolean_t,
292 int);
293 extern kern_return_t device_pager_data_initialize(memory_object_t,
294 memory_object_offset_t,
295 vm_size_t);
296 extern kern_return_t device_pager_data_unlock(memory_object_t,
297 memory_object_offset_t,
298 vm_size_t,
299 vm_prot_t);
300 extern kern_return_t device_pager_synchronize(memory_object_t,
301 memory_object_offset_t,
302 vm_size_t,
303 vm_sync_t);
304 extern kern_return_t device_pager_unmap(memory_object_t);
305 extern kern_return_t device_pager_populate_object(
306 memory_object_t device,
307 memory_object_offset_t offset,
308 ppnum_t page_num,
309 vm_size_t size);
310 extern memory_object_t device_pager_setup(
311 memory_object_t,
312 int,
313 vm_size_t,
314 int);
315 extern void device_pager_bootstrap(void);
316
317 extern kern_return_t memory_object_create_named(
318 memory_object_t pager,
319 memory_object_offset_t size,
320 memory_object_control_t *control);
321
322
323 extern int macx_swapinfo(
324 memory_object_size_t *total_p,
325 memory_object_size_t *avail_p,
326 vm_size_t *pagesize_p,
327 boolean_t *encrypted_p);
328
329 #endif /* _VM_VM_PROTOS_H_ */
330
331 #endif /* XNU_KERNEL_PRIVATE */