xref: /linux/arch/arm/include/asm/mach/dma.h (revision e7536617)
1*d2912cb1SThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-only */
24baa9922SRussell King /*
34baa9922SRussell King  *  arch/arm/include/asm/mach/dma.h
44baa9922SRussell King  *
54baa9922SRussell King  *  Copyright (C) 1998-2000 Russell King
64baa9922SRussell King  *
74baa9922SRussell King  *  This header file describes the interface between the generic DMA handler
84baa9922SRussell King  *  (dma.c) and the architecture-specific DMA backends (dma-*.c)
94baa9922SRussell King  */
104baa9922SRussell King 
114baa9922SRussell King struct dma_struct;
124baa9922SRussell King typedef struct dma_struct dma_t;
134baa9922SRussell King 
144baa9922SRussell King struct dma_ops {
151df81302SRussell King 	int	(*request)(unsigned int, dma_t *);		/* optional */
161df81302SRussell King 	void	(*free)(unsigned int, dma_t *);			/* optional */
171df81302SRussell King 	void	(*enable)(unsigned int, dma_t *);		/* mandatory */
181df81302SRussell King 	void 	(*disable)(unsigned int, dma_t *);		/* mandatory */
191df81302SRussell King 	int	(*residue)(unsigned int, dma_t *);		/* optional */
201df81302SRussell King 	int	(*setspeed)(unsigned int, dma_t *, int);	/* optional */
218c56afcbSRussell King 	const char *type;
224baa9922SRussell King };
234baa9922SRussell King 
244baa9922SRussell King struct dma_struct {
254baa9922SRussell King 	void		*addr;		/* single DMA address		*/
264baa9922SRussell King 	unsigned long	count;		/* single DMA size		*/
274baa9922SRussell King 	struct scatterlist buf;		/* single DMA			*/
284baa9922SRussell King 	int		sgcount;	/* number of DMA SG		*/
294baa9922SRussell King 	struct scatterlist *sg;		/* DMA Scatter-Gather List	*/
304baa9922SRussell King 
314baa9922SRussell King 	unsigned int	active:1;	/* Transfer active		*/
324baa9922SRussell King 	unsigned int	invalid:1;	/* Address/Count changed	*/
334baa9922SRussell King 
34f0ffc816SRussell King 	unsigned int	dma_mode;	/* DMA mode			*/
354baa9922SRussell King 	int		speed;		/* DMA speed			*/
364baa9922SRussell King 
374baa9922SRussell King 	unsigned int	lock;		/* Device is allocated		*/
384baa9922SRussell King 	const char	*device_id;	/* Device name			*/
394baa9922SRussell King 
408c56afcbSRussell King 	const struct dma_ops *d_ops;
414baa9922SRussell King };
424baa9922SRussell King 
432f757f2aSRussell King /*
442f757f2aSRussell King  * isa_dma_add - add an ISA-style DMA channel
454baa9922SRussell King  */
462f757f2aSRussell King extern int isa_dma_add(unsigned int, dma_t *dma);
47