pmm_bindings/
pmm_bindings.rs1#![no_std]
8use page_bindings::vm_page_t;
9use page_queues_bindings::PageQueues;
10pub use pmm_arena_bindings::{pmm_arena_info, pmm_arena_info_t};
11pub use pmm_node_bindings::PmmOptDelayReuse;
12pub use zx_types::{zx_paddr_t, zx_status_t};
13pub type PmmNode = pmm_node_bindings::PmmNode;
14pub type VmPageDoublyLinkedList = core::ffi::c_void;
15pub type VmCompression = core::ffi::c_void;
16
17pub const PMM_ALLOC_FLAG_ANY: u32 = 0;
18pub const PMM_ALLOC_FLAG_CAN_WAIT: u32 = 1;
19unsafe extern "C" {
20 pub fn cpp_paddr_to_vm_page(paddr: zx_paddr_t) -> *mut vm_page_t;
21}
22unsafe extern "C" {
23 pub fn cpp_pmm_page_queues() -> *mut PageQueues;
24}
25unsafe extern "C" {
26 pub fn cpp_pmm_get_page_compression() -> *mut VmCompression;
27}
28unsafe extern "C" {
29 pub fn cpp_pmm_alloc_page(
30 flags: u32,
31 out_page: *mut *mut vm_page_t,
32 out_paddr: *mut zx_paddr_t,
33 ) -> zx_status_t;
34}
35unsafe extern "C" {
36 pub fn cpp_pmm_alloc_pages(
37 count: usize,
38 flags: u32,
39 list: *mut VmPageDoublyLinkedList,
40 ) -> zx_status_t;
41}
42unsafe extern "C" {
43 pub fn cpp_pmm_alloc_contiguous(
44 count: usize,
45 flags: u32,
46 align_log2: u8,
47 out_pa: *mut zx_paddr_t,
48 list: *mut VmPageDoublyLinkedList,
49 ) -> zx_status_t;
50}
51unsafe extern "C" {
52 pub fn cpp_pmm_free_page(page: *mut vm_page_t);
53}
54unsafe extern "C" {
55 pub fn cpp_pmm_free_list(list: *mut VmPageDoublyLinkedList);
56}
57unsafe extern "C" {
58 pub fn cpp_pmm_num_arenas() -> usize;
59}
60unsafe extern "C" {
61 pub fn cpp_pmm_get_arena_info(
62 count: usize,
63 i: u64,
64 buffer: *mut pmm_arena_info_t,
65 buffer_size: usize,
66 ) -> zx_status_t;
67}