iommu.h (1406B)
1#ifndef _IOMMU_H 2#define _IOMMU_H 1 3 4#include <linux/pci.h> 5 6struct parisc_device; 7struct ioc; 8 9static inline struct pci_hba_data *parisc_walk_tree(struct device *dev) 10{ 11 struct device *otherdev; 12 13 if (likely(dev->platform_data)) 14 return dev->platform_data; 15 16 /* OK, just traverse the bus to find it */ 17 for (otherdev = dev->parent; 18 otherdev; 19 otherdev = otherdev->parent) { 20 if (otherdev->platform_data) { 21 dev->platform_data = otherdev->platform_data; 22 break; 23 } 24 } 25 26 return dev->platform_data; 27} 28 29static inline struct ioc *GET_IOC(struct device *dev) 30{ 31 struct pci_hba_data *pdata = parisc_walk_tree(dev); 32 33 if (!pdata) 34 return NULL; 35 return pdata->iommu; 36} 37 38#ifdef CONFIG_IOMMU_CCIO 39void *ccio_get_iommu(const struct parisc_device *dev); 40int ccio_request_resource(const struct parisc_device *dev, 41 struct resource *res); 42int ccio_allocate_resource(const struct parisc_device *dev, 43 struct resource *res, unsigned long size, 44 unsigned long min, unsigned long max, unsigned long align); 45#else /* !CONFIG_IOMMU_CCIO */ 46#define ccio_get_iommu(dev) NULL 47#define ccio_request_resource(dev, res) insert_resource(&iomem_resource, res) 48#define ccio_allocate_resource(dev, res, size, min, max, align) \ 49 allocate_resource(&iomem_resource, res, size, min, max, \ 50 align, NULL, NULL) 51#endif /* !CONFIG_IOMMU_CCIO */ 52 53void *sba_get_iommu(struct parisc_device *dev); 54 55#endif /* _IOMMU_H */