|
@@ -0,0 +1,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_ */
|