|
@@ -28,6 +28,8 @@ struct iommu_domain {
|
|
void *priv;
|
|
void *priv;
|
|
};
|
|
};
|
|
|
|
|
|
|
|
+#define IOMMU_CAP_CACHE_COHERENCY 0x1
|
|
|
|
+
|
|
struct iommu_ops {
|
|
struct iommu_ops {
|
|
int (*domain_init)(struct iommu_domain *domain);
|
|
int (*domain_init)(struct iommu_domain *domain);
|
|
void (*domain_destroy)(struct iommu_domain *domain);
|
|
void (*domain_destroy)(struct iommu_domain *domain);
|
|
@@ -39,6 +41,8 @@ struct iommu_ops {
|
|
size_t size);
|
|
size_t size);
|
|
phys_addr_t (*iova_to_phys)(struct iommu_domain *domain,
|
|
phys_addr_t (*iova_to_phys)(struct iommu_domain *domain,
|
|
unsigned long iova);
|
|
unsigned long iova);
|
|
|
|
+ int (*domain_has_cap)(struct iommu_domain *domain,
|
|
|
|
+ unsigned long cap);
|
|
};
|
|
};
|
|
|
|
|
|
#ifdef CONFIG_IOMMU_API
|
|
#ifdef CONFIG_IOMMU_API
|
|
@@ -57,6 +61,8 @@ extern void iommu_unmap_range(struct iommu_domain *domain, unsigned long iova,
|
|
size_t size);
|
|
size_t size);
|
|
extern phys_addr_t iommu_iova_to_phys(struct iommu_domain *domain,
|
|
extern phys_addr_t iommu_iova_to_phys(struct iommu_domain *domain,
|
|
unsigned long iova);
|
|
unsigned long iova);
|
|
|
|
+extern int iommu_domain_has_cap(struct iommu_domain *domain,
|
|
|
|
+ unsigned long cap);
|
|
|
|
|
|
#else /* CONFIG_IOMMU_API */
|
|
#else /* CONFIG_IOMMU_API */
|
|
|
|
|
|
@@ -107,6 +113,12 @@ static inline phys_addr_t iommu_iova_to_phys(struct iommu_domain *domain,
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+static inline int domain_has_cap(struct iommu_domain *domain,
|
|
|
|
+ unsigned long cap)
|
|
|
|
+{
|
|
|
|
+ return 0;
|
|
|
|
+}
|
|
|
|
+
|
|
#endif /* CONFIG_IOMMU_API */
|
|
#endif /* CONFIG_IOMMU_API */
|
|
|
|
|
|
#endif /* __LINUX_IOMMU_H */
|
|
#endif /* __LINUX_IOMMU_H */
|