RT-Thread RTOS
An open source embedded real-time operating system
rt_dma_map_ops Struct Reference

#include <dma.h>

Data Fields

void *(* alloc )(struct rt_device *dev, rt_size_t size, rt_ubase_t *dma_handle, rt_ubase_t flags)
 
void(* free )(struct rt_device *dev, rt_size_t size, void *cpu_addr, rt_ubase_t dma_handle, rt_ubase_t flags)
 
rt_err_t(* sync_out_data )(struct rt_device *dev, void *data, rt_size_t size, rt_ubase_t *dma_handle, rt_ubase_t flags)
 
rt_err_t(* sync_in_data )(struct rt_device *dev, void *out_data, rt_size_t size, rt_ubase_t dma_handle, rt_ubase_t flags)
 

Detailed Description

DMA memory mapping operations vtable.

Abstracts device-specific DMA memory management: allocation, freeing, and cache synchronization for coherent and non-coherent devices. Devices may override these via dev->dma_ops or the device tree.

Field Documentation

◆ alloc

void*(* rt_dma_map_ops::alloc) (struct rt_device *dev, rt_size_t size, rt_ubase_t *dma_handle, rt_ubase_t flags)

Allocate a DMA buffer (optional, may fall back to default)

Parameters
[in]devDMA-capable device
[in]sizeRequested size in bytes
[out]dma_handlePhysical DMA address
[in]flagsAllocation flags (RT_DMA_F_*)
Returns
Kernel virtual address, or RT_NULL on failure

◆ free

void(* rt_dma_map_ops::free) (struct rt_device *dev, rt_size_t size, void *cpu_addr, rt_ubase_t dma_handle, rt_ubase_t flags)

Free a DMA buffer (optional)

Parameters
[in]devDMA-capable device
[in]sizeBuffer size in bytes
[in]cpu_addrKernel virtual address
[in]dma_handlePhysical DMA address
[in]flagsAllocation flags

◆ sync_out_data

rt_err_t(* rt_dma_map_ops::sync_out_data) (struct rt_device *dev, void *data, rt_size_t size, rt_ubase_t *dma_handle, rt_ubase_t flags)

Synchronize data for DMA output (CPU → device)

Performs any necessary cache flush and returns the DMA bus address.

Parameters
[in]devDMA-capable device
[in]dataVirtual address of data buffer
[in]sizeBuffer size in bytes
[out]dma_handleDMA bus address (may be NULL)
[in]flagsSync flags
Returns
RT_EOK on success

◆ sync_in_data

rt_err_t(* rt_dma_map_ops::sync_in_data) (struct rt_device *dev, void *out_data, rt_size_t size, rt_ubase_t dma_handle, rt_ubase_t flags)

Synchronize data for DMA input (device → CPU)

Performs any necessary cache invalidation.

Parameters
[in]devDMA-capable device
[in]out_dataVirtual address of data buffer
[in]sizeBuffer size in bytes
[in]dma_handleDMA bus address
[in]flagsSync flags
Returns
RT_EOK on success