iommu/dma: Don't touch invalid iova_domain members
[linux-block.git] / drivers / iommu / omap-iommu.h
index 59628e5017b4944381065993a7aa64e54f28c0b4..6e70515e60385bfdadb520242107d045f8e82ec4 100644 (file)
@@ -14,6 +14,7 @@
 #define _OMAP_IOMMU_H
 
 #include <linux/bitops.h>
+#include <linux/iommu.h>
 
 #define for_each_iotlb_cr(obj, n, __i, cr)                             \
        for (__i = 0;                                                   \
@@ -27,6 +28,23 @@ struct iotlb_entry {
        u32 endian, elsz, mixed;
 };
 
+/**
+ * struct omap_iommu_domain - omap iommu domain
+ * @pgtable:   the page table
+ * @iommu_dev: an omap iommu device attached to this domain. only a single
+ *             iommu device can be attached for now.
+ * @dev:       Device using this domain.
+ * @lock:      domain lock, should be taken when attaching/detaching
+ * @domain:    generic domain handle used by iommu core code
+ */
+struct omap_iommu_domain {
+       u32 *pgtable;
+       struct omap_iommu *iommu_dev;
+       struct device *dev;
+       spinlock_t lock;
+       struct iommu_domain domain;
+};
+
 struct omap_iommu {
        const char      *name;
        void __iomem    *regbase;
@@ -50,6 +68,22 @@ struct omap_iommu {
 
        int has_bus_err_back;
        u32 id;
+
+       struct iommu_device iommu;
+       struct iommu_group *group;
+};
+
+/**
+ * struct omap_iommu_arch_data - omap iommu private data
+ * @iommu_dev: handle of the iommu device
+ *
+ * This is an omap iommu private data object, which binds an iommu user
+ * to its iommu device. This object should be placed at the iommu user's
+ * dev_archdata so generic IOMMU API can be used without having to
+ * utilize omap-specific plumbing anymore.
+ */
+struct omap_iommu_arch_data {
+       struct omap_iommu *iommu_dev;
 };
 
 struct cr_regs {