summaryrefslogtreecommitdiff
path: root/components/drivers/include
diff options
context:
space:
mode:
authorGUI <[email protected]>2025-12-03 21:47:49 +0800
committerGitHub <[email protected]>2025-12-03 21:47:49 +0800
commite5e0ad29bff1de391cff2ae516a55bd070c63520 (patch)
treec604ee2fd9c587bcf7cd4144e53c0b33cb03346e /components/drivers/include
parent0ea9d8f3bedae05d6e882c096dc57a578b321507 (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.h16
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__ */