xref: /openbmc/u-boot/include/dma.h (revision 779653b0)
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