|
@@ -35,12 +35,13 @@ struct iommu_domain;
|
|
|
#define IOMMU_FAULT_WRITE 0x1
|
|
|
|
|
|
typedef int (*iommu_fault_handler_t)(struct iommu_domain *,
|
|
|
- struct device *, unsigned long, int);
|
|
|
+ struct device *, unsigned long, int, void *);
|
|
|
|
|
|
struct iommu_domain {
|
|
|
struct iommu_ops *ops;
|
|
|
void *priv;
|
|
|
iommu_fault_handler_t handler;
|
|
|
+ void *handler_token;
|
|
|
};
|
|
|
|
|
|
#define IOMMU_CAP_CACHE_COHERENCY 0x1
|
|
@@ -95,7 +96,7 @@ extern phys_addr_t iommu_iova_to_phys(struct iommu_domain *domain,
|
|
|
extern int iommu_domain_has_cap(struct iommu_domain *domain,
|
|
|
unsigned long cap);
|
|
|
extern void iommu_set_fault_handler(struct iommu_domain *domain,
|
|
|
- iommu_fault_handler_t handler);
|
|
|
+ iommu_fault_handler_t handler, void *token);
|
|
|
extern int iommu_device_group(struct device *dev, unsigned int *groupid);
|
|
|
|
|
|
/**
|
|
@@ -132,7 +133,8 @@ static inline int report_iommu_fault(struct iommu_domain *domain,
|
|
|
* invoke it.
|
|
|
*/
|
|
|
if (domain->handler)
|
|
|
- ret = domain->handler(domain, dev, iova, flags);
|
|
|
+ ret = domain->handler(domain, dev, iova, flags,
|
|
|
+ domain->handler_token);
|
|
|
|
|
|
return ret;
|
|
|
}
|
|
@@ -191,7 +193,7 @@ static inline int domain_has_cap(struct iommu_domain *domain,
|
|
|
}
|
|
|
|
|
|
static inline void iommu_set_fault_handler(struct iommu_domain *domain,
|
|
|
- iommu_fault_handler_t handler)
|
|
|
+ iommu_fault_handler_t handler, void *token)
|
|
|
{
|
|
|
}
|
|
|
|