56 lines · c
1#ifndef _IOMMU_H2#define _IOMMU_H 13 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_CCIO39void *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) NULL47#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 */56