use vmm_sys_util::eventfd::EventFd;
use crate::backend::VhostBackend;
use crate::Result;
pub struct VhostVdpaIovaRange {
pub first: u64,
pub last: u64,
}
pub trait VhostVdpa: VhostBackend {
fn get_device_id(&self) -> Result<u32>;
fn get_status(&self) -> Result<u8>;
fn set_status(&self, status: u8) -> Result<()>;
fn get_config(&self, offset: u32, buffer: &mut [u8]) -> Result<()>;
fn set_config(&self, offset: u32, buffer: &[u8]) -> Result<()>;
fn set_vring_enable(&self, queue_index: usize, enabled: bool) -> Result<()>;
fn get_vring_num(&self) -> Result<u16>;
fn set_config_call(&self, fd: &EventFd) -> Result<()>;
fn get_iova_range(&self) -> Result<VhostVdpaIovaRange>;
fn get_config_size(&self) -> Result<u32>;
fn get_vqs_count(&self) -> Result<u32>;
fn get_group_num(&self) -> Result<u32>;
fn get_as_num(&self) -> Result<u32>;
fn get_vring_group(&self, queue_index: u32) -> Result<u32>;
fn set_group_asid(&self, group_index: u32, asid: u32) -> Result<()>;
fn suspend(&self) -> Result<()>;
fn dma_map(&self, iova: u64, size: u64, vaddr: *const u8, readonly: bool) -> Result<()>;
fn dma_unmap(&self, iova: u64, size: u64) -> Result<()>;
}