1 /* linux/arch/arm/mach-s3c6400/include/mach/dma.h
3 * Copyright 2008 Openmoko, Inc.
4 * Copyright 2008 Simtec Electronics
5 * Ben Dooks <ben@simtec.co.uk>
6 * http://armlinux.simtec.co.uk/
8 * S3C6400 - DMA support
11 #ifndef __ASM_ARCH_DMA_H
12 #define __ASM_ARCH_DMA_H __FILE__
14 #define S3C_DMA_CHANNELS (16)
16 /* see mach-s3c2410/dma.h for notes on dma channel numbers */
18 /* Note, for the S3C64XX architecture we keep the DMACH_
19 * defines in the order they are allocated to [S]DMA0/[S]DMA1
20 * so that is easy to do DHACH_ -> DMA controller conversion
56 DMACH_SECURITY_RX
, /* SDMA1 only */
57 DMACH_SECURITY_TX
, /* SDMA1 only */
58 DMACH_MAX
/* the end */
61 static inline bool samsung_dma_has_circular(void)
66 static inline bool samsung_dma_is_dmadev(void)
70 #define S3C2410_DMAF_CIRCULAR (1 << 0)
74 #define DMACH_LOW_LEVEL (1<<28) /* use this to specifiy hardware ch no */
76 struct s3c64xx_dma_buff
;
78 /** s3c64xx_dma_buff - S3C64XX DMA buffer descriptor
79 * @next: Pointer to next buffer in queue or ring.
80 * @pw: Client provided identifier
81 * @lli: Pointer to hardware descriptor this buffer is associated with.
82 * @lli_dma: Hardare address of the descriptor.
84 struct s3c64xx_dma_buff
{
85 struct s3c64xx_dma_buff
*next
;
88 struct pl080s_lli
*lli
;
94 struct s3c2410_dma_chan
{
95 unsigned char number
; /* number of this dma channel */
96 unsigned char in_use
; /* channel allocated */
97 unsigned char bit
; /* bit for enable/disable/etc */
98 unsigned char hw_width
;
99 unsigned char peripheral
;
102 enum dma_data_direction source
;
107 struct s3c2410_dma_client
*client
;
108 struct s3c64xx_dmac
*dmac
; /* pointer to controller */
112 /* cdriver callbacks */
113 s3c2410_dma_cbfn_t callback_fn
; /* buffer done callback */
114 s3c2410_dma_opfn_t op_fn
; /* channel op callback */
116 /* buffer list and information */
117 struct s3c64xx_dma_buff
*curr
; /* current dma buffer */
118 struct s3c64xx_dma_buff
*next
; /* next buffer to load */
119 struct s3c64xx_dma_buff
*end
; /* end of queue */
121 /* note, when channel is running in circular mode, curr is the
122 * first buffer enqueued, end is the last and curr is where the
123 * last buffer-done event is set-at. The buffers are not freed
124 * and the last buffer hardware descriptor points back to the
129 #include <plat/dma-core.h>
131 #endif /* __ASM_ARCH_IRQ_H */