7 #include <linux/export.h>
8 #include <linux/kernel.h>
9 #include <linux/types.h>
17 #define EBDMA_CSR 0x00UL
18 #define EBDMA_ADDR 0x04UL
19 #define EBDMA_COUNT 0x08UL
21 #define EBDMA_CSR_INT_PEND 0x00000001
22 #define EBDMA_CSR_ERR_PEND 0x00000002
23 #define EBDMA_CSR_DRAIN 0x00000004
24 #define EBDMA_CSR_INT_EN 0x00000010
25 #define EBDMA_CSR_RESET 0x00000080
26 #define EBDMA_CSR_WRITE 0x00000100
27 #define EBDMA_CSR_EN_DMA 0x00000200
28 #define EBDMA_CSR_CYC_PEND 0x00000400
29 #define EBDMA_CSR_DIAG_RD_DONE 0x00000800
30 #define EBDMA_CSR_DIAG_WR_DONE 0x00001000
31 #define EBDMA_CSR_EN_CNT 0x00002000
32 #define EBDMA_CSR_TC 0x00004000
33 #define EBDMA_CSR_DIS_CSR_DRN 0x00010000
34 #define EBDMA_CSR_BURST_SZ_MASK 0x000c0000
35 #define EBDMA_CSR_BURST_SZ_1 0x00080000
36 #define EBDMA_CSR_BURST_SZ_4 0x00000000
37 #define EBDMA_CSR_BURST_SZ_8 0x00040000
38 #define EBDMA_CSR_BURST_SZ_16 0x000c0000
39 #define EBDMA_CSR_DIAG_EN 0x00100000
40 #define EBDMA_CSR_DIS_ERR_PEND 0x00400000
41 #define EBDMA_CSR_TCI_DIS 0x00800000
42 #define EBDMA_CSR_EN_NEXT 0x01000000
43 #define EBDMA_CSR_DMA_ON 0x02000000
44 #define EBDMA_CSR_A_LOADED 0x04000000
45 #define EBDMA_CSR_NA_LOADED 0x08000000
46 #define EBDMA_CSR_DEV_ID_MASK 0xf0000000
48 #define EBUS_DMA_RESET_TIMEOUT 10000
50 static void __ebus_dma_reset(
struct ebus_dma_info *
p,
int no_drain)
79 spin_unlock_irqrestore(&p->
lock, flags);
111 __ebus_dma_reset(p, 1);
139 spin_unlock_irqrestore(&p->
lock, flags);
145 spin_unlock_irqrestore(&p->
lock, flags);
165 csr &= ~EBDMA_CSR_INT_EN;
169 spin_unlock_irqrestore(&p->
lock, flags);
182 if (len >= (1 << 24))
199 spin_unlock_irqrestore(&p->
lock, flags);
211 __ebus_dma_reset(p, 0);
225 spin_unlock_irqrestore(&p->
lock, flags);
253 (csr & EBDMA_CSR_EN_DMA))
255 spin_unlock_irqrestore(&p->
lock, flags);