uboot/include/dma.h
<<
>>
Prefs
   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