Lines Matching refs:pasid

3  * intel-pasid.c - PASID idr, table and entry manipulation
22 #include "pasid.h"
29 int vcmd_alloc_pasid(struct intel_iommu *iommu, u32 *pasid)
45 *pasid = VCMD_VRSP_RESULT_PASID(res);
60 void vcmd_free_pasid(struct intel_iommu *iommu, u32 pasid)
68 VCMD_CMD_OPERAND(pasid) | VCMD_CMD_FREE);
87 * Per device pasid table management:
91 * Allocate a pasid table for @dev. It should be called in a
186 static struct pasid_entry *intel_pasid_get_entry(struct device *dev, u32 pasid)
195 if (WARN_ON(!pasid_table || pasid >= intel_pasid_get_dev_max_id(dev)))
200 dir_index = pasid >> PASID_PDE_SHIFT;
201 index = pasid & PASID_PTE_MASK;
211 * The pasid directory table entry won't be freed after
258 intel_pasid_clear_entry(struct device *dev, u32 pasid, bool fault_ignore)
262 pe = intel_pasid_get_entry(dev, pasid);
407 u16 did, u32 pasid)
412 QI_PC_PASID(pasid) | QI_PC_TYPE;
422 struct device *dev, u32 pasid)
444 if (pasid == IOMMU_NO_PASID)
447 qi_flush_dev_iotlb_pasid(iommu, sid, pfsid, pasid, qdep, 0, 64 - VTD_PAGE_SHIFT);
451 u32 pasid, bool fault_ignore)
457 pte = intel_pasid_get_entry(dev, pasid);
465 intel_pasid_clear_entry(dev, pasid, fault_ignore);
471 pasid_cache_invalidation_with_pasid(iommu, did, pasid);
474 qi_flush_piotlb(iommu, did, pasid, 0, -1, 0);
480 devtlb_invalidation_with_pasid(iommu, dev, pasid);
484 * This function flushes cache for a newly setup pasid table entry.
485 * Caller of it should not modify the in-use pasid table entries.
489 u32 pasid, u16 did)
495 pasid_cache_invalidation_with_pasid(iommu, did, pasid);
496 qi_flush_piotlb(iommu, did, pasid, 0, -1, 0);
503 * Set up the scalable mode pasid table entry for first only
508 u32 pasid, u16 did, int flags)
525 pte = intel_pasid_get_entry(dev, pasid);
557 pasid_flush_caches(iommu, pte, pasid, did);
582 * Set up the scalable mode pasid entry for second only translation type.
586 struct device *dev, u32 pasid)
615 pte = intel_pasid_get_entry(dev, pasid);
637 pasid_flush_caches(iommu, pte, pasid, did);
643 * Set up the scalable mode pasid entry for passthrough translation type.
647 struct device *dev, u32 pasid)
653 pte = intel_pasid_get_entry(dev, pasid);
673 pasid_flush_caches(iommu, pte, pasid, did);
679 * Set the page snoop control for a pasid entry which has been set up.
682 struct device *dev, u32 pasid)
688 pte = intel_pasid_get_entry(dev, pasid);
706 * - If (pasid is RID_PASID)
712 pasid_cache_invalidation_with_pasid(iommu, did, pasid);
713 qi_flush_piotlb(iommu, did, pasid, 0, -1, 0);
717 devtlb_invalidation_with_pasid(iommu, dev, pasid);