1/* 2 * (C) Copyright 2015 3 * Texas Instruments Incorporated, <www.ti.com> 4 * 5 * SPDX-License-Identifier: GPL-2.0+ 6 */ 7 8#ifndef _DMA_H_ 9#define _DMA_H_ 10 11/* 12 * enum dma_direction - dma transfer direction indicator 13 * @DMA_MEM_TO_MEM: Memcpy mode 14 * @DMA_MEM_TO_DEV: From Memory to Device 15 * @DMA_DEV_TO_MEM: From Device to Memory 16 * @DMA_DEV_TO_DEV: From Device to Device 17 */ 18enum dma_direction { 19 DMA_MEM_TO_MEM, 20 DMA_MEM_TO_DEV, 21 DMA_DEV_TO_MEM, 22 DMA_DEV_TO_DEV, 23}; 24 25#define DMA_SUPPORTS_MEM_TO_MEM BIT(0) 26#define DMA_SUPPORTS_MEM_TO_DEV BIT(1) 27#define DMA_SUPPORTS_DEV_TO_MEM BIT(2) 28#define DMA_SUPPORTS_DEV_TO_DEV BIT(3) 29 30/* 31 * struct dma_ops - Driver model DMA operations 32 * 33 * The uclass interface is implemented by all DMA devices which use 34 * driver model. 35 */ 36struct dma_ops { 37 /* 38 * Get the current timer count 39 * 40 * @dev: The DMA device 41 * @direction: direction of data transfer should be one from 42 enum dma_direction 43 * @dst: Destination pointer 44 * @src: Source pointer 45 * @len: Length of the data to be copied. 46 * @return: 0 if OK, -ve on error 47 */ 48 int (*transfer)(struct udevice *dev, int direction, void *dst, 49 void *src, size_t len); 50}; 51 52/* 53 * struct dma_dev_priv - information about a device used by the uclass 54 * 55 * @supported: mode of transfers that DMA can support, should be 56 * one/multiple of DMA_SUPPORTS_* 57 */ 58struct dma_dev_priv { 59 u32 supported; 60}; 61 62/* 63 * dma_get_device - get a DMA device which supports transfer 64 * type of transfer_type 65 * 66 * @transfer_type - transfer type should be one/multiple of 67 * DMA_SUPPORTS_* 68 * @devp - udevice pointer to return the found device 69 * @return - will return on success and devp will hold the 70 * pointer to the device 71 */ 72int dma_get_device(u32 transfer_type, struct udevice **devp); 73 74/* 75 * dma_memcpy - try to use DMA to do a mem copy which will be 76 * much faster than CPU mem copy 77 * 78 * @dst - destination pointer 79 * @src - souce pointer 80 * @len - data length to be copied 81 * @return - on successful transfer returns no of bytes 82 transferred and on failure return error code. 83 */ 84int dma_memcpy(void *dst, void *src, size_t len); 85 86#endif /* _DMA_H_ */ 87