forked from mirrors/linux
		
	Arm already returns (~(dma_addr_t)0x0) on mapping failures, so we can switch over to returning DMA_MAPPING_ERROR and let the core dma-mapping code handle the rest. Signed-off-by: Christoph Hellwig <hch@lst.de> Acked-by: Russell King <rmk+kernel@armlinux.org.uk> Acked-by: Linus Torvalds <torvalds@linux-foundation.org>
		
			
				
	
	
		
			39 lines
		
	
	
	
		
			991 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			39 lines
		
	
	
	
		
			991 B
		
	
	
	
		
			C
		
	
	
	
	
	
/* SPDX-License-Identifier: GPL-2.0 */
 | 
						|
#ifndef ASMARM_DMA_IOMMU_H
 | 
						|
#define ASMARM_DMA_IOMMU_H
 | 
						|
 | 
						|
#ifdef __KERNEL__
 | 
						|
 | 
						|
#include <linux/mm_types.h>
 | 
						|
#include <linux/scatterlist.h>
 | 
						|
#include <linux/dma-debug.h>
 | 
						|
#include <linux/kref.h>
 | 
						|
 | 
						|
struct dma_iommu_mapping {
 | 
						|
	/* iommu specific data */
 | 
						|
	struct iommu_domain	*domain;
 | 
						|
 | 
						|
	unsigned long		**bitmaps;	/* array of bitmaps */
 | 
						|
	unsigned int		nr_bitmaps;	/* nr of elements in array */
 | 
						|
	unsigned int		extensions;
 | 
						|
	size_t			bitmap_size;	/* size of a single bitmap */
 | 
						|
	size_t			bits;		/* per bitmap */
 | 
						|
	dma_addr_t		base;
 | 
						|
 | 
						|
	spinlock_t		lock;
 | 
						|
	struct kref		kref;
 | 
						|
};
 | 
						|
 | 
						|
struct dma_iommu_mapping *
 | 
						|
arm_iommu_create_mapping(struct bus_type *bus, dma_addr_t base, u64 size);
 | 
						|
 | 
						|
void arm_iommu_release_mapping(struct dma_iommu_mapping *mapping);
 | 
						|
 | 
						|
int arm_iommu_attach_device(struct device *dev,
 | 
						|
					struct dma_iommu_mapping *mapping);
 | 
						|
void arm_iommu_detach_device(struct device *dev);
 | 
						|
 | 
						|
int arm_dma_supported(struct device *dev, u64 mask);
 | 
						|
 | 
						|
#endif /* __KERNEL__ */
 | 
						|
#endif
 |