Skip to main content

vm_aspace_bindings/
vm_aspace_bindings.rs

1// Copyright 2026 The Fuchsia Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5// This file is automatically generated by //zircon/kernel/vm:_kernel_bindgen_crate.vm-aspace-bindings.bindgen.
6
7#![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}