mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	Signed-off-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Helge Deller <deller@gmx.de>
		
			
				
	
	
		
			55 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			55 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
#ifndef _IOMMU_H
 | 
						|
#define _IOMMU_H 1
 | 
						|
 | 
						|
#include <linux/pci.h>
 | 
						|
 | 
						|
struct parisc_device;
 | 
						|
struct ioc;
 | 
						|
 | 
						|
static inline struct pci_hba_data *parisc_walk_tree(struct device *dev)
 | 
						|
{
 | 
						|
	struct device *otherdev;
 | 
						|
 | 
						|
	if (likely(dev->platform_data))
 | 
						|
		return dev->platform_data;
 | 
						|
 | 
						|
	/* OK, just traverse the bus to find it */
 | 
						|
	for (otherdev = dev->parent;
 | 
						|
	     otherdev;
 | 
						|
	     otherdev = otherdev->parent) {
 | 
						|
		if (otherdev->platform_data) {
 | 
						|
			dev->platform_data = otherdev->platform_data;
 | 
						|
			break;
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	return dev->platform_data;
 | 
						|
}
 | 
						|
 | 
						|
static inline struct ioc *GET_IOC(struct device *dev)
 | 
						|
{
 | 
						|
	struct pci_hba_data *pdata = parisc_walk_tree(dev);
 | 
						|
 | 
						|
	if (!pdata)
 | 
						|
		return NULL;
 | 
						|
	return pdata->iommu;
 | 
						|
}
 | 
						|
 | 
						|
#ifdef CONFIG_IOMMU_CCIO
 | 
						|
void *ccio_get_iommu(const struct parisc_device *dev);
 | 
						|
int ccio_request_resource(const struct parisc_device *dev,
 | 
						|
		struct resource *res);
 | 
						|
int ccio_allocate_resource(const struct parisc_device *dev,
 | 
						|
		struct resource *res, unsigned long size,
 | 
						|
		unsigned long min, unsigned long max, unsigned long align);
 | 
						|
#else /* !CONFIG_IOMMU_CCIO */
 | 
						|
#define ccio_get_iommu(dev) NULL
 | 
						|
#define ccio_request_resource(dev, res) insert_resource(&iomem_resource, res)
 | 
						|
#define ccio_allocate_resource(dev, res, size, min, max, align) \
 | 
						|
		allocate_resource(&iomem_resource, res, size, min, max, \
 | 
						|
				align, NULL, NULL)
 | 
						|
#endif /* !CONFIG_IOMMU_CCIO */
 | 
						|
 | 
						|
void *sba_get_iommu(struct parisc_device *dev);
 | 
						|
 | 
						|
#endif /* _IOMMU_H */
 |