starina_api::folio

Struct Folio

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

The ownership of a contiguous page-aliged memory region.

To summarize:

  • The memory block address is page-aligned (typically 4KB).
  • The memory block size is also page-aligned.
  • The memory block is physically contiguous.

§When to use

Use folio when you need a physically contiguous memory region. The common case is when you need to allocate a DMA buffer in a device driver (strictly speaking, when IOMMU is not available).

§Prefer Box<T> over folio

Unless you need low-level control over memory allocation, use containers like Vec<T> or Box<T> memory regions directly, such as DMA buffers, MMIO regions, and shared instead of folio. Folio is intended for OS services that need to manage memory between processes.

§You may want MappedFolio instead

If you want to access the memory region, use MappedFolio instead.

§Why “folio”?

Because it’s a sheet of paper (pages).

Implementations§

Source§

impl Folio

Source

pub fn create(len: usize) -> Result<Folio, FtlError>

Source

pub fn handle(&self) -> &OwnedHandle

Source

pub fn paddr(&self) -> Result<PAddr, FtlError>

Auto Trait Implementations§

§

impl Freeze for Folio

§

impl RefUnwindSafe for Folio

§

impl Send for Folio

§

impl Sync for Folio

§

impl Unpin for Folio

§

impl UnwindSafe for Folio

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.