Struct VirtqueueAvailableRing

Source
#[repr(C, align(2))]
pub struct VirtqueueAvailableRing<const MAX_QUEUE_SIZE: usize> { /* private fields */ }
Expand description

The Virtqueue available ring.

This struct is exposed to the VirtIO device as a means to share buffers (pointed to by descriptors of the VirtqueueDescriptors descriptors table) with the VirtIO device (host). It avoids the need for explicit locking by using two distinct rings, each undirectionally exchanging information about used buffers. When a new buffer is placed into the available ring, the VirtIO driver (guest) must increment idx to the index where it would place the next available descriptor pointer in the ring field. After such an update, the queue must inform the device about this change through a call to VirtIOTransport::queue_notify. Given that volatile writes cannot be reordered with respect to each other, changes to the available ring are guaranteed to be visible to the VirtIO device (host).

Trait Implementations§

Source§

impl<const MAX_QUEUE_SIZE: usize> Default for VirtqueueAvailableRing<MAX_QUEUE_SIZE>

Source§

fn default() -> Self

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

Auto Trait Implementations§

§

impl<const MAX_QUEUE_SIZE: usize> !Freeze for VirtqueueAvailableRing<MAX_QUEUE_SIZE>

§

impl<const MAX_QUEUE_SIZE: usize> !RefUnwindSafe for VirtqueueAvailableRing<MAX_QUEUE_SIZE>

§

impl<const MAX_QUEUE_SIZE: usize> Send for VirtqueueAvailableRing<MAX_QUEUE_SIZE>

§

impl<const MAX_QUEUE_SIZE: usize> !Sync for VirtqueueAvailableRing<MAX_QUEUE_SIZE>

§

impl<const MAX_QUEUE_SIZE: usize> Unpin for VirtqueueAvailableRing<MAX_QUEUE_SIZE>

§

impl<const MAX_QUEUE_SIZE: usize> UnwindSafe for VirtqueueAvailableRing<MAX_QUEUE_SIZE>

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