1#![expect(non_camel_case_types)]
8#![expect(non_upper_case_globals)]
9#![expect(non_snake_case)]
10#![no_std]
11use page_bindings::vm_page_t as vm_page;
12use vm_address_region_bindings::{VmAddressRegion, VmMapping};
13use vm_object_bindings::VmObject;
14use zx_types::{zx_paddr_t as paddr_t, zx_status_t, zx_vaddr_t, zx_vaddr_t as vaddr_t};
15pub type Thread = core::ffi::c_void;
16
17#[derive(PartialEq, Eq, Copy, Clone, Debug, Hash)]
18#[repr(C, align(8))]
19pub struct __BindgenOpaqueArray8<T>(pub T);
20impl<T: Copy + Default, const N: usize> Default for __BindgenOpaqueArray8<[T; N]> {
21 fn default() -> Self {
22 Self([<T as Default>::default(); N])
23 }
24}
25#[derive(PartialEq, Eq, Copy, Clone, Debug, Hash)]
26#[repr(C, align(16))]
27pub struct __BindgenOpaqueArray16<T>(pub T);
28impl<T: Copy + Default, const N: usize> Default for __BindgenOpaqueArray16<[T; N]> {
29 fn default() -> Self {
30 Self([<T as Default>::default(); N])
31 }
32}
33pub type uint = ::core::ffi::c_uint;
34pub type arch_mmu_flags_t = u8;
35pub const ARCH_MMU_FLAG_CACHED: arch_mmu_flags_t = 0;
36pub const ARCH_MMU_FLAG_UNCACHED: arch_mmu_flags_t = 1;
37pub const ARCH_MMU_FLAG_UNCACHED_DEVICE: arch_mmu_flags_t = 2;
38pub const ARCH_MMU_FLAG_WRITE_COMBINING: arch_mmu_flags_t = 3;
39pub const ARCH_MMU_FLAG_CACHE_MASK: arch_mmu_flags_t = 3;
40pub const ARCH_MMU_FLAG_PERM_USER: arch_mmu_flags_t = 4;
41pub const ARCH_MMU_FLAG_PERM_READ: arch_mmu_flags_t = 8;
42pub const ARCH_MMU_FLAG_PERM_WRITE: arch_mmu_flags_t = 16;
43pub const ARCH_MMU_FLAG_PERM_EXECUTE: arch_mmu_flags_t = 32;
44pub const ARCH_MMU_FLAG_PERM_RWX_MASK: arch_mmu_flags_t = 56;
45pub const ARCH_MMU_FLAG_NS: arch_mmu_flags_t = 64;
46pub const ARCH_MMU_FLAG_INVALID: arch_mmu_flags_t = 128;
47pub const ARCH_ASPACE_FLAG_KERNEL: arch_mmu_flags_t = 1;
48pub const ARCH_ASPACE_FLAG_GUEST: arch_mmu_flags_t = 2;
49pub type ArchVmAspaceInterface_page_alloc_fn_t = ::core::option::Option<
50 unsafe extern "C" fn(alloc_flags: uint, p: *mut *mut vm_page, pa: *mut paddr_t) -> zx_status_t,
51>;
52impl ArchVmAspaceInterface_ExistingEntryAction {
53 pub const Skip: ArchVmAspaceInterface_ExistingEntryAction =
54 ArchVmAspaceInterface_ExistingEntryAction(0);
55 pub const Error: ArchVmAspaceInterface_ExistingEntryAction =
56 ArchVmAspaceInterface_ExistingEntryAction(1);
57 pub const Upgrade: ArchVmAspaceInterface_ExistingEntryAction =
58 ArchVmAspaceInterface_ExistingEntryAction(2);
59}
60#[repr(transparent)]
61#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
62pub struct ArchVmAspaceInterface_ExistingEntryAction(pub u8);
63pub const ArchVmAspaceInterface_ArchUnmapOptions_None: ArchVmAspaceInterface_ArchUnmapOptions = 0;
64pub const ArchVmAspaceInterface_ArchUnmapOptions_Enlarge: ArchVmAspaceInterface_ArchUnmapOptions =
65 1;
66pub const ArchVmAspaceInterface_ArchUnmapOptions_Harvest: ArchVmAspaceInterface_ArchUnmapOptions =
67 2;
68pub type ArchVmAspaceInterface_ArchUnmapOptions = u8;
69pub mod ArchVmAspaceInterface_NonTerminalAction {
70 #[allow(unused_imports)]
71 use super::*;
72 pub type Type = u8;
73 pub const FreeUnaccessed: Type = 0;
74 pub const Retain: Type = 1;
75}
76pub mod ArchVmAspaceInterface_TerminalAction {
77 #[allow(unused_imports)]
78 use super::*;
79 pub type Type = u8;
80 pub const UpdateAgeAndHarvest: Type = 0;
81 pub const UpdateAge: Type = 1;
82}
83pub type ArchVmAspace = __BindgenOpaqueArray8<[u8; 208usize]>;
84#[repr(C)]
85#[repr(align(8))]
86#[derive(Debug, Copy, Clone)]
87pub struct vm_FractionalBytes {
88 pub _bindgen_opaque_blob: __BindgenOpaqueArray8<[u8; 16usize]>,
89}
90pub type vm_FractionalBytes_Fraction = __BindgenOpaqueArray8<[u8; 8usize]>;
91unsafe extern "C" {
92 pub fn cpp_vm_aspace_free(aspace: *mut VmAspace);
93}
94unsafe extern "C" {
95 pub fn cpp_vm_aspace_lock(aspace: *const VmAspace) -> *mut ::core::ffi::c_void;
96}
97unsafe extern "C" {
98 pub fn cpp_vm_aspace_region_lock(aspace: *const VmAspace) -> *mut ::core::ffi::c_void;
99}
100unsafe extern "C" {
101 pub fn cpp_vm_aspace_root_vmar_locked(aspace: *mut VmAspace) -> *mut VmAddressRegion;
102}
103unsafe extern "C" {
104 pub fn cpp_vm_aspace_change_high_priority_count_locked(aspace: *mut VmAspace, delta: i64);
105}
106unsafe extern "C" {
107 pub fn cpp_vm_aspace_is_guest_physical(aspace: *const VmAspace) -> bool;
108}
109unsafe extern "C" {
110 pub fn cpp_vm_aspace_can_enlarge_arch_unmap(aspace: *const VmAspace) -> bool;
111}
112unsafe extern "C" {
113 pub fn cpp_vm_aspace_enlarge_arch_unmap(aspace: *const VmAspace) -> u8;
114}
115unsafe extern "C" {
116 pub fn cpp_vm_aspace_last_fault_locked(aspace: *const VmAspace) -> *const VmMapping;
117}
118unsafe extern "C" {
119 pub fn cpp_vm_aspace_clear_last_fault_locked(aspace: *mut VmAspace);
120}
121unsafe extern "C" {
122 pub fn cpp_vm_aspace_vdso_code_mapping_locked(aspace: *const VmAspace) -> *const VmMapping;
123}
124#[repr(C)]
125#[repr(align(16))]
126#[derive(Debug, Copy, Clone)]
127pub struct VmAspace {
128 pub _bindgen_opaque_blob: __BindgenOpaqueArray16<[u8; 592usize]>,
129}
130impl VmAspace_Type {
131 pub const User: VmAspace_Type = VmAspace_Type(0);
132 pub const Kernel: VmAspace_Type = VmAspace_Type(1);
133 pub const LowKernel: VmAspace_Type = VmAspace_Type(2);
134 pub const GuestPhysical: VmAspace_Type = VmAspace_Type(3);
135}
136#[repr(transparent)]
137#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
138pub struct VmAspace_Type(pub u8);
139impl VmAspace_ShareOpt {
140 pub const None: VmAspace_ShareOpt = VmAspace_ShareOpt(0);
141 pub const Restricted: VmAspace_ShareOpt = VmAspace_ShareOpt(1);
142 pub const Shared: VmAspace_ShareOpt = VmAspace_ShareOpt(2);
143}
144#[repr(transparent)]
145#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
146pub struct VmAspace_ShareOpt(pub ::core::ffi::c_int);
147pub use self::ArchVmAspaceInterface_NonTerminalAction::Type as VmAspace_NonTerminalAction;
148pub use self::ArchVmAspaceInterface_TerminalAction::Type as VmAspace_TerminalAction;
149#[repr(C)]
150#[derive(Debug, Copy, Clone)]
151pub struct VmAspace_vm_usage_t {
152 pub mapped_bytes: usize,
153 pub private_bytes: usize,
154 pub shared_bytes: usize,
155 pub scaled_shared_bytes: vm_FractionalBytes,
156}
157#[repr(C)]
158#[derive(Debug, Copy, Clone)]
159pub struct VmAspace_AslrConfig {
160 pub enabled: bool,
161 pub entropy_bits: u8,
162 pub compact_entropy_bits: u8,
163 pub seed: [u8; 32usize],
164}
165pub use self::ArchVmAspaceInterface_ArchUnmapOptions as VmAspace_ArchUnmapOptions;
166#[repr(C)]
167#[derive(Debug, Copy, Clone)]
168pub struct VmAspace_AspaceListLock {
169 pub _base: __BindgenOpaqueArray8<[u8; 24usize]>,
170}
171pub const VmAspace_VMM_FLAG_VALLOC_SPECIFIC: uint = 1;
172pub const VmAspace_VMM_FLAG_COMMIT: uint = 2;
173unsafe extern "C" {
174 pub fn cpp_vm_aspace_get_ref_counted(aspace: *mut VmAspace) -> *mut u32;
175}
176unsafe extern "C" {
177 pub fn cpp_vm_aspace_create(
178 type_: VmAspace_Type,
179 name: *const ::core::ffi::c_char,
180 ) -> *mut VmAspace;
181}
182unsafe extern "C" {
183 pub fn cpp_vm_aspace_create_with_opts(
184 base: vaddr_t,
185 size: usize,
186 type_: VmAspace_Type,
187 name: *const ::core::ffi::c_char,
188 share_opt: VmAspace_ShareOpt,
189 ) -> *mut VmAspace;
190}
191unsafe extern "C" {
192 pub fn cpp_vm_aspace_create_unified(
193 shared: *mut VmAspace,
194 restricted: *mut VmAspace,
195 name: *const ::core::ffi::c_char,
196 ) -> *mut VmAspace;
197}
198unsafe extern "C" {
199 pub fn cpp_vm_aspace_kernel_aspace() -> *mut VmAspace;
200}
201unsafe extern "C" {
202 pub fn cpp_vm_aspace_root_vmar(aspace: *mut VmAspace) -> *mut VmAddressRegion;
203}
204unsafe extern "C" {
205 pub fn cpp_vm_aspace_base(aspace: *mut VmAspace) -> vaddr_t;
206}
207unsafe extern "C" {
208 pub fn cpp_vm_aspace_size(aspace: *mut VmAspace) -> usize;
209}
210unsafe extern "C" {
211 pub fn cpp_vm_aspace_name(aspace: *mut VmAspace) -> *const ::core::ffi::c_char;
212}
213unsafe extern "C" {
214 pub fn cpp_vm_aspace_is_user(aspace: *mut VmAspace) -> bool;
215}
216unsafe extern "C" {
217 pub fn cpp_vm_aspace_is_aslr_enabled(aspace: *mut VmAspace) -> bool;
218}
219unsafe extern "C" {
220 pub fn cpp_vm_aspace_is_destroyed(aspace: *mut VmAspace) -> bool;
221}
222unsafe extern "C" {
223 pub fn cpp_vm_aspace_destroy(aspace: *mut VmAspace) -> zx_status_t;
224}
225unsafe extern "C" {
226 pub fn cpp_vm_aspace_rename(aspace: *mut VmAspace, name: *const ::core::ffi::c_char);
227}
228unsafe extern "C" {
229 pub fn cpp_vm_aspace_dump(aspace: *mut VmAspace, verbose: bool);
230}
231unsafe extern "C" {
232 pub fn cpp_vm_aspace_attach_to_thread(aspace: *mut VmAspace, thread: *mut Thread);
233}
234unsafe extern "C" {
235 pub fn cpp_vm_aspace_vdso_base_address(aspace: *mut VmAspace) -> usize;
236}
237unsafe extern "C" {
238 pub fn cpp_vm_aspace_vdso_code_address(aspace: *mut VmAspace) -> usize;
239}
240unsafe extern "C" {
241 pub fn cpp_vm_aspace_is_high_memory_priority(aspace: *mut VmAspace) -> bool;
242}
243unsafe extern "C" {
244 pub fn cpp_vm_aspace_accessed_fault(aspace: *mut VmAspace, va: vaddr_t) -> zx_status_t;
245}
246unsafe extern "C" {
247 pub fn cpp_vm_aspace_page_fault(aspace: *mut VmAspace, va: vaddr_t, flags: uint)
248 -> zx_status_t;
249}
250unsafe extern "C" {
251 pub fn cpp_vm_aspace_soft_fault(aspace: *mut VmAspace, va: vaddr_t, flags: uint)
252 -> zx_status_t;
253}
254unsafe extern "C" {
255 pub fn cpp_vm_aspace_soft_fault_in_range(
256 aspace: *mut VmAspace,
257 va: vaddr_t,
258 flags: uint,
259 len: usize,
260 ) -> zx_status_t;
261}
262unsafe extern "C" {
263 pub fn cpp_vm_aspace_drop_user_page_tables(aspace: *mut VmAspace);
264}
265unsafe extern "C" {
266 pub fn cpp_vm_aspace_drop_all_user_page_tables();
267}
268unsafe extern "C" {
269 pub fn cpp_vm_aspace_dump_all_aspaces(verbose: bool);
270}
271unsafe extern "C" {
272 pub fn cpp_vm_aspace_harvest_all_user_accessed_bits(
273 non_terminal_action: ArchVmAspaceInterface_NonTerminalAction::Type,
274 terminal_action: ArchVmAspaceInterface_TerminalAction::Type,
275 );
276}
277unsafe extern "C" {
278 pub fn cpp_vm_aspace_alloc_physical(
279 aspace: *mut VmAspace,
280 name: *const ::core::ffi::c_char,
281 size: usize,
282 ptr: *mut *mut ::core::ffi::c_void,
283 align_pow2: u8,
284 paddr: paddr_t,
285 vmm_flags: uint,
286 arch_mmu_flags: arch_mmu_flags_t,
287 ) -> zx_status_t;
288}
289unsafe extern "C" {
290 pub fn cpp_vm_aspace_alloc_contiguous(
291 aspace: *mut VmAspace,
292 name: *const ::core::ffi::c_char,
293 size: usize,
294 ptr: *mut *mut ::core::ffi::c_void,
295 align_pow2: u8,
296 vmm_flags: uint,
297 arch_mmu_flags: arch_mmu_flags_t,
298 ) -> zx_status_t;
299}
300unsafe extern "C" {
301 pub fn cpp_vm_aspace_map_object_internal(
302 aspace: *mut VmAspace,
303 vmo: *mut VmObject,
304 name: *const ::core::ffi::c_char,
305 offset: u64,
306 size: usize,
307 ptr: *mut *mut ::core::ffi::c_void,
308 align_pow2: u8,
309 vmm_flags: u32,
310 arch_mmu_flags: arch_mmu_flags_t,
311 ) -> zx_status_t;
312}
313unsafe extern "C" {
314 pub fn cpp_vm_aspace_free_region(aspace: *mut VmAspace, va: vaddr_t) -> zx_status_t;
315}
316unsafe extern "C" {
317 pub fn cpp_vm_aspace_arch_aspace(aspace: *mut VmAspace) -> *mut ArchVmAspace;
318}
319unsafe extern "C" {
320 pub fn cpp_vm_aspace_find_mapping(aspace: *mut VmAspace, vaddr: zx_vaddr_t) -> *mut VmMapping;
321}