mirror of
				https://github.com/smaeul/u-boot.git
				synced 2025-10-31 12:08:19 +00:00 
			
		
		
		
	Implement a DMA uclass so that the devices like ethernet, spi, mmc etc can offload the data transfers from/to the device and memory. Signed-off-by: Mugunthan V N <mugunthanvnm@ti.com> Reviewed-by: Simon Glass <sjg@chromium.org> Reviewed-by: Jagan Teki <jteki@openedev.com>
		
			
				
	
	
		
			87 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			87 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  * (C) Copyright 2015
 | |
|  *     Texas Instruments Incorporated, <www.ti.com>
 | |
|  *
 | |
|  * SPDX-License-Identifier:     GPL-2.0+
 | |
|  */
 | |
| 
 | |
| #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_ */
 |