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/linux | |
| 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/linux')
| -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); |
