94 lines · c
1/* SPDX-License-Identifier: GPL-2.0 */2/*3 * OF helpers for DMA request / controller4 *5 * Based on of_gpio.h6 *7 * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/8 */9 10#ifndef __LINUX_OF_DMA_H11#define __LINUX_OF_DMA_H12 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_OF35extern 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_free46 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#else55static 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_free76 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 NULL90 91#endif92 93#endif /* __LINUX_OF_DMA_H */94