diff options
| author | GUI <[email protected]> | 2025-12-03 21:47:49 +0800 |
|---|---|---|
| committer | GitHub <[email protected]> | 2025-12-03 21:47:49 +0800 |
| commit | e5e0ad29bff1de391cff2ae516a55bd070c63520 (patch) | |
| tree | c604ee2fd9c587bcf7cd4144e53c0b33cb03346e /components/drivers/include | |
| parent | 0ea9d8f3bedae05d6e882c096dc57a578b321507 (diff) | |
[DM/DMA] Update DMA #10987
* Append WT attribute.
* Change the API with pool size only.
* Add address mask for DMA
* Change DMA lock to mutex
* Add pause callback for DMA engine driver
* Add DMA Engine test
* Add ARM PL330 DMA Engine driver
Diffstat (limited to 'components/drivers/include')
| -rw-r--r-- | components/drivers/include/drivers/dma.h | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/components/drivers/include/drivers/dma.h b/components/drivers/include/drivers/dma.h index 3128c67744..1bcf552b44 100644 --- a/components/drivers/include/drivers/dma.h +++ b/components/drivers/include/drivers/dma.h @@ -81,6 +81,8 @@ struct rt_dma_controller struct rt_device *dev; +#define RT_DMA_ADDR_MASK(n) (((n) == 64) ? ~0ULL : ((1ULL << (n)) - 1)) + rt_uint64_t addr_mask; RT_BITMAP_DECLARE(dir_cap, RT_DMA_DIR_MAX); const struct rt_dma_controller_ops *ops; @@ -95,6 +97,7 @@ struct rt_dma_controller_ops rt_err_t (*release_chan)(struct rt_dma_chan *chan); rt_err_t (*start)(struct rt_dma_chan *chan); + rt_err_t (*pause)(struct rt_dma_chan *chan); rt_err_t (*stop)(struct rt_dma_chan *chan); rt_err_t (*config)(struct rt_dma_chan *chan, struct rt_dma_slave_config *conf); @@ -164,10 +167,19 @@ rt_inline void rt_dma_controller_add_direction(struct rt_dma_controller *ctrl, rt_bitmap_set_bit(ctrl->dir_cap, dir); } +rt_inline void rt_dma_controller_set_addr_mask(struct rt_dma_controller *ctrl, + rt_uint64_t mask) +{ + RT_ASSERT(ctrl != RT_NULL); + + ctrl->addr_mask = mask; +} + rt_err_t rt_dma_controller_register(struct rt_dma_controller *ctrl); rt_err_t rt_dma_controller_unregister(struct rt_dma_controller *ctrl); rt_err_t rt_dma_chan_start(struct rt_dma_chan *chan); +rt_err_t rt_dma_chan_pause(struct rt_dma_chan *chan); rt_err_t rt_dma_chan_stop(struct rt_dma_chan *chan); rt_err_t rt_dma_chan_config(struct rt_dma_chan *chan, struct rt_dma_slave_config *conf); @@ -188,6 +200,7 @@ rt_err_t rt_dma_chan_release(struct rt_dma_chan *chan); #define RT_DMA_F_NOCACHE RT_BIT(2) #define RT_DMA_F_DEVICE RT_BIT(3) #define RT_DMA_F_NOMAP RT_BIT(4) +#define RT_DMA_F_WT RT_BIT(5) #define RT_DMA_PAGE_SIZE ARCH_PAGE_SIZE @@ -228,7 +241,6 @@ rt_inline void rt_dma_device_set_ops(struct rt_device *dev, } struct rt_dma_pool *rt_dma_pool_install(rt_region_t *region); -rt_err_t rt_dma_pool_extract(rt_region_t *region_list, rt_size_t list_len, - rt_size_t cma_size, rt_size_t coherent_pool_size); +rt_err_t rt_dma_pool_extract(rt_size_t cma_size, rt_size_t coherent_pool_size); #endif /* __DMA_H__ */ |
