Blame view

include/dma.h 2.12 KB
d41ce506b   Eric Lee   Initial Release, ...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
  /*
   * (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_ */