pub struct PackedQueue {
    mem: GuestMemory,
    event: Event,
    size: u16,
    vector: u16,
    avail_index: PackedQueueIndex,
    use_index: PackedQueueIndex,
    signalled_used_index: PackedQueueIndex,
    features: u64,
    desc_table: GuestAddress,
    device_event_suppression: GuestAddress,
    driver_event_suppression: GuestAddress,
}

Fields§

§mem: GuestMemory§event: Event§size: u16§vector: u16§avail_index: PackedQueueIndex§use_index: PackedQueueIndex§signalled_used_index: PackedQueueIndex§features: u64§desc_table: GuestAddress§device_event_suppression: GuestAddress§driver_event_suppression: GuestAddress

Implementations§

source§

impl PackedQueue

source

pub fn new( config: &QueueConfig, mem: &GuestMemory, event: Event ) -> Result<Self>

Constructs an empty virtio queue with the given max_size.

source

pub fn size(&self) -> u16

Return the actual size of the queue, as the driver may not set up a queue as big as the device allows.

source

pub fn vector(&self) -> u16

Getter for vector field

source

pub fn desc_table(&self) -> GuestAddress

Getter for descriptor area

source

pub fn avail_ring(&self) -> GuestAddress

Getter for driver area

source

pub fn used_ring(&self) -> GuestAddress

Getter for device area

source

pub fn event(&self) -> &Event

Get a reference to the queue’s “kick event”

source

fn area_sizes( queue_size: u16, desc_table: GuestAddress, driver_area: GuestAddress, device_area: GuestAddress ) -> Vec<(GuestAddress, usize)>

source

fn set_avail_event(&mut self, event: PackedDescEvent)

Set the device event suppression

This field is used to specify the timing of when the driver notifies the device that the descriptor table is ready to be processed.

source

fn get_driver_event(&self) -> PackedDescEvent

source

pub fn peek(&mut self) -> Option<DescriptorChain>

Get the first available descriptor chain without removing it from the queue. Call pop_peeked to remove the returned descriptor chain from the queue.

source

pub(super) fn pop_peeked(&mut self, descriptor_chain: &DescriptorChain)

Remove the first available descriptor chain from the queue. This function should only be called immediately following peek and must be passed a reference to the same DescriptorChain returned by the most recent peek.

source

pub fn add_used(&mut self, desc_chain: DescriptorChain, len: u32)

Write to first descriptor in descriptor chain to mark descriptor chain as used

source

fn queue_wants_interrupt(&mut self) -> bool

Returns if the queue should have an interrupt sent based on its state.

source

pub fn trigger_interrupt(&mut self, interrupt: &Interrupt) -> bool

inject interrupt into guest on this queue return true: interrupt is injected into guest for this queue false: interrupt isn’t injected

source

pub fn ack_features(&mut self, features: u64)

Acknowledges that this set of features should be enabled on this queue.

source

pub fn snapshot(&self) -> Result<Value>

TODO: b/290307056 - Implement snapshot for packed virtqueue, add tests to validate.

source

pub fn restore( _queue_value: Value, _mem: &GuestMemory, _event: Event ) -> Result<PackedQueue>

TODO: b/290307056 - Implement restore for packed virtqueue, add tests to validate.

Trait Implementations§

source§

impl Debug for PackedQueue

source§

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

Formats the value using the given formatter. 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