diff options
Diffstat (limited to 'include/linux/dma-mapping-fast.h')
-rw-r--r-- | include/linux/dma-mapping-fast.h | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/include/linux/dma-mapping-fast.h b/include/linux/dma-mapping-fast.h new file mode 100644 index 000000000000..560f04736c1d --- /dev/null +++ b/include/linux/dma-mapping-fast.h @@ -0,0 +1,61 @@ +/* Copyright (c) 2016, The Linux Foundation. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 and + * only version 2 as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#ifndef __LINUX_DMA_MAPPING_FAST_H +#define __LINUX_DMA_MAPPING_FAST_H + +#include <linux/iommu.h> +#include <linux/io-pgtable-fast.h> + +struct dma_iommu_mapping; + +struct dma_fast_smmu_mapping { + struct device *dev; + struct iommu_domain *domain; + dma_addr_t base; + size_t size; + size_t num_4k_pages; + + unsigned int bitmap_size; + unsigned long *bitmap; + unsigned long next_start; + unsigned long upcoming_stale_bit; + bool have_stale_tlbs; + + dma_addr_t pgtbl_dma_handle; + av8l_fast_iopte *pgtbl_pmds; + + spinlock_t lock; + struct notifier_block notifier; + + int is_smmu_pt_coherent; +}; + +#ifdef CONFIG_IOMMU_IO_PGTABLE_FAST +int fast_smmu_attach_device(struct device *dev, + struct dma_iommu_mapping *mapping); +void fast_smmu_detach_device(struct device *dev, + struct dma_iommu_mapping *mapping); +#else +static inline int fast_smmu_attach_device(struct device *dev, + struct dma_iommu_mapping *mapping) +{ + return -ENODEV; +} + +static inline void fast_smmu_detach_device(struct device *dev, + struct dma_iommu_mapping *mapping) +{ +} +#endif + +#endif /* __LINUX_DMA_MAPPING_FAST_H */ |