aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/iommu
diff options
context:
space:
mode:
authorJoerg Roedel <joerg.roedel@amd.com>2011-08-26 10:48:26 -0400
committerJoerg Roedel <joerg.roedel@amd.com>2011-10-21 08:37:19 -0400
commitff21776d12ff7993a6b236b8273ef62777d25dfb (patch)
treee4775ee5c1f5f5e7e6975c0887766a3b886c1258 /drivers/iommu
parent39d4ebb95925046863dc0ef2698dfcf2c1f1dcbe (diff)
Driver core: Add iommu_ops to bus_type
This is the starting point to make the iommu_ops used for the iommu-api a per-bus-type structure. It is required to easily implement bus-specific setup in the iommu-layer. The first user will be the iommu-group attribute in sysfs. Acked-by: Greg Kroah-Hartman <gregkh@suse.de> Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
Diffstat (limited to 'drivers/iommu')
-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;