1pub mod sys;
6
7use std::io::Error as IoError;
8
9use base::SafeDescriptor;
10use remain::sorted;
11pub use sys::UdmabufDriver;
12use thiserror::Error;
13
14use crate::GuestAddress;
15use crate::GuestMemory;
16use crate::GuestMemoryError;
17
18#[sorted]
19#[derive(Error, Debug)]
20pub enum UdmabufError {
21 #[error("failed to create buffer: {0:?}")]
22 DmabufCreationFail(IoError),
23 #[error("failed to open udmabuf driver: {0:?}")]
24 DriverOpenFailed(IoError),
25 #[error("failed to get region offset: {0:?}")]
26 InvalidOffset(GuestMemoryError),
27 #[error("All guest addresses must aligned to 4KiB")]
28 NotPageAligned,
29 #[error("udmabuf is not supported on this platform")]
30 UdmabufUnsupported,
31}
32
33pub type UdmabufResult<T> = std::result::Result<T, UdmabufError>;
35
36pub trait UdmabufDriverTrait {
38 fn new() -> UdmabufResult<Self>
40 where
41 Self: Sized;
42
43 fn create_udmabuf(
45 &self,
46 mem: &GuestMemory,
47 iovecs: &[(GuestAddress, usize)],
48 ) -> UdmabufResult<SafeDescriptor>;
49}