diff options
Diffstat (limited to 'include/linux/iommu.h')
| -rw-r--r-- | include/linux/iommu.h | 30 | 
1 files changed, 29 insertions, 1 deletions
diff --git a/include/linux/iommu.h b/include/linux/iommu.h index f3b99e1c104..ba3b8a98a04 100644 --- a/include/linux/iommu.h +++ b/include/linux/iommu.h @@ -58,8 +58,10 @@ struct iommu_domain {  #define IOMMU_CAP_INTR_REMAP		0x2	/* isolates device intrs */  enum iommu_attr { -	DOMAIN_ATTR_MAX,  	DOMAIN_ATTR_GEOMETRY, +	DOMAIN_ATTR_PAGING, +	DOMAIN_ATTR_WINDOWS, +	DOMAIN_ATTR_MAX,  };  #ifdef CONFIG_IOMMU_API @@ -100,6 +102,16 @@ struct iommu_ops {  			       enum iommu_attr attr, void *data);  	int (*domain_set_attr)(struct iommu_domain *domain,  			       enum iommu_attr attr, void *data); + +	/* Window handling functions */ +	int (*domain_window_enable)(struct iommu_domain *domain, u32 wnd_nr, +				    phys_addr_t paddr, u64 size); +	void (*domain_window_disable)(struct iommu_domain *domain, u32 wnd_nr); +	/* Set the numer of window per domain */ +	int (*domain_set_windows)(struct iommu_domain *domain, u32 w_count); +	/* Get the numer of window per domain */ +	u32 (*domain_get_windows)(struct iommu_domain *domain); +  	unsigned long pgsize_bitmap;  }; @@ -157,6 +169,10 @@ extern int iommu_domain_get_attr(struct iommu_domain *domain, enum iommu_attr,  extern int iommu_domain_set_attr(struct iommu_domain *domain, enum iommu_attr,  				 void *data); +/* Window handling function prototypes */ +extern int iommu_domain_window_enable(struct iommu_domain *domain, u32 wnd_nr, +				      phys_addr_t offset, u64 size); +extern void iommu_domain_window_disable(struct iommu_domain *domain, u32 wnd_nr);  /**   * report_iommu_fault() - report about an IOMMU fault to the IOMMU framework   * @domain: the iommu domain where the fault has happened @@ -239,6 +255,18 @@ static inline int iommu_unmap(struct iommu_domain *domain, unsigned long iova,  	return -ENODEV;  } +static inline int iommu_domain_window_enable(struct iommu_domain *domain, +					     u32 wnd_nr, phys_addr_t paddr, +					     u64 size) +{ +	return -ENODEV; +} + +static inline void iommu_domain_window_disable(struct iommu_domain *domain, +					       u32 wnd_nr) +{ +} +  static inline phys_addr_t iommu_iova_to_phys(struct iommu_domain *domain,  					     unsigned long iova)  {  |