1#![expect(non_camel_case_types)]
8#![expect(non_upper_case_globals)]
9#![no_std]
10pub use compression_bindings::VmCompression;
11pub use event_bindings::{AutounsignalEvent, Event};
12pub use evictor_bindings::Evictor;
13pub use page_bindings::vm_page_t;
14pub use page_queues_bindings::PageQueues;
15pub use pmm_arena_bindings::PmmArena;
16pub use pmm_checker_bindings::PmmChecker;
17pub use zx_types::{zx_duration_mono_t, zx_instant_mono_t, zx_paddr_t, zx_status_t};
18pub type VmCowPages = *const core::ffi::c_void;
19pub type VmPageDoublyLinkedList = usize;
20
21#[derive(PartialEq, Eq, Copy, Clone, Debug, Hash)]
22#[repr(C, align(8))]
23pub struct __BindgenOpaqueArray8<T>(pub T);
24impl<T: Copy + Default, const N: usize> Default for __BindgenOpaqueArray8<[T; N]> {
25 fn default() -> Self {
26 Self([<T as Default>::default(); N])
27 }
28}
29pub const PMM_ALLOC_FLAG_ANY: u32 = 0;
30pub const PMM_ALLOC_FLAG_CAN_WAIT: u32 = 1;
31#[repr(C)]
32#[derive(Debug, Copy, Clone)]
33pub struct std_atomic<_Tp> {
34 pub _phantom_0: ::core::marker::PhantomData<::core::cell::UnsafeCell<_Tp>>,
35 pub _address: u8,
36}
37pub type std_atomic___base = u8;
38#[repr(u8)]
39#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
40pub enum PmmOptDelayReuse {
41 Default = 0,
42 Yes = 1,
43}
44#[repr(C)]
45pub struct PmmNode {
46 pub canary_: u32,
47 pub __bindgen_padding_0: [u8; 4usize],
48 pub lock_: __BindgenOpaqueArray8<[u8; 24usize]>,
49 pub arena_cumulative_size_: u64,
50 pub free_count_: __BindgenOpaqueArray8<[u8; 8usize]>,
51 pub free_loaned_count_: __BindgenOpaqueArray8<[u8; 8usize]>,
52 pub loaned_count_: __BindgenOpaqueArray8<[u8; 8usize]>,
53 pub loan_cancelled_count_: __BindgenOpaqueArray8<[u8; 8usize]>,
54 pub free_list_: VmPageDoublyLinkedList,
55 pub loaned_list_lock_: __BindgenOpaqueArray8<[u8; 24usize]>,
56 pub free_loaned_list_: VmPageDoublyLinkedList,
57 pub phys_handoff_temporary_list_: VmPageDoublyLinkedList,
58 pub phys_handoff_vmo_list_: VmPageDoublyLinkedList,
59 pub permanently_reserved_list_: VmPageDoublyLinkedList,
60 pub should_wait_: PmmNode_ShouldWaitState,
61 pub __bindgen_padding_1: [u8; 4usize],
62 pub should_wait_free_pages_level_: u64,
63 pub may_allocate_evt_: AutounsignalEvent,
64 pub alloc_failed_no_mem_: u8,
65 pub __bindgen_padding_2: [u8; 7usize],
66 pub first_alloc_failure_: PmmNode_AllocFailure,
67 pub mem_signal_: *mut Event,
68 pub mem_signal_lower_bound_: u64,
69 pub mem_signal_upper_bound_: u64,
70 pub page_queues_: PageQueues,
71 pub evictor_: Evictor,
72 pub compression_lock_: __BindgenOpaqueArray8<[u8; 24usize]>,
73 pub page_compression_: __BindgenOpaqueArray8<[u8; 8usize]>,
74 pub free_fill_enabled_: u8,
75 pub all_free_pages_filled_: bool,
76 pub __bindgen_padding_3: [u8; 6usize],
77 pub checker_: PmmChecker,
78 pub random_should_wait_seed_: usize,
79 pub used_arena_count_: usize,
80 pub arenas_: [PmmArena; 16usize],
81}
82#[repr(C)]
83#[derive(Debug, Copy, Clone)]
84pub struct PmmNode_AllocFailure {
85 pub type_: PmmNode_AllocFailure_Type,
86 pub __bindgen_padding_0: [u8; 7usize],
87 pub size: usize,
88 pub free_count: u64,
89}
90#[repr(u8)]
91#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
92pub enum PmmNode_AllocFailure_Type {
93 None = 0,
94 Pmm = 1,
95 Heap = 2,
96 Handle = 3,
97 Other = 4,
98}
99#[repr(i32)]
100#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
101pub enum PmmNode_ShouldWaitState {
102 Never = 0,
103 OnceLevelTripped = 1,
104 UntilReset = 2,
105}
106pub const PmmNode_kIndexZeroBits: ::core::ffi::c_int = 3;
107pub const PmmNode_kArenaCount: usize = 16;
108pub const PmmNode_kArenaBits: ::core::ffi::c_int = 4;
109pub const PmmNode_kMaxPagesPerArena: usize = 33554432;
110pub const PmmNode_kArenaMask: u32 = 15;
111#[repr(C)]
112pub struct FreeLoanedPagesHolder {
113 pub used_: bool,
114 pub __bindgen_padding_0: [u8; 7usize],
115 pub pages_: VmPageDoublyLinkedList,
116 pub waiters_: __BindgenOpaqueArray8<[u8; 8usize]>,
117}
118#[repr(C)]
119pub struct FreeLoanedPagesHolder_Waiter {
120 pub _base: __BindgenOpaqueArray8<[u8; 8usize]>,
121 pub event: Event,
122}