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 size);
  23
  24/* The DMA API isn't _quite_ the whole story, though... */
  25/*
  26 * iommu_dma_prepare_msi() - Map the MSI page in the IOMMU device
  27 *
  28 * The MSI page will be stored in @desc.
  29 *
  30 * Return: 0 on success otherwise an error describing the failure.
  31 */
  32int iommu_dma_prepare_msi(struct msi_desc *desc, phys_addr_t msi_addr);
  33
  34/* Update the MSI message if required. */
  35void iommu_dma_compose_msi_msg(struct msi_desc *desc,
  36                               struct msi_msg *msg);
  37
  38void iommu_dma_get_resv_regions(struct device *dev, struct list_head *list);
  39
  40#else /* CONFIG_IOMMU_DMA */
  41
  42struct iommu_domain;
  43struct msi_desc;
  44struct msi_msg;
  45struct device;
  46
  47static inline void iommu_setup_dma_ops(struct device *dev, u64 dma_base,
  48                u64 size)
  49{
  50}
  51
  52static inline int iommu_get_dma_cookie(struct iommu_domain *domain)
  53{
  54        return -ENODEV;
  55}
  56
  57static inline int iommu_get_msi_cookie(struct iommu_domain *domain, dma_addr_t base)
  58{
  59        return -ENODEV;
  60}
  61
  62static inline void iommu_put_dma_cookie(struct iommu_domain *domain)
  63{
  64}
  65
  66static inline int iommu_dma_prepare_msi(struct msi_desc *desc,
  67                                        phys_addr_t msi_addr)
  68{
  69        return 0;
  70}
  71
  72static inline void iommu_dma_compose_msi_msg(struct msi_desc *desc,
  73                                             struct msi_msg *msg)
  74{
  75}
  76
  77static inline void iommu_dma_get_resv_regions(struct device *dev, struct list_head *list)
  78{
  79}
  80
  81#endif  /* CONFIG_IOMMU_DMA */
  82#endif  /* __DMA_IOMMU_H */
  83