|
@@ -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;
|
|
@@ -52,6 +70,21 @@ struct omap_iommu {
|
|
|
u32 id;
|
|
|
};
|
|
|
|
|
|
+/**
|
|
|
+ * struct omap_iommu_arch_data - omap iommu private data
|
|
|
+ * @name: name of the iommu device
|
|
|
+ * @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 {
|
|
|
+ const char *name;
|
|
|
+ struct omap_iommu *iommu_dev;
|
|
|
+};
|
|
|
+
|
|
|
struct cr_regs {
|
|
|
u32 cam;
|
|
|
u32 ram;
|