pub struct DBox<T> { /* private fields */ }Expand description
DMA 可访问的单值容器。
DBox<T> 提供单个值的 DMA 可访问存储,支持自动缓存同步。
每次访问值(read/write/modify)时都会根据 DMA 方向自动处理缓存操作。
§类型参数
T: 存储的值类型
§缓存同步
缓存同步在每次访问时自动执行:
read(): 读取前使 CPU 缓存失效(FromDevice/Bidirectional)write(value): 写入后刷新 CPU 缓存(ToDevice/Bidirectional)modify(f): 先失效缓存,执行闭包,再刷新缓存
§示例
ⓘ
use dma_api::{DeviceDma, DmaDirection};
#[derive(Default)]
struct Descriptor {
addr: u64,
length: u32,
}
let device = DeviceDma::new(0xFFFFFFFF, &my_dma_impl);
// 分配描述符
let mut dma_desc = device
.box_zero_with_align::<Descriptor>(64, DmaDirection::ToDevice)
.expect("Failed to allocate");
// 配置描述符(自动刷新缓存)
dma_desc.modify(|d| d.length = 4096);
// 获取 DMA 地址给硬件
let desc_addr = dma_desc.dma_addr();§生命周期
DBox 拥有其分配的 DMA 内存,在离开作用域时自动释放。
Implementations§
Trait Implementations§
Auto Trait Implementations§
impl<T> Freeze for DBox<T>
impl<T> !RefUnwindSafe for DBox<T>
impl<T> !Sync for DBox<T>
impl<T> Unpin for DBox<T>where
T: Unpin,
impl<T> !UnwindSafe for DBox<T>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more