diff options
author | Joerg Roedel <joerg.roedel@amd.com> | 2011-08-26 10:48:26 -0400 |
---|---|---|
committer | Joerg Roedel <joerg.roedel@amd.com> | 2011-10-21 08:37:19 -0400 |
commit | ff21776d12ff7993a6b236b8273ef62777d25dfb (patch) | |
tree | e4775ee5c1f5f5e7e6975c0887766a3b886c1258 /drivers | |
parent | 39d4ebb95925046863dc0ef2698dfcf2c1f1dcbe (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')
-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; |