xref: /xnu-11215.41.3/osfmk/vm/vm_protos_internal.h (revision 33de042d024d46de5ff4e89f2471de6608e37fa4)
1 /*
2  * Copyright (c) 2023 Apple Inc. All rights reserved.
3  *
4  * @APPLE_OSREFERENCE_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. The rights granted to you under the License
10  * may not be used to create, or enable the creation or redistribution of,
11  * unlawful or unlicensed copies of an Apple operating system, or to
12  * circumvent, violate, or enable the circumvention or violation of, any
13  * terms of an Apple operating system software license agreement.
14  *
15  * Please obtain a copy of the License at
16  * http://www.opensource.apple.com/apsl/ and read it before using this file.
17  *
18  * The Original Code and all software distributed under the License are
19  * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
20  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
21  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
22  * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
23  * Please see the License for the specific language governing rights and
24  * limitations under the License.
25  *
26  * @APPLE_OSREFERENCE_LICENSE_HEADER_END@
27  */
28 
29 #ifndef _VM_VM_PROTOS_INTERNAL_H_
30 #define _VM_VM_PROTOS_INTERNAL_H_
31 
32 #include <sys/cdefs.h>
33 #include <vm/vm_protos.h>
34 
35 __BEGIN_DECLS
36 
37 #ifdef XNU_KERNEL_PRIVATE
38 
39 extern kern_return_t
40 vnode_pager_get_object_vnode(
41 	memory_object_t mem_obj,
42 	uintptr_t * vnodeaddr,
43 	uint32_t * vid);
44 
45 #if CONFIG_CODE_DECRYPTION
46 extern memory_object_t apple_protect_pager_setup(
47 	vm_object_t             backing_object,
48 	vm_object_offset_t      backing_offset,
49 	vm_object_offset_t      crypto_backing_offset,
50 	struct pager_crypt_info *crypt_info,
51 	vm_object_offset_t      crypto_start,
52 	vm_object_offset_t      crypto_end,
53 	boolean_t               cache_pager);
54 #endif /* CONFIG_CODE_DECRYPTION */
55 
56 extern memory_object_t shared_region_pager_setup(
57 	vm_object_t             backing_object,
58 	vm_object_offset_t      backing_offset,
59 	struct vm_shared_region_slide_info *slide_info,
60 	uint64_t                jop_key);
61 
62 extern uint64_t apple_protect_pager_purge_all(void);
63 extern uint64_t shared_region_pager_purge_all(void);
64 extern uint64_t dyld_pager_purge_all(void);
65 
66 #if __has_feature(ptrauth_calls)
67 extern memory_object_t shared_region_pager_match(
68 	vm_object_t             backing_object,
69 	vm_object_offset_t      backing_offset,
70 	struct vm_shared_region_slide_info *slide_info,
71 	uint64_t                jop_key);
72 
73 extern void shared_region_pager_match_task_key(memory_object_t memobj, task_t task);
74 #endif /* __has_feature(ptrauth_calls) */
75 
76 extern void vnode_pager_was_dirtied(
77 	struct vnode *,
78 	vm_object_offset_t,
79 	vm_object_offset_t);
80 
81 extern uint32_t vnode_trim(struct vnode *, int64_t offset, unsigned long len);
82 
83 extern vm_object_offset_t vnode_pager_get_filesize(
84 	struct vnode *);
85 extern uint32_t vnode_pager_isinuse(
86 	struct vnode *);
87 extern boolean_t vnode_pager_isSSD(
88 	struct vnode *);
89 #if FBDP_DEBUG_OBJECT_NO_PAGER
90 extern bool vnode_pager_forced_unmount(
91 	struct vnode *);
92 #endif /* FBDP_DEBUG_OBJECT_NO_PAGER */
93 extern void vnode_pager_throttle(
94 	void);
95 extern uint32_t vnode_pager_return_throttle_io_limit(
96 	struct vnode *,
97 	uint32_t     *);
98 extern kern_return_t vnode_pager_get_name(
99 	struct vnode    *vp,
100 	char            *pathname,
101 	vm_size_t       pathname_len,
102 	char            *filename,
103 	vm_size_t       filename_len,
104 	boolean_t       *truncated_path_p);
105 struct timespec;
106 extern kern_return_t vnode_pager_get_mtime(
107 	struct vnode    *vp,
108 	struct timespec *mtime,
109 	struct timespec *cs_mtime);
110 extern kern_return_t vnode_pager_get_cs_blobs(
111 	struct vnode    *vp,
112 	void            **blobs);
113 
114 #if CONFIG_IOSCHED
115 void vnode_pager_issue_reprioritize_io(
116 	struct vnode    *devvp,
117 	uint64_t        blkno,
118 	uint32_t        len,
119 	int             priority);
120 #endif
121 
122 extern kern_return_t vnode_pager_get_object_size(
123 	memory_object_t,
124 	memory_object_offset_t *);
125 
126 extern void vnode_pager_dirtied(
127 	memory_object_t,
128 	vm_object_offset_t,
129 	vm_object_offset_t);
130 extern kern_return_t vnode_pager_get_isinuse(
131 	memory_object_t,
132 	uint32_t *);
133 extern kern_return_t vnode_pager_get_isSSD(
134 	memory_object_t,
135 	boolean_t *);
136 #if FBDP_DEBUG_OBJECT_NO_PAGER
137 extern kern_return_t vnode_pager_get_forced_unmount(
138 	memory_object_t,
139 	bool *);
140 #endif /* FBDP_DEBUG_OBJECT_NO_PAGER */
141 extern kern_return_t vnode_pager_get_throttle_io_limit(
142 	memory_object_t,
143 	uint32_t *);
144 extern kern_return_t vnode_pager_get_object_name(
145 	memory_object_t mem_obj,
146 	char            *pathname,
147 	vm_size_t       pathname_len,
148 	char            *filename,
149 	vm_size_t       filename_len,
150 	boolean_t       *truncated_path_p);
151 struct timespec;
152 extern kern_return_t vnode_pager_get_object_mtime(
153 	memory_object_t mem_obj,
154 	struct timespec *mtime,
155 	struct timespec *cs_mtime);
156 
157 #if CHECK_CS_VALIDATION_BITMAP
158 extern kern_return_t vnode_pager_cs_check_validation_bitmap(
159 	memory_object_t mem_obj,
160 	memory_object_offset_t  offset,
161 	int             optype);
162 #endif /* CHECK_CS_VALIDATION_BITMAP */
163 
164 extern kern_return_t vnode_pager_data_request(
165 	memory_object_t,
166 	memory_object_offset_t,
167 	memory_object_cluster_size_t,
168 	vm_prot_t,
169 	memory_object_fault_info_t);
170 extern kern_return_t vnode_pager_data_return(
171 	memory_object_t,
172 	memory_object_offset_t,
173 	memory_object_cluster_size_t,
174 	memory_object_offset_t *,
175 	int *,
176 	boolean_t,
177 	boolean_t,
178 	int);
179 extern kern_return_t vnode_pager_data_initialize(
180 	memory_object_t,
181 	memory_object_offset_t,
182 	memory_object_cluster_size_t);
183 extern void vnode_pager_reference(
184 	memory_object_t         mem_obj);
185 extern kern_return_t vnode_pager_map(
186 	memory_object_t         mem_obj,
187 	vm_prot_t               prot);
188 extern kern_return_t vnode_pager_last_unmap(
189 	memory_object_t         mem_obj);
190 
191 extern kern_return_t vnode_pager_terminate(
192 	memory_object_t);
193 extern struct vnode *vnode_pager_lookup_vnode(
194 	memory_object_t);
195 
196 extern bool memory_object_is_vnode_pager(memory_object_t mem_obj);
197 
198 struct vm_map_entry;
199 extern struct vm_object *find_vnode_object(struct vm_map_entry *entry);
200 
201 extern boolean_t is_device_pager_ops(const struct memory_object_pager_ops *pager_ops);
202 
203 extern void log_stack_execution_failure(addr64_t vaddr, vm_prot_t prot);
204 extern void log_unnest_badness(
205 	vm_map_t map,
206 	vm_map_offset_t start_unnest,
207 	vm_map_offset_t end_unnest,
208 	boolean_t is_nested_map,
209 	vm_map_offset_t lowest_unnestable_addr);
210 
211 extern vm_object_t vm_named_entry_to_vm_object(
212 	vm_named_entry_t        named_entry);
213 extern void vm_named_entry_associate_vm_object(
214 	vm_named_entry_t        named_entry,
215 	vm_object_t             object,
216 	vm_object_offset_t      offset,
217 	vm_object_size_t        size,
218 	vm_prot_t               prot);
219 
220 extern int macx_backing_store_compaction(int flags);
221 extern unsigned int mach_vm_ctl_page_free_wanted(void);
222 
223 extern kern_return_t compressor_memory_object_create(
224 	memory_object_size_t,
225 	memory_object_t *);
226 
227 u_int32_t vnode_trim_list(struct vnode *vp, struct trim_list *tl, boolean_t route_only);
228 
229 extern void vm_start_ecc_thread(void);
230 extern void vm_ecc_lock(void);
231 extern void vm_ecc_unlock(void);
232 
233 void vm_purgeable_nonvolatile_owner_update(task_t       owner,
234     int          delta);
235 void vm_purgeable_volatile_owner_update(task_t          owner,
236     int             delta);
237 
238 #endif /* XNU_KERNEL_PRIVATE */
239 
240 __END_DECLS
241 
242 #endif  /* _VM_VM_PROTOS_INTERNAL_H_ */
243