| /* SPDX-License-Identifier: GPL-2.0+ */ | 
 | /* | 
 |  * (C) Copyright 2015 | 
 |  *     Texas Instruments Incorporated, <www.ti.com> | 
 |  */ | 
 |  | 
 | #ifndef _DMA_H_ | 
 | #define _DMA_H_ | 
 |  | 
 | /* | 
 |  * enum dma_direction - dma transfer direction indicator | 
 |  * @DMA_MEM_TO_MEM: Memcpy mode | 
 |  * @DMA_MEM_TO_DEV: From Memory to Device | 
 |  * @DMA_DEV_TO_MEM: From Device to Memory | 
 |  * @DMA_DEV_TO_DEV: From Device to Device | 
 |  */ | 
 | enum dma_direction { | 
 | 	DMA_MEM_TO_MEM, | 
 | 	DMA_MEM_TO_DEV, | 
 | 	DMA_DEV_TO_MEM, | 
 | 	DMA_DEV_TO_DEV, | 
 | }; | 
 |  | 
 | #define DMA_SUPPORTS_MEM_TO_MEM	BIT(0) | 
 | #define DMA_SUPPORTS_MEM_TO_DEV	BIT(1) | 
 | #define DMA_SUPPORTS_DEV_TO_MEM	BIT(2) | 
 | #define DMA_SUPPORTS_DEV_TO_DEV	BIT(3) | 
 |  | 
 | /* | 
 |  * struct dma_ops - Driver model DMA operations | 
 |  * | 
 |  * The uclass interface is implemented by all DMA devices which use | 
 |  * driver model. | 
 |  */ | 
 | struct dma_ops { | 
 | 	/* | 
 | 	 * Get the current timer count | 
 | 	 * | 
 | 	 * @dev: The DMA device | 
 | 	 * @direction: direction of data transfer should be one from | 
 | 		       enum dma_direction | 
 | 	 * @dst: Destination pointer | 
 | 	 * @src: Source pointer | 
 | 	 * @len: Length of the data to be copied. | 
 | 	 * @return: 0 if OK, -ve on error | 
 | 	 */ | 
 | 	int (*transfer)(struct udevice *dev, int direction, void *dst, | 
 | 			void *src, size_t len); | 
 | }; | 
 |  | 
 | /* | 
 |  * struct dma_dev_priv - information about a device used by the uclass | 
 |  * | 
 |  * @supported: mode of transfers that DMA can support, should be | 
 |  *	       one/multiple of DMA_SUPPORTS_* | 
 |  */ | 
 | struct dma_dev_priv { | 
 | 	u32 supported; | 
 | }; | 
 |  | 
 | /* | 
 |  * dma_get_device - get a DMA device which supports transfer | 
 |  * type of transfer_type | 
 |  * | 
 |  * @transfer_type - transfer type should be one/multiple of | 
 |  *		    DMA_SUPPORTS_* | 
 |  * @devp - udevice pointer to return the found device | 
 |  * @return - will return on success and devp will hold the | 
 |  *	     pointer to the device | 
 |  */ | 
 | int dma_get_device(u32 transfer_type, struct udevice **devp); | 
 |  | 
 | /* | 
 |  * dma_memcpy - try to use DMA to do a mem copy which will be | 
 |  *		much faster than CPU mem copy | 
 |  * | 
 |  * @dst - destination pointer | 
 |  * @src - souce pointer | 
 |  * @len - data length to be copied | 
 |  * @return - on successful transfer returns no of bytes | 
 | 	     transferred and on failure return error code. | 
 |  */ | 
 | int dma_memcpy(void *dst, void *src, size_t len); | 
 |  | 
 | #endif	/* _DMA_H_ */ |