linux/include/linux/dma-iommu.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0-only */
   2/*
   3 * Copyright (C) 2014-2015 ARM Ltd.
   4 */
   5#ifndef __DMA_IOMMU_H
   6#define __DMA_IOMMU_H
   7
   8#include <linux/errno.h>
   9#include <linux/types.h>
  10
  11#ifdef CONFIG_IOMMU_DMA
  12#include <linux/dma-mapping.h>
  13#include <linux/iommu.h>
  14#include <linux/msi.h>
  15
  16/* Domain management interface for IOMMU drivers */
  17int iommu_get_dma_cookie(struct iommu_domain *domain);
  18int iommu_get_msi_cookie(struct iommu_domain *domain, dma_addr_t base);
  19void iommu_put_dma_cookie(struct iommu_domain *domain);
  20
  21/* Setup call for arch DMA mapping code */
  22void iommu_setup_dma_ops(struct device *dev, u64 dma_base, u64 dma_limit);
  23int iommu_dma_init_fq(struct iommu_domain *domain);
  24
  25/* The DMA API isn't _quite_ the whole story, though... */
  26/*
  27 * iommu_dma_prepare_msi() - Map the MSI page in the IOMMU device
  28 *
  29 * The MSI page will be stored in @desc.
  30 *
  31 * Return: 0 on success otherwise an error describing the failure.
  32 */
  33int iommu_dma_prepare_msi(struct msi_desc *desc, phys_addr_t msi_addr);
  34
  35/* Update the MSI message if required. */
  36void iommu_dma_compose_msi_msg(struct msi_desc *desc,
  37                               struct msi_msg *msg);
  38
  39void iommu_dma_get_resv_regions(struct device *dev, struct list_head *list);
  40
  41void iommu_dma_free_cpu_cached_iovas(unsigned int cpu,
  42                struct iommu_domain *domain);
  43
  44extern bool iommu_dma_forcedac;
  45
  46#else /* CONFIG_IOMMU_DMA */
  47
  48struct iommu_domain;
  49struct msi_desc;
  50struct msi_msg;
  51struct device;
  52
  53static inline void iommu_setup_dma_ops(struct device *dev, u64 dma_base,
  54                                       u64 dma_limit)
  55{
  56}
  57
  58static inline int iommu_dma_init_fq(struct iommu_domain *domain)
  59{
  60        return -EINVAL;
  61}
  62
  63static inline int iommu_get_dma_cookie(struct iommu_domain *domain)
  64{
  65        return -ENODEV;
  66}
  67
  68static inline int iommu_get_msi_cookie(struct iommu_domain *domain, dma_addr_t base)
  69{
  70        return -ENODEV;
  71}
  72
  73static inline void iommu_put_dma_cookie(struct iommu_domain *domain)
  74{
  75}
  76
  77static inline int iommu_dma_prepare_msi(struct msi_desc *desc,
  78                                        phys_addr_t msi_addr)
  79{
  80        return 0;
  81}
  82
  83static inline void iommu_dma_compose_msi_msg(struct msi_desc *desc,
  84                                             struct msi_msg *msg)
  85{
  86}
  87
  88static inline void iommu_dma_get_resv_regions(struct device *dev, struct list_head *list)
  89{
  90}
  91
  92#endif  /* CONFIG_IOMMU_DMA */
  93#endif  /* __DMA_IOMMU_H */
  94