/* * S3C24XX DMA handling * * Copyright (c) 2013 Heiko Stuebner <heiko@sntech.de> * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free * Software Foundation; either version 2 of the License, or (at your option) * any later version. */ /* Helper to encode the source selection constraints for early s3c socs. */ #define S3C24XX_DMA_CHANREQ(src, chan) ((BIT(3) | src) << chan * 4) enum s3c24xx_dma_bus { S3C24XX_DMA_APB, S3C24XX_DMA_AHB, }; /** * @bus: on which bus does the peripheral reside - AHB or APB. * @handshake: is a handshake with the peripheral necessary * @chansel: channel selection information, depending on variant; reqsel for * s3c2443 and later and channel-selection map for earlier SoCs * see CHANSEL doc in s3c2443-dma.c */ struct s3c24xx_dma_channel { enum s3c24xx_dma_bus bus; bool handshake; u16 chansel; }; struct dma_slave_map; /** * struct s3c24xx_dma_platdata - platform specific settings * @num_phy_channels: number of physical channels * @channels: array of virtual channel descriptions * @num_channels: number of virtual channels * @slave_map: dma slave map matching table * @slavecnt: number of elements in slave_map */ struct s3c24xx_dma_platdata { int num_phy_channels; struct s3c24xx_dma_channel *channels; int num_channels; const struct dma_slave_map *slave_map; int slavecnt; }; struct dma_chan; bool s3c24xx_dma_filter(struct dma_chan *chan, void *param); |