dma: Introduce dma_get_cfg() interface
Sometimes, there would be a need to exchange data between DMA provider and DMA client which are very specific to DMA driver of the SoC/platform and are not generic enough to be put into struct dma. Therefore, introduce dma_get_cfg() interface to get DMA provider specific data from client device. Clients can use unique configuration ID flags to get different configuration data from DMA driver. Signed-off-by: Vignesh Raghavendra <vigneshr@ti.com> Acked-by: Joe Hershberger <joe.hershberger@ni.com> Reviewed-by: Grygorii Strashko <grygorii.strashko@ti.com>
This commit is contained in:
		
							parent
							
								
									08b3e90a01
								
							
						
					
					
						commit
						b8a4dd28f3
					
				| 
						 | 
					@ -187,6 +187,18 @@ int dma_send(struct dma *dma, void *src, size_t len, void *metadata)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return ops->send(dma, src, len, metadata);
 | 
						return ops->send(dma, src, len, metadata);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int dma_get_cfg(struct dma *dma, u32 cfg_id, void **cfg_data)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						struct dma_ops *ops = dma_dev_ops(dma->dev);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						debug("%s(dma=%p)\n", __func__, dma);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (!ops->get_cfg)
 | 
				
			||||||
 | 
							return -ENOSYS;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return ops->get_cfg(dma, cfg_id, cfg_data);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
#endif /* CONFIG_DMA_CHANNELS */
 | 
					#endif /* CONFIG_DMA_CHANNELS */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int dma_get_device(u32 transfer_type, struct udevice **devp)
 | 
					int dma_get_device(u32 transfer_type, struct udevice **devp)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -108,6 +108,17 @@ struct dma_ops {
 | 
				
			||||||
	 * @return zero on success, or -ve error code.
 | 
						 * @return zero on success, or -ve error code.
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	int (*send)(struct dma *dma, void *src, size_t len, void *metadata);
 | 
						int (*send)(struct dma *dma, void *src, size_t len, void *metadata);
 | 
				
			||||||
 | 
						/**
 | 
				
			||||||
 | 
						 * get_cfg() - Get DMA channel configuration for client's use
 | 
				
			||||||
 | 
						 *
 | 
				
			||||||
 | 
						 * @dma:    The DMA Channel to manipulate
 | 
				
			||||||
 | 
						 * @cfg_id: DMA provider specific ID to identify what
 | 
				
			||||||
 | 
						 *          configuration data client needs
 | 
				
			||||||
 | 
						 * @data:   Pointer to store pointer to DMA driver specific
 | 
				
			||||||
 | 
						 *          configuration data for the given cfg_id (output param)
 | 
				
			||||||
 | 
						 * @return zero on success, or -ve error code.
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						int (*get_cfg)(struct dma *dma, u32 cfg_id, void **data);
 | 
				
			||||||
#endif /* CONFIG_DMA_CHANNELS */
 | 
					#endif /* CONFIG_DMA_CHANNELS */
 | 
				
			||||||
	/**
 | 
						/**
 | 
				
			||||||
	 * transfer() - Issue a DMA transfer. The implementation must
 | 
						 * transfer() - Issue a DMA transfer. The implementation must
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -290,6 +290,18 @@ int dma_receive(struct dma *dma, void **dst, void *metadata);
 | 
				
			||||||
 * @return zero on success, or -ve error code.
 | 
					 * @return zero on success, or -ve error code.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
int dma_send(struct dma *dma, void *src, size_t len, void *metadata);
 | 
					int dma_send(struct dma *dma, void *src, size_t len, void *metadata);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * dma_get_cfg() - Get DMA channel configuration for client's use
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * @dma:      The DMA Channel to manipulate
 | 
				
			||||||
 | 
					 * @cfg_id:   DMA provider specific ID to identify what
 | 
				
			||||||
 | 
					 *            configuration data client needs
 | 
				
			||||||
 | 
					 * @cfg_data: Pointer to store pointer to DMA driver specific
 | 
				
			||||||
 | 
					 *            configuration data for the given cfg_id (output param)
 | 
				
			||||||
 | 
					 * @return zero on success, or -ve error code.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					int dma_get_cfg(struct dma *dma, u32 cfg_id, void **cfg_data);
 | 
				
			||||||
#endif /* CONFIG_DMA_CHANNELS */
 | 
					#endif /* CONFIG_DMA_CHANNELS */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue