Branch data Line data Source code
1 : : /* SPDX-License-Identifier: GPL-2.0 */ 2 : : /* 3 : : * OF helpers for DMA request / controller 4 : : * 5 : : * Based on of_gpio.h 6 : : * 7 : : * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/ 8 : : */ 9 : : 10 : : #ifndef __LINUX_OF_DMA_H 11 : : #define __LINUX_OF_DMA_H 12 : : 13 : : #include <linux/of.h> 14 : : #include <linux/dmaengine.h> 15 : : 16 : : struct device_node; 17 : : 18 : : struct of_dma { 19 : : struct list_head of_dma_controllers; 20 : : struct device_node *of_node; 21 : : struct dma_chan *(*of_dma_xlate) 22 : : (struct of_phandle_args *, struct of_dma *); 23 : : void *(*of_dma_route_allocate) 24 : : (struct of_phandle_args *, struct of_dma *); 25 : : struct dma_router *dma_router; 26 : : void *of_dma_data; 27 : : }; 28 : : 29 : : struct of_dma_filter_info { 30 : : dma_cap_mask_t dma_cap; 31 : : dma_filter_fn filter_fn; 32 : : }; 33 : : 34 : : #ifdef CONFIG_DMA_OF 35 : : extern int of_dma_controller_register(struct device_node *np, 36 : : struct dma_chan *(*of_dma_xlate) 37 : : (struct of_phandle_args *, struct of_dma *), 38 : : void *data); 39 : : extern void of_dma_controller_free(struct device_node *np); 40 : : 41 : : extern int of_dma_router_register(struct device_node *np, 42 : : void *(*of_dma_route_allocate) 43 : : (struct of_phandle_args *, struct of_dma *), 44 : : struct dma_router *dma_router); 45 : : #define of_dma_router_free of_dma_controller_free 46 : : 47 : : extern struct dma_chan *of_dma_request_slave_channel(struct device_node *np, 48 : : const char *name); 49 : : extern struct dma_chan *of_dma_simple_xlate(struct of_phandle_args *dma_spec, 50 : : struct of_dma *ofdma); 51 : : extern struct dma_chan *of_dma_xlate_by_chan_id(struct of_phandle_args *dma_spec, 52 : : struct of_dma *ofdma); 53 : : 54 : : #else 55 : : static inline int of_dma_controller_register(struct device_node *np, 56 : : struct dma_chan *(*of_dma_xlate) 57 : : (struct of_phandle_args *, struct of_dma *), 58 : : void *data) 59 : : { 60 : : return -ENODEV; 61 : : } 62 : : 63 : : static inline void of_dma_controller_free(struct device_node *np) 64 : : { 65 : : } 66 : : 67 : : static inline int of_dma_router_register(struct device_node *np, 68 : : void *(*of_dma_route_allocate) 69 : : (struct of_phandle_args *, struct of_dma *), 70 : : struct dma_router *dma_router) 71 : : { 72 : : return -ENODEV; 73 : : } 74 : : 75 : : #define of_dma_router_free of_dma_controller_free 76 : : 77 : 0 : static inline struct dma_chan *of_dma_request_slave_channel(struct device_node *np, 78 : : const char *name) 79 : : { 80 : 0 : return ERR_PTR(-ENODEV); 81 : : } 82 : : 83 : : static inline struct dma_chan *of_dma_simple_xlate(struct of_phandle_args *dma_spec, 84 : : struct of_dma *ofdma) 85 : : { 86 : : return NULL; 87 : : } 88 : : 89 : : #define of_dma_xlate_by_chan_id NULL 90 : : 91 : : #endif 92 : : 93 : : #endif /* __LINUX_OF_DMA_H */