1 #ifndef _IOMMU_H 2 #define _IOMMU_H 1 3 4 #include <linux/pci.h> 5 6 struct parisc_device; 7 struct ioc; 8 9 static 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 29 static 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 39 void *ccio_get_iommu(const struct parisc_device *dev); 40 int ccio_request_resource(const struct parisc_device *dev, 41 struct resource *res); 42 int 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 53 void *sba_get_iommu(struct parisc_device *dev); 54 55 #endif /* _IOMMU_H */ 56