Struct devices::IrqLevelEvent

source ·
pub struct IrqLevelEvent {
    trigger_evt: Event,
    resample_evt: Event,
}
Expand description

A structure suitable for implementing level triggered interrupts in device backends.

Level-triggered interrupts require the device to monitor a resample event from the IRQ chip, which can be retrieved with IrqLevelEvent::get_resample(). When the guest OS acknowledges the interrupt with an End of Interrupt (EOI) command, the IRQ chip will signal the resample event. Each time the resample event is signalled, the device should re-check its state and call IrqLevelEvent::trigger() again if the interrupt should still be asserted.

Fields§

§trigger_evt: Event

An event used by the device backend to signal hypervisor/VM about data or new unit of work being available.

§resample_evt: Event

An event used by the hypervisor to signal device backend that it completed processing a unit of work and that device should re-raise trigger_evt if additional work needs to be done.

Implementations§

source§

impl IrqLevelEvent

source

pub fn new() -> Result<IrqLevelEvent>

source

pub fn try_clone(&self) -> Result<IrqLevelEvent>

source

pub fn from_event_pair(trigger_evt: Event, resample_evt: Event) -> IrqLevelEvent

Creates an instance of IrqLevelEvent from an existing pair of events.

source

pub fn get_trigger(&self) -> &Event

source

pub fn get_resample(&self) -> &Event

source

pub fn trigger(&self) -> Result<()>

Allows backend to inject interrupt (typically into guest).

source

pub fn clear_trigger(&self)

Allows code servicing interrupt to consume or clear the event.

source

pub fn trigger_resample(&self) -> Result<()>

Allows code servicing interrupt to signal that processing is done and that the backend should go ahead and re-trigger it if there is more work needs to be done. Note that typically resampling is signalled not by individual backends, but rather by the code implementing interrupt controller.

source

pub fn clear_resample(&self)

Allows backend to consume or clear the resample event.

Trait Implementations§

source§

impl AsRawDescriptors for IrqLevelEvent

source§

fn as_raw_descriptors(&self) -> Vec<RawDescriptor>

Returns the underlying raw descriptors. Read more
source§

impl Debug for IrqLevelEvent

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for IrqLevelEvent

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Serialize for IrqLevelEvent

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where __S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

Blanket Implementations§

source§

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

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

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

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

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

source§

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

Mutably borrows from an owned value. Read more
§

impl<T> Downcast for Twhere T: Any,

§

fn into_any(self: Box<T, Global>) -> Box<dyn Any, Global>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T, Global>) -> Rc<dyn Any, Global>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for Twhere T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T, Global>) -> Arc<dyn Any + Sync + Send, Global>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for Twhere 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, U> TryFrom<U> for Twhere U: Into<T>,

§

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 Twhere U: TryFrom<T>,

§

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.
§

impl<V, T> VZip<V> for Twhere V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> DeserializeOwned for Twhere T: for<'de> Deserialize<'de>,