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 /include | |
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 'include')
-rw-r--r-- | include/linux/device.h | 6 | ||||
-rw-r--r-- | include/linux/iommu.h | 2 |
2 files changed, 8 insertions, 0 deletions
diff --git a/include/linux/device.h b/include/linux/device.h index c20dfbfc49b4..e838e143baa7 100644 --- a/include/linux/device.h +++ b/include/linux/device.h | |||
@@ -33,6 +33,7 @@ struct class; | |||
33 | struct subsys_private; | 33 | struct subsys_private; |
34 | struct bus_type; | 34 | struct bus_type; |
35 | struct device_node; | 35 | struct device_node; |
36 | struct iommu_ops; | ||
36 | 37 | ||
37 | struct bus_attribute { | 38 | struct bus_attribute { |
38 | struct attribute attr; | 39 | struct attribute attr; |
@@ -67,6 +68,9 @@ extern void bus_remove_file(struct bus_type *, struct bus_attribute *); | |||
67 | * @resume: Called to bring a device on this bus out of sleep mode. | 68 | * @resume: Called to bring a device on this bus out of sleep mode. |
68 | * @pm: Power management operations of this bus, callback the specific | 69 | * @pm: Power management operations of this bus, callback the specific |
69 | * device driver's pm-ops. | 70 | * device driver's pm-ops. |
71 | * @iommu_ops IOMMU specific operations for this bus, used to attach IOMMU | ||
72 | * driver implementations to a bus and allow the driver to do | ||
73 | * bus-specific setup | ||
70 | * @p: The private data of the driver core, only the driver core can | 74 | * @p: The private data of the driver core, only the driver core can |
71 | * touch this. | 75 | * touch this. |
72 | * | 76 | * |
@@ -96,6 +100,8 @@ struct bus_type { | |||
96 | 100 | ||
97 | const struct dev_pm_ops *pm; | 101 | const struct dev_pm_ops *pm; |
98 | 102 | ||
103 | struct iommu_ops *iommu_ops; | ||
104 | |||
99 | struct subsys_private *p; | 105 | struct subsys_private *p; |
100 | }; | 106 | }; |
101 | 107 | ||
diff --git a/include/linux/iommu.h b/include/linux/iommu.h index 6470cd87b4ea..dca83d3405b1 100644 --- a/include/linux/iommu.h +++ b/include/linux/iommu.h | |||
@@ -25,6 +25,7 @@ | |||
25 | #define IOMMU_WRITE (2) | 25 | #define IOMMU_WRITE (2) |
26 | #define IOMMU_CACHE (4) /* DMA cache coherency */ | 26 | #define IOMMU_CACHE (4) /* DMA cache coherency */ |
27 | 27 | ||
28 | struct bus_type; | ||
28 | struct device; | 29 | struct device; |
29 | 30 | ||
30 | struct iommu_domain { | 31 | struct iommu_domain { |
@@ -52,6 +53,7 @@ struct iommu_ops { | |||
52 | }; | 53 | }; |
53 | 54 | ||
54 | extern void register_iommu(struct iommu_ops *ops); | 55 | extern void register_iommu(struct iommu_ops *ops); |
56 | extern int bus_set_iommu(struct bus_type *bus, struct iommu_ops *ops); | ||
55 | extern bool iommu_found(void); | 57 | extern bool iommu_found(void); |
56 | extern struct iommu_domain *iommu_domain_alloc(void); | 58 | extern struct iommu_domain *iommu_domain_alloc(void); |
57 | extern void iommu_domain_free(struct iommu_domain *domain); | 59 | extern void iommu_domain_free(struct iommu_domain *domain); |