blob: 71fa77f2ea8534d003b79617a50f7b724e434f19 [file] [log] [blame]
Mugunthan V Na0594ce2016-02-15 15:31:37 +05301/*
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_ */