aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/iommu/iommu.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/iommu/iommu.c')
-rw-r--r--drivers/iommu/iommu.c31
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
37static 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 */
54int 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}
66EXPORT_SYMBOL_GPL(bus_set_iommu);
67
37bool iommu_found(void) 68bool iommu_found(void)
38{ 69{
39 return iommu_ops != NULL; 70 return iommu_ops != NULL;