1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-or-later */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * S3C24XX DMA handling 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * Copyright (c) 2013 Heiko Stuebner <heiko@sntech.de> 6*4882a593Smuzhiyun */ 7*4882a593Smuzhiyun 8*4882a593Smuzhiyun /* Helper to encode the source selection constraints for early s3c socs. */ 9*4882a593Smuzhiyun #define S3C24XX_DMA_CHANREQ(src, chan) ((BIT(3) | src) << chan * 4) 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun enum s3c24xx_dma_bus { 12*4882a593Smuzhiyun S3C24XX_DMA_APB, 13*4882a593Smuzhiyun S3C24XX_DMA_AHB, 14*4882a593Smuzhiyun }; 15*4882a593Smuzhiyun 16*4882a593Smuzhiyun /** 17*4882a593Smuzhiyun * @bus: on which bus does the peripheral reside - AHB or APB. 18*4882a593Smuzhiyun * @handshake: is a handshake with the peripheral necessary 19*4882a593Smuzhiyun * @chansel: channel selection information, depending on variant; reqsel for 20*4882a593Smuzhiyun * s3c2443 and later and channel-selection map for earlier SoCs 21*4882a593Smuzhiyun * see CHANSEL doc in s3c2443-dma.c 22*4882a593Smuzhiyun */ 23*4882a593Smuzhiyun struct s3c24xx_dma_channel { 24*4882a593Smuzhiyun enum s3c24xx_dma_bus bus; 25*4882a593Smuzhiyun bool handshake; 26*4882a593Smuzhiyun u16 chansel; 27*4882a593Smuzhiyun }; 28*4882a593Smuzhiyun 29*4882a593Smuzhiyun struct dma_slave_map; 30*4882a593Smuzhiyun 31*4882a593Smuzhiyun /** 32*4882a593Smuzhiyun * struct s3c24xx_dma_platdata - platform specific settings 33*4882a593Smuzhiyun * @num_phy_channels: number of physical channels 34*4882a593Smuzhiyun * @channels: array of virtual channel descriptions 35*4882a593Smuzhiyun * @num_channels: number of virtual channels 36*4882a593Smuzhiyun * @slave_map: dma slave map matching table 37*4882a593Smuzhiyun * @slavecnt: number of elements in slave_map 38*4882a593Smuzhiyun */ 39*4882a593Smuzhiyun struct s3c24xx_dma_platdata { 40*4882a593Smuzhiyun int num_phy_channels; 41*4882a593Smuzhiyun struct s3c24xx_dma_channel *channels; 42*4882a593Smuzhiyun int num_channels; 43*4882a593Smuzhiyun const struct dma_slave_map *slave_map; 44*4882a593Smuzhiyun int slavecnt; 45*4882a593Smuzhiyun }; 46*4882a593Smuzhiyun 47*4882a593Smuzhiyun struct dma_chan; 48*4882a593Smuzhiyun bool s3c24xx_dma_filter(struct dma_chan *chan, void *param); 49