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}
106#[repr(C)]
107#[repr(align(16))]
108#[derive(Debug, Copy, Clone)]
109pub struct VmAspace {
110 pub _bindgen_opaque_blob: __BindgenOpaqueArray16<[u8; 592usize]>,
111}
112impl VmAspace_Type {
113 pub const User: VmAspace_Type = VmAspace_Type(0);
114 pub const Kernel: VmAspace_Type = VmAspace_Type(1);
115 pub const LowKernel: VmAspace_Type = VmAspace_Type(2);
116 pub const GuestPhysical: VmAspace_Type = VmAspace_Type(3);
117}
118#[repr(transparent)]
119#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
120pub struct VmAspace_Type(pub u8);
121impl VmAspace_ShareOpt {
122 pub const None: VmAspace_ShareOpt = VmAspace_ShareOpt(0);
123 pub const Restricted: VmAspace_ShareOpt = VmAspace_ShareOpt(1);
124 pub const Shared: VmAspace_ShareOpt = VmAspace_ShareOpt(2);
125}
126#[repr(transparent)]
127#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
128pub struct VmAspace_ShareOpt(pub ::core::ffi::c_int);
129pub use self::ArchVmAspaceInterface_NonTerminalAction::Type as VmAspace_NonTerminalAction;
130pub use self::ArchVmAspaceInterface_TerminalAction::Type as VmAspace_TerminalAction;
131#[repr(C)]
132#[derive(Debug, Copy, Clone)]
133pub struct VmAspace_vm_usage_t {
134 pub mapped_bytes: usize,
135 pub private_bytes: usize,
136 pub shared_bytes: usize,
137 pub scaled_shared_bytes: vm_FractionalBytes,
138}
139#[repr(C)]
140#[derive(Debug, Copy, Clone)]
141pub struct VmAspace_AslrConfig {
142 pub enabled: bool,
143 pub entropy_bits: u8,
144 pub compact_entropy_bits: u8,
145 pub seed: [u8; 32usize],
146}
147pub use self::ArchVmAspaceInterface_ArchUnmapOptions as VmAspace_ArchUnmapOptions;
148#[repr(C)]
149#[derive(Debug, Copy, Clone)]
150pub struct VmAspace_AspaceListLock {
151 pub _base: __BindgenOpaqueArray8<[u8; 24usize]>,
152}
153pub const VmAspace_VMM_FLAG_VALLOC_SPECIFIC: uint = 1;
154pub const VmAspace_VMM_FLAG_COMMIT: uint = 2;
155unsafe extern "C" {
156 pub fn cpp_vm_aspace_get_ref_counted(aspace: *mut VmAspace) -> *mut u32;
157}
158unsafe extern "C" {
159 pub fn cpp_vm_aspace_create(
160 type_: VmAspace_Type,
161 name: *const ::core::ffi::c_char,
162 ) -> *mut VmAspace;
163}
164unsafe extern "C" {
165 pub fn cpp_vm_aspace_create_with_opts(
166 base: vaddr_t,
167 size: usize,
168 type_: VmAspace_Type,
169 name: *const ::core::ffi::c_char,
170 share_opt: VmAspace_ShareOpt,
171 ) -> *mut VmAspace;
172}
173unsafe extern "C" {
174 pub fn cpp_vm_aspace_create_unified(
175 shared: *mut VmAspace,
176 restricted: *mut VmAspace,
177 name: *const ::core::ffi::c_char,
178 ) -> *mut VmAspace;
179}
180unsafe extern "C" {
181 pub fn cpp_vm_aspace_kernel_aspace() -> *mut VmAspace;
182}
183unsafe extern "C" {
184 pub fn cpp_vm_aspace_root_vmar(aspace: *mut VmAspace) -> *mut VmAddressRegion;
185}
186unsafe extern "C" {
187 pub fn cpp_vm_aspace_base(aspace: *mut VmAspace) -> vaddr_t;
188}
189unsafe extern "C" {
190 pub fn cpp_vm_aspace_size(aspace: *mut VmAspace) -> usize;
191}
192unsafe extern "C" {
193 pub fn cpp_vm_aspace_name(aspace: *mut VmAspace) -> *const ::core::ffi::c_char;
194}
195unsafe extern "C" {
196 pub fn cpp_vm_aspace_is_user(aspace: *mut VmAspace) -> bool;
197}
198unsafe extern "C" {
199 pub fn cpp_vm_aspace_is_aslr_enabled(aspace: *mut VmAspace) -> bool;
200}
201unsafe extern "C" {
202 pub fn cpp_vm_aspace_is_destroyed(aspace: *mut VmAspace) -> bool;
203}
204unsafe extern "C" {
205 pub fn cpp_vm_aspace_destroy(aspace: *mut VmAspace) -> zx_status_t;
206}
207unsafe extern "C" {
208 pub fn cpp_vm_aspace_rename(aspace: *mut VmAspace, name: *const ::core::ffi::c_char);
209}
210unsafe extern "C" {
211 pub fn cpp_vm_aspace_dump(aspace: *mut VmAspace, verbose: bool);
212}
213unsafe extern "C" {
214 pub fn cpp_vm_aspace_attach_to_thread(aspace: *mut VmAspace, thread: *mut Thread);
215}
216unsafe extern "C" {
217 pub fn cpp_vm_aspace_vdso_base_address(aspace: *mut VmAspace) -> usize;
218}
219unsafe extern "C" {
220 pub fn cpp_vm_aspace_vdso_code_address(aspace: *mut VmAspace) -> usize;
221}
222unsafe extern "C" {
223 pub fn cpp_vm_aspace_is_high_memory_priority(aspace: *mut VmAspace) -> bool;
224}
225unsafe extern "C" {
226 pub fn cpp_vm_aspace_accessed_fault(aspace: *mut VmAspace, va: vaddr_t) -> zx_status_t;
227}
228unsafe extern "C" {
229 pub fn cpp_vm_aspace_page_fault(aspace: *mut VmAspace, va: vaddr_t, flags: uint)
230 -> zx_status_t;
231}
232unsafe extern "C" {
233 pub fn cpp_vm_aspace_soft_fault(aspace: *mut VmAspace, va: vaddr_t, flags: uint)
234 -> zx_status_t;
235}
236unsafe extern "C" {
237 pub fn cpp_vm_aspace_soft_fault_in_range(
238 aspace: *mut VmAspace,
239 va: vaddr_t,
240 flags: uint,
241 len: usize,
242 ) -> zx_status_t;
243}
244unsafe extern "C" {
245 pub fn cpp_vm_aspace_drop_user_page_tables(aspace: *mut VmAspace);
246}
247unsafe extern "C" {
248 pub fn cpp_vm_aspace_drop_all_user_page_tables();
249}
250unsafe extern "C" {
251 pub fn cpp_vm_aspace_dump_all_aspaces(verbose: bool);
252}
253unsafe extern "C" {
254 pub fn cpp_vm_aspace_harvest_all_user_accessed_bits(
255 non_terminal_action: ArchVmAspaceInterface_NonTerminalAction::Type,
256 terminal_action: ArchVmAspaceInterface_TerminalAction::Type,
257 );
258}
259unsafe extern "C" {
260 pub fn cpp_vm_aspace_alloc_physical(
261 aspace: *mut VmAspace,
262 name: *const ::core::ffi::c_char,
263 size: usize,
264 ptr: *mut *mut ::core::ffi::c_void,
265 align_pow2: u8,
266 paddr: paddr_t,
267 vmm_flags: uint,
268 arch_mmu_flags: arch_mmu_flags_t,
269 ) -> zx_status_t;
270}
271unsafe extern "C" {
272 pub fn cpp_vm_aspace_alloc_contiguous(
273 aspace: *mut VmAspace,
274 name: *const ::core::ffi::c_char,
275 size: usize,
276 ptr: *mut *mut ::core::ffi::c_void,
277 align_pow2: u8,
278 vmm_flags: uint,
279 arch_mmu_flags: arch_mmu_flags_t,
280 ) -> zx_status_t;
281}
282unsafe extern "C" {
283 pub fn cpp_vm_aspace_map_object_internal(
284 aspace: *mut VmAspace,
285 vmo: *mut VmObject,
286 name: *const ::core::ffi::c_char,
287 offset: u64,
288 size: usize,
289 ptr: *mut *mut ::core::ffi::c_void,
290 align_pow2: u8,
291 vmm_flags: u32,
292 arch_mmu_flags: arch_mmu_flags_t,
293 ) -> zx_status_t;
294}
295unsafe extern "C" {
296 pub fn cpp_vm_aspace_free_region(aspace: *mut VmAspace, va: vaddr_t) -> zx_status_t;
297}
298unsafe extern "C" {
299 pub fn cpp_vm_aspace_arch_aspace(aspace: *mut VmAspace) -> *mut ArchVmAspace;
300}
301unsafe extern "C" {
302 pub fn cpp_vm_aspace_find_mapping(aspace: *mut VmAspace, vaddr: zx_vaddr_t) -> *mut VmMapping;
303}