linux/include/linux/of_dma.h
<<
>>
Prefs
   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 */
  94