2 * Copyright (c) 2004 Apple Computer, Inc. All rights reserved.
4 * @APPLE_LICENSE_HEADER_START@
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
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.
21 * @APPLE_LICENSE_HEADER_END@
24 #ifdef XNU_KERNEL_PRIVATE
26 #ifndef _VM_VM_PROTOS_H_
27 #define _VM_VM_PROTOS_H_
29 #include <mach/mach_types.h>
30 #include <kern/kern_types.h>
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.
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
46 extern kern_return_t
device_data_action(
48 ipc_port_t device_pager
,
50 vm_object_offset_t offset
,
53 extern kern_return_t
device_close(
59 extern int start_def_pager(
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(
69 #endif /* _KERN_IPC_TT_H_ */
70 #ifndef _IPC_IPC_PORT_H_
71 extern mach_port_name_t
ipc_port_copyout_send(
74 extern task_t
port_name_to_task(
75 mach_port_name_t name
);
76 #endif /* _IPC_IPC_PORT_H_ */
78 extern ipc_space_t
get_task_ipcspace(
81 /* Some loose-ends VM stuff */
83 extern vm_map_t kalloc_map
;
84 extern vm_size_t msg_ool_size_small
;
85 extern vm_map_t zone_map
;
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
);
94 extern boolean_t
coredumpok(vm_map_t map
, vm_offset_t va
);
97 * VM routines that used to be published to
98 * user space, and are now restricted to the kernel.
100 * They should eventually go away entirely -
101 * to be replaced with standard vm_map() and
102 * vm_deallocate() calls.
105 extern kern_return_t vm_upl_map
107 vm_map_t target_task
,
109 vm_address_t
*address
112 extern kern_return_t vm_upl_unmap
114 vm_map_t target_task
,
118 extern kern_return_t vm_region_object_create
120 vm_map_t target_task
,
122 ipc_port_t
*object_handle
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
);
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
134 extern vm_offset_t
get_vm_start(vm_map_t
);
135 extern vm_offset_t
get_vm_end(vm_map_t
);
139 * LP64todo - map in the commpage cleanly and remove these.
141 extern void vm_map_commpage64( vm_map_t
);
142 extern void vm_map_remove_commpage64( vm_map_t
);
149 extern int is_suser(void);
150 extern int bsd_read_page_cache_file(
155 struct vnode
*app_vp
,
157 vm_offset_t
*bufsize
);
158 extern int bsd_write_page_cache_file(
165 extern int prepare_profile_database(
167 extern void vnode_pager_shutdown(void);
168 extern void *upl_get_internal_page_list(
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(
184 #endif /* _VNODE_PAGER_ */
185 extern void vnode_pager_bootstrap(void);
187 vnode_pager_data_unlock(
188 memory_object_t mem_obj
,
189 memory_object_offset_t offset
,
191 vm_prot_t desired_access
);
192 extern kern_return_t
vnode_pager_init(
194 memory_object_control_t
,
196 extern kern_return_t
vnode_pager_get_object_size(
198 memory_object_offset_t
*);
199 extern kern_return_t
vnode_pager_data_request(
201 memory_object_offset_t
,
204 extern kern_return_t
vnode_pager_data_return(
206 memory_object_offset_t
,
208 memory_object_offset_t
*,
213 extern kern_return_t
vnode_pager_data_initialize(
215 memory_object_offset_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
,
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(
228 extern kern_return_t
vnode_pager_terminate(
230 extern void vnode_pager_vrele(
232 extern void vnode_pager_release_from_cache(
234 extern void ubc_unmap(
237 extern int vnode_pager_workaround
;
238 extern int device_pager_workaround
;
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
,
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
,
257 extern kern_return_t
dp_memory_object_data_initialize(memory_object_t
,
258 memory_object_offset_t
,
260 extern kern_return_t
dp_memory_object_data_unlock(memory_object_t
,
261 memory_object_offset_t
,
264 extern kern_return_t
dp_memory_object_synchronize(memory_object_t
,
265 memory_object_offset_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
,
275 #endif /* _memory_object_default_server_ */
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
,
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
,
287 extern kern_return_t
device_pager_data_return(memory_object_t
,
288 memory_object_offset_t
,
293 extern kern_return_t
device_pager_data_initialize(memory_object_t
,
294 memory_object_offset_t
,
296 extern kern_return_t
device_pager_data_unlock(memory_object_t
,
297 memory_object_offset_t
,
300 extern kern_return_t
device_pager_synchronize(memory_object_t
,
301 memory_object_offset_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
,
310 extern memory_object_t
device_pager_setup(
315 extern void device_pager_bootstrap(void);
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
);
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
);
329 #endif /* _VM_VM_PROTOS_H_ */
331 #endif /* XNU_KERNEL_PRIVATE */