Commit | Line | Data |
---|---|---|
9b8eeab0 CH |
1 | #ifndef _IOMMU_H |
2 | #define _IOMMU_H 1 | |
3 | ||
4 | #include <linux/pci.h> | |
5 | ||
6 | struct parisc_device; | |
7 | struct ioc; | |
8 | ||
cb0f7ab4 | 9 | static inline struct pci_hba_data *parisc_walk_tree(struct device *dev) |
9b8eeab0 CH |
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 | ||
25c9dbe8 CH |
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 | } | |
9b8eeab0 CH |
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 */ |