1 /* 2 * Copyright (c) 2025 Silicon Laboratories Inc. 3 * 4 * SPDX-License-Identifier: Apache-2.0 5 */ 6 7 #ifndef ZEPHYR_INCLUDE_DRIVERS_DMA_SILABS_LDMA_H_ 8 #define ZEPHYR_INCLUDE_DRIVERS_DMA_SILABS_LDMA_H_ 9 10 #include <zephyr/drivers/dma.h> 11 12 #define SILABS_LDMA_SOURCE_MASK GENMASK(21, 16) 13 #define SILABS_LDMA_SIG_MASK GENMASK(3, 0) 14 15 #define SILABS_DMA_SLOT_SOURCE_MASK GENMASK(7, 3) 16 #define SILABS_DMA_SLOT_SIG_MASK GENMASK(2, 0) 17 18 #define SILABS_LDMA_REQSEL_TO_SLOT(signal) \ 19 FIELD_PREP(SILABS_DMA_SLOT_SOURCE_MASK, FIELD_GET(SILABS_LDMA_SOURCE_MASK, signal)) | \ 20 FIELD_PREP(SILABS_DMA_SLOT_SIG_MASK, FIELD_GET(SILABS_LDMA_SIG_MASK, signal)) 21 22 #define SILABS_LDMA_SLOT_TO_REQSEL(slot) \ 23 FIELD_PREP(SILABS_LDMA_SOURCE_MASK, FIELD_GET(SILABS_DMA_SLOT_SOURCE_MASK, slot)) | \ 24 FIELD_PREP(SILABS_LDMA_SIG_MASK, FIELD_GET(SILABS_DMA_SLOT_SIG_MASK, slot)) 25 26 /** 27 * @brief Append a new block to the current channel 28 * 29 * This function allows to append a block to the current DMA transfer. It allows a user/driver 30 * to register the next DMA transfer while a transfer in being held without stopping or restarting 31 * DMA engine. It is very suitable for Zephyr Uart API where user gives buffers while the DMA engine 32 * is running. Because this function changes dynamically the link to the block that DMA engine would 33 * load as the next transfer, it is only working with channel that didn't have linked block list. 34 * 35 * In the case that the DMA engine naturally stopped because the previous transfer is finished, this 36 * function simply restart the DMA engine with the given block. If the DMA engine stopped while 37 * reconfiguring the next transfer, the DMA engine will restart too. 38 * 39 * @param dev: dma device 40 * @param channel: channel 41 * @param config: configuration of the channel with the block to append as the head_block. 42 */ 43 int silabs_ldma_append_block(const struct device *dev, uint32_t channel, 44 struct dma_config *config); 45 46 #endif /* ZEPHYR_INCLUDE_DRIVERS_DMA_SILABS_LDMA_H_*/ 47