of_dma.h (2353B)
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 16struct device_node; 17 18struct 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 29struct of_dma_filter_info { 30 dma_cap_mask_t dma_cap; 31 dma_filter_fn filter_fn; 32}; 33 34#ifdef CONFIG_DMA_OF 35extern 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); 39extern void of_dma_controller_free(struct device_node *np); 40 41extern 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 47extern struct dma_chan *of_dma_request_slave_channel(struct device_node *np, 48 const char *name); 49extern struct dma_chan *of_dma_simple_xlate(struct of_phandle_args *dma_spec, 50 struct of_dma *ofdma); 51extern struct dma_chan *of_dma_xlate_by_chan_id(struct of_phandle_args *dma_spec, 52 struct of_dma *ofdma); 53 54#else 55static 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 63static inline void of_dma_controller_free(struct device_node *np) 64{ 65} 66 67static 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 77static inline struct dma_chan *of_dma_request_slave_channel(struct device_node *np, 78 const char *name) 79{ 80 return ERR_PTR(-ENODEV); 81} 82 83static 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 */