1 /* SPDX-License-Identifier: GPL-2.0 */
3 * Copyright (c) 2018-2019 Synopsys, Inc. and/or its affiliates.
4 * Synopsys DesignWare eDMA core driver
6 * Author: Gustavo Pimentel <gustavo.pimentel@synopsys.com>
9 #ifndef _DW_EDMA_CORE_H
10 #define _DW_EDMA_CORE_H
12 #include <linux/msi.h>
13 #include <linux/dma/edma.h>
15 #include "../virt-dma.h"
29 enum dw_edma_request {
44 struct dw_edma_burst {
45 struct list_head list;
51 struct dw_edma_region {
57 struct dw_edma_chunk {
58 struct list_head list;
59 struct dw_edma_chan *chan;
60 struct dw_edma_burst *burst;
65 struct dw_edma_region ll_region; /* Linked list */
69 struct virt_dma_desc vd;
70 struct dw_edma_chan *chan;
71 struct dw_edma_chunk *chunk;
80 struct virt_dma_chan vc;
81 struct dw_edma_chip *chip;
92 enum dw_edma_request request;
93 enum dw_edma_status status;
96 struct dma_slave_config config;
109 struct dma_device wr_edma;
112 struct dma_device rd_edma;
115 struct dw_edma_region rg_region; /* Registers */
116 struct dw_edma_region ll_region; /* Linked list */
117 struct dw_edma_region dt_region; /* Data */
119 struct dw_edma_irq *irq;
123 enum dw_edma_mode mode;
125 struct dw_edma_chan *chan;
126 const struct dw_edma_core_ops *ops;
128 raw_spinlock_t lock; /* Only for legacy */
132 struct scatterlist *sgl;
136 struct dw_edma_cyclic {
142 struct dw_edma_transfer {
143 struct dma_chan *dchan;
145 struct dw_edma_sg sg;
146 struct dw_edma_cyclic cyclic;
148 enum dma_transfer_direction direction;
154 struct dw_edma_chan *vc2dw_edma_chan(struct virt_dma_chan *vc)
156 return container_of(vc, struct dw_edma_chan, vc);
160 struct dw_edma_chan *dchan2dw_edma_chan(struct dma_chan *dchan)
162 return vc2dw_edma_chan(to_virt_chan(dchan));
165 #endif /* _DW_EDMA_CORE_H */