blob: 732aaf8d5e563026f0e10367699f17ffeecff5da [file]
// Copyright 2026 The Fuchsia Authors
//
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file or at
// https://opensource.org/licenses/MIT
use crate::user_copy::{UserInPtr, UserOutPtr};
use vm_object_paged_bindings as bindings;
use zx_types::zx_iovec_t;
// C++ FFI declarations
#[allow(improper_ctypes)]
unsafe extern "C" {
pub(crate) fn cpp_vm_object_paged_read_user_vector(
vmo: *mut bindings::VmObjectPaged,
vector: UserOutPtr<zx_iovec_t>,
count: usize,
offset: u64,
length: usize,
out_actual: *mut usize,
) -> zx_types::zx_status_t;
pub(crate) fn cpp_vm_object_paged_write_user_vector(
vmo: *mut bindings::VmObjectPaged,
vector: UserInPtr<zx_iovec_t>,
count: usize,
offset: u64,
length: usize,
out_actual: *mut usize,
) -> zx_types::zx_status_t;
pub(crate) fn cpp_vm_object_paged_write_user_vector_progress(
vmo: *mut bindings::VmObjectPaged,
vector: UserInPtr<zx_iovec_t>,
count: usize,
offset: u64,
length: usize,
prev_stream_size: u64,
out_actual: *mut usize,
cb: extern "C" fn(*mut core::ffi::c_void, u64, usize),
cookie: *mut core::ffi::c_void,
) -> zx_types::zx_status_t;
pub(crate) fn cpp_vm_object_paged_zero_range(
vmo: *mut bindings::VmObjectPaged,
offset: u64,
length: u64,
) -> zx_types::zx_status_t;
pub(crate) fn cpp_vm_object_paged_zero_range_untracked(
vmo: *mut bindings::VmObjectPaged,
offset: u64,
length: u64,
) -> zx_types::zx_status_t;
pub(crate) fn cpp_vm_object_paged_resize(
vmo: *mut bindings::VmObjectPaged,
size: u64,
) -> zx_types::zx_status_t;
pub(crate) fn cpp_vm_object_paged_unmap_and_call(
vmo: *mut bindings::VmObjectPaged,
offset: u64,
length: u64,
call_fn: Option<unsafe extern "C" fn(*mut core::ffi::c_void)>,
call_ctx: *mut core::ffi::c_void,
);
pub(crate) fn cpp_vm_object_paged_set_user_stream_size(
vmo: *mut bindings::VmObjectPaged,
ssm: *mut core::ffi::c_void,
);
pub(crate) fn cpp_vm_object_paged_user_stream_size(
vmo: *mut bindings::VmObjectPaged,
out_stream_size: *mut u64,
) -> bool;
}