diff options
Diffstat (limited to 'drivers/iommu/intel/iommu.h')
| -rw-r--r-- | drivers/iommu/intel/iommu.h | 33 | 
1 files changed, 17 insertions, 16 deletions
diff --git a/drivers/iommu/intel/iommu.h b/drivers/iommu/intel/iommu.h index b3d82d7093e6..06e61e474856 100644 --- a/drivers/iommu/intel/iommu.h +++ b/drivers/iommu/intel/iommu.h @@ -480,8 +480,6 @@ enum {  #define VTD_FLAG_IRQ_REMAP_PRE_ENABLED	(1 << 1)  #define VTD_FLAG_SVM_CAPABLE		(1 << 2) -extern int intel_iommu_sm; -  #define sm_supported(iommu)	(intel_iommu_sm && ecap_smts((iommu)->ecap))  #define pasid_supported(iommu)	(sm_supported(iommu) &&			\  				 ecap_pasid((iommu)->ecap)) @@ -517,14 +515,6 @@ struct context_entry {  	u64 hi;  }; -/* - * When VT-d works in the scalable mode, it allows DMA translation to - * happen through either first level or second level page table. This - * bit marks that the DMA translation for the domain goes through the - * first level page table, otherwise, it goes through the second level. - */ -#define DOMAIN_FLAG_USE_FIRST_LEVEL		BIT(1) -  struct iommu_domain_info {  	struct intel_iommu *iommu;  	unsigned int refcnt;		/* Refcount of devices per iommu */ @@ -541,6 +531,11 @@ struct dmar_domain {  	u8 iommu_coherency: 1;		/* indicate coherency of iommu access */  	u8 force_snooping : 1;		/* Create IOPTEs with snoop control */  	u8 set_pte_snp:1; +	u8 use_first_level:1;		/* DMA translation for the domain goes +					 * through the first level page table, +					 * otherwise, goes through the second +					 * level. +					 */  	spinlock_t lock;		/* Protect device tracking lists */  	struct list_head devices;	/* all devices' list */ @@ -550,8 +545,6 @@ struct dmar_domain {  	/* adjusted guest address width, 0 is level 2 30-bit */  	int		agaw; - -	int		flags;		/* flags to find out type of domain */  	int		iommu_superpage;/* Level of superpages supported:  					   0 == 4KiB (no superpages), 1 == 2MiB,  					   2 == 1GiB, 3 == 512GiB, 4 == 1TiB */ @@ -753,12 +746,10 @@ struct intel_iommu *device_to_iommu(struct device *dev, u8 *bus, u8 *devfn);  extern void intel_svm_check(struct intel_iommu *iommu);  extern int intel_svm_enable_prq(struct intel_iommu *iommu);  extern int intel_svm_finish_prq(struct intel_iommu *iommu); -struct iommu_sva *intel_svm_bind(struct device *dev, struct mm_struct *mm, -				 void *drvdata); -void intel_svm_unbind(struct iommu_sva *handle); -u32 intel_svm_get_pasid(struct iommu_sva *handle);  int intel_svm_page_response(struct device *dev, struct iommu_fault_event *evt,  			    struct iommu_page_response *msg); +struct iommu_domain *intel_svm_domain_alloc(void); +void intel_svm_remove_dev_pasid(struct device *dev, ioasid_t pasid);  struct intel_svm_dev {  	struct list_head list; @@ -783,6 +774,14 @@ struct intel_svm {  };  #else  static inline void intel_svm_check(struct intel_iommu *iommu) {} +static inline struct iommu_domain *intel_svm_domain_alloc(void) +{ +	return NULL; +} + +static inline void intel_svm_remove_dev_pasid(struct device *dev, ioasid_t pasid) +{ +}  #endif  #ifdef CONFIG_INTEL_IOMMU_DEBUGFS @@ -798,6 +797,7 @@ struct context_entry *iommu_context_addr(struct intel_iommu *iommu, u8 bus,  extern const struct iommu_ops intel_iommu_ops;  #ifdef CONFIG_INTEL_IOMMU +extern int intel_iommu_sm;  extern int iommu_calculate_agaw(struct intel_iommu *iommu);  extern int iommu_calculate_max_sagaw(struct intel_iommu *iommu);  extern int dmar_disabled; @@ -813,6 +813,7 @@ static inline int iommu_calculate_max_sagaw(struct intel_iommu *iommu)  }  #define dmar_disabled	(1)  #define intel_iommu_enabled (0) +#define intel_iommu_sm (0)  #endif  static inline const char *decode_prq_descriptor(char *str, size_t size,  | 
