diff options
Diffstat (limited to 'drivers/iommu/iommu.c')
-rw-r--r-- | drivers/iommu/iommu.c | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c index 30b064497486..3343264f5105 100644 --- a/drivers/iommu/iommu.c +++ b/drivers/iommu/iommu.c | |||
@@ -34,6 +34,37 @@ void register_iommu(struct iommu_ops *ops) | |||
34 | iommu_ops = ops; | 34 | iommu_ops = ops; |
35 | } | 35 | } |
36 | 36 | ||
37 | static void iommu_bus_init(struct bus_type *bus, struct iommu_ops *ops) | ||
38 | { | ||
39 | } | ||
40 | |||
41 | /** | ||
42 | * bus_set_iommu - set iommu-callbacks for the bus | ||
43 | * @bus: bus. | ||
44 | * @ops: the callbacks provided by the iommu-driver | ||
45 | * | ||
46 | * This function is called by an iommu driver to set the iommu methods | ||
47 | * used for a particular bus. Drivers for devices on that bus can use | ||
48 | * the iommu-api after these ops are registered. | ||
49 | * This special function is needed because IOMMUs are usually devices on | ||
50 | * the bus itself, so the iommu drivers are not initialized when the bus | ||
51 | * is set up. With this function the iommu-driver can set the iommu-ops | ||
52 | * afterwards. | ||
53 | */ | ||
54 | int bus_set_iommu(struct bus_type *bus, struct iommu_ops *ops) | ||
55 | { | ||
56 | if (bus->iommu_ops != NULL) | ||
57 | return -EBUSY; | ||
58 | |||
59 | bus->iommu_ops = ops; | ||
60 | |||
61 | /* Do IOMMU specific setup for this bus-type */ | ||
62 | iommu_bus_init(bus, ops); | ||
63 | |||
64 | return 0; | ||
65 | } | ||
66 | EXPORT_SYMBOL_GPL(bus_set_iommu); | ||
67 | |||
37 | bool iommu_found(void) | 68 | bool iommu_found(void) |
38 | { | 69 | { |
39 | return iommu_ops != NULL; | 70 | return iommu_ops != NULL; |