Struct IoManager

Source
pub struct IoManager { /* private fields */ }
Expand description

IO manager to handle all trapped MMIO/PIO access requests.

All devices handling trapped MMIO/PIO accesses should register themself to the IO manager with trapped address ranges. When guest vm accesses those trapped MMIO/PIO address ranges, VM IO Exit events will be triggered and the VMM dispatches those events to IO manager. And then the registered callbacks will invoked by IO manager.

Implementations§

Source§

impl IoManager

Source

pub fn new() -> Self

Create a new instance of IoManager.

Source

pub fn register_device_io( &mut self, device: Arc<dyn DeviceIo>, resources: &[Resource], ) -> Result<()>

Register a new device to the IoManager, with trapped MMIO/PIO address ranges.

§Arguments
  • device: device object to handle trapped IO access requests
  • resources: resources representing trapped MMIO/PIO address ranges. Only MMIO/PIO address ranges will be handled, and other types of resource will be ignored. So the caller does not need to filter out non-MMIO/PIO resources.
Source

pub fn unregister_device_io(&mut self, resources: &[Resource]) -> Result<()>

Unregister a device from IoManager.

§Arguments
  • resources: resource list containing all trapped address ranges for the device.
Source

pub fn mmio_read(&self, addr: u64, data: &mut [u8]) -> Result<()>

Handle VM IO Exit events triggered by trapped MMIO read accesses.

Return error if failed to get the device.

Source

pub fn mmio_write(&self, addr: u64, data: &[u8]) -> Result<()>

Handle VM IO Exit events triggered by trapped MMIO write accesses.

Return error if failed to get the device.

Source§

impl IoManager

Source

pub fn pio_read(&self, addr: u16, data: &mut [u8]) -> Result<()>

Handle VM IO Exit events triggered by trapped PIO read accesses.

Return error if failed to get the device.

Source

pub fn pio_write(&self, addr: u16, data: &[u8]) -> Result<()>

Handle VM IO Exit events triggered by trapped PIO write accesses.

Return error if failed to get the device.

Trait Implementations§

Source§

impl Clone for IoManager

Source§

fn clone(&self) -> IoManager

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Default for IoManager

Source§

fn default() -> IoManager

Returns the “default value” for a type. Read more
Source§

impl PartialEq for IoManager

Source§

fn eq(&self, other: &IoManager) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.