Lines Matching refs:pasid

3  * intel-pasid.c - PASID idr, table and entry manipulation
22 #include "pasid.h"
30 * Per device pasid table management:
34 * Allocate a pasid table for @dev. It should be called in a
129 static struct pasid_entry *intel_pasid_get_entry(struct device *dev, u32 pasid)
138 if (WARN_ON(!pasid_table || pasid >= intel_pasid_get_dev_max_id(dev)))
143 dir_index = pasid >> PASID_PDE_SHIFT;
144 index = pasid & PASID_PTE_MASK;
154 * The pasid directory table entry won't be freed after
177 intel_pasid_clear_entry(struct device *dev, u32 pasid, bool fault_ignore)
181 pe = intel_pasid_get_entry(dev, pasid);
193 u16 did, u32 pasid)
198 QI_PC_PASID(pasid) | QI_PC_TYPE;
208 struct device *dev, u32 pasid)
230 if (pasid == IOMMU_NO_PASID)
233 qi_flush_dev_iotlb_pasid(iommu, sid, pfsid, pasid, qdep, 0, 64 - VTD_PAGE_SHIFT);
237 u32 pasid, bool fault_ignore)
243 pte = intel_pasid_get_entry(dev, pasid);
251 intel_pasid_clear_entry(dev, pasid, fault_ignore);
257 pasid_cache_invalidation_with_pasid(iommu, did, pasid);
260 qi_flush_piotlb(iommu, did, pasid, 0, -1, 0);
266 devtlb_invalidation_with_pasid(iommu, dev, pasid);
270 * This function flushes cache for a newly setup pasid table entry.
271 * Caller of it should not modify the in-use pasid table entries.
275 u32 pasid, u16 did)
281 pasid_cache_invalidation_with_pasid(iommu, did, pasid);
282 qi_flush_piotlb(iommu, did, pasid, 0, -1, 0);
289 * Set up the scalable mode pasid table entry for first only
294 u32 pasid, u16 did, int flags)
311 pte = intel_pasid_get_entry(dev, pasid);
343 pasid_flush_caches(iommu, pte, pasid, did);
368 * Set up the scalable mode pasid entry for second only translation type.
372 struct device *dev, u32 pasid)
401 pte = intel_pasid_get_entry(dev, pasid);
425 pasid_flush_caches(iommu, pte, pasid, did);
434 struct device *dev, u32 pasid,
442 pte = intel_pasid_get_entry(dev, pasid);
446 dev, "Failed to get pasid entry of PASID %d\n", pasid);
484 * - If (pasid is RID_PASID)
490 pasid_cache_invalidation_with_pasid(iommu, did, pasid);
496 devtlb_invalidation_with_pasid(iommu, dev, pasid);
502 * Set up the scalable mode pasid entry for passthrough translation type.
505 struct device *dev, u32 pasid)
511 pte = intel_pasid_get_entry(dev, pasid);
531 pasid_flush_caches(iommu, pte, pasid, did);
537 * Set the page snoop control for a pasid entry which has been set up.
540 struct device *dev, u32 pasid)
546 pte = intel_pasid_get_entry(dev, pasid);
564 * - If (pasid is RID_PASID)
570 pasid_cache_invalidation_with_pasid(iommu, did, pasid);
571 qi_flush_piotlb(iommu, did, pasid, 0, -1, 0);
575 devtlb_invalidation_with_pasid(iommu, dev, pasid);
582 * @pasid: PASID to be programmed in the device PASID table
590 u32 pasid, struct dmar_domain *domain)
629 pte = intel_pasid_get_entry(dev, pasid);
669 pasid_flush_caches(iommu, pte, pasid, did);
675 * Interfaces to setup or teardown a pasid table to the scalable-mode