/* SPDX-License-Identifier: GPL-2.0 */ #ifndef _SPRD_DMA_H_ #define _SPRD_DMA_H_ #define SPRD_DMA_REQ_SHIFT 16 #define SPRD_DMA_FLAGS(req_mode, int_type) \ ((req_mode) << SPRD_DMA_REQ_SHIFT | (int_type)) /* * enum sprd_dma_req_mode: define the DMA request mode * @SPRD_DMA_FRAG_REQ: fragment request mode * @SPRD_DMA_BLK_REQ: block request mode * @SPRD_DMA_TRANS_REQ: transaction request mode * @SPRD_DMA_LIST_REQ: link-list request mode * * We have 4 types request mode: fragment mode, block mode, transaction mode * and linklist mode. One transaction can contain several blocks, one block can * contain several fragments. Link-list mode means we can save several DMA * configuration into one reserved memory, then DMA can fetch each DMA * configuration automatically to start transfer. */ enum sprd_dma_req_mode { SPRD_DMA_FRAG_REQ, SPRD_DMA_BLK_REQ, SPRD_DMA_TRANS_REQ, SPRD_DMA_LIST_REQ, }; /* * enum sprd_dma_int_type: define the DMA interrupt type * @SPRD_DMA_NO_INT: do not need generate DMA interrupts. * @SPRD_DMA_FRAG_INT: fragment done interrupt when one fragment request * is done. * @SPRD_DMA_BLK_INT: block done interrupt when one block request is done. * @SPRD_DMA_BLK_FRAG_INT: block and fragment interrupt when one fragment * or one block request is done. * @SPRD_DMA_TRANS_INT: tansaction done interrupt when one transaction * request is done. * @SPRD_DMA_TRANS_FRAG_INT: transaction and fragment interrupt when one * transaction request or fragment request is done. * @SPRD_DMA_TRANS_BLK_INT: transaction and block interrupt when one * transaction request or block request is done. * @SPRD_DMA_LIST_INT: link-list done interrupt when one link-list request * is done. * @SPRD_DMA_CFGERR_INT: configure error interrupt when configuration is * incorrect. */ enum sprd_dma_int_type { SPRD_DMA_NO_INT, SPRD_DMA_FRAG_INT, SPRD_DMA_BLK_INT, SPRD_DMA_BLK_FRAG_INT, SPRD_DMA_TRANS_INT, SPRD_DMA_TRANS_FRAG_INT, SPRD_DMA_TRANS_BLK_INT, SPRD_DMA_LIST_INT, SPRD_DMA_CFGERR_INT, }; #endif