#ifndef _IOMMU_H #define _IOMMU_H 1 #include 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 */