/* arch/arm/plat-samsung/include/plat/dma-ops.h * * Copyright (c) 2011 Samsung Electronics Co., Ltd. * http://www.samsung.com * * Samsung DMA support * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. */ #ifndef __SAMSUNG_DMA_OPS_H_ #define __SAMSUNG_DMA_OPS_H_ __FILE__ #include <linux/dmaengine.h> #include <mach/dma.h> struct samsung_dma_req { enum dma_transaction_type cap; struct s3c2410_dma_client *client; }; struct samsung_dma_prep { enum dma_transaction_type cap; enum dma_transfer_direction direction; dma_addr_t buf; unsigned long period; unsigned long len; void (*fp)(void *data); void *fp_param; }; struct samsung_dma_config { enum dma_transfer_direction direction; enum dma_slave_buswidth width; dma_addr_t fifo; }; struct samsung_dma_ops { unsigned (*request)(enum dma_ch ch, struct samsung_dma_req *param, struct device *dev, char *ch_name); int (*release)(unsigned ch, void *param); int (*config)(unsigned ch, struct samsung_dma_config *param); int (*prepare)(unsigned ch, struct samsung_dma_prep *param); int (*trigger)(unsigned ch); int (*started)(unsigned ch); int (*flush)(unsigned ch); int (*stop)(unsigned ch); }; extern void *samsung_dmadev_get_ops(void); extern void *s3c_dma_get_ops(void); static inline void *__samsung_dma_get_ops(void) { if (samsung_dma_is_dmadev()) return samsung_dmadev_get_ops(); else return s3c_dma_get_ops(); } /* * samsung_dma_get_ops * get the set of samsung dma operations */ #define samsung_dma_get_ops() __samsung_dma_get_ops() #endif /* __SAMSUNG_DMA_OPS_H_ */