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}
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}