xref: /openbmc/u-boot/include/dma.h (revision ed4708aa)
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  */
18 enum 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  */
36 struct 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  */
58 struct 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  */
72 int 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  */
84 int dma_memcpy(void *dst, void *src, size_t len);
85 
86 #endif	/* _DMA_H_ */
87