Skip to main content

DmaBuffer

Struct DmaBuffer 

Source
pub struct DmaBuffer {
    frame: PhysFrame,
    order: u8,
    phys: u64,
    virt: u64,
    nframes: usize,
}
Expand description

A pinned, contiguous DMA buffer.

Allocated from the buddy allocator with allocate_phys_contiguous. The underlying frames are marked with the [frame_flags::DMA] flag, preventing the buddy from recycling them while a transfer is in flight.

The buffer is automatically unpinned on Drop, using RAII to guarantee cleanup even on panic paths.

Fields§

§frame: PhysFrame§order: u8§phys: u64§virt: u64§nframes: usize

Number of 4 KiB frames in this buffer.

Implementations§

Source§

impl DmaBuffer

Source

pub fn alloc(bytes: usize) -> Result<Self, DmaError>

Allocate a DMA buffer large enough for bytes, pinned for the duration of the transfer. The backing memory is contiguous in physical address space.

The buffer is not zeroed (caller must overwrite every byte before the first read).

Source

pub fn dma_addr(&self) -> PhysAddr

Physical base address : pass this to hardware DMA engines.

Source

pub fn virt_addr(&self) -> u64

Kernel virtual address (HHDM mapping) for CPU access.

Source

pub fn len_bytes(&self) -> usize

Number of bytes allocated (always a multiple of 4096).

Trait Implementations§

Source§

impl Drop for DmaBuffer

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more
Source§

fn pin_drop(self: Pin<&mut Self>)

🔬This is a nightly-only experimental API. (pin_ergonomics)
Execute the destructor for this type, but different to Drop::drop, it requires self to be pinned. Read more
Source§

impl Send for DmaBuffer

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
§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

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.