Lines Matching refs:dmar_domain
249 static struct dmar_domain *si_domain;
386 static inline int domain_type_is_si(struct dmar_domain *domain)
391 static inline int domain_pfn_supported(struct dmar_domain *domain,
460 static void domain_update_iommu_coherency(struct dmar_domain *domain)
490 static int domain_update_iommu_superpage(struct dmar_domain *domain,
520 static int domain_update_device_node(struct dmar_domain *domain)
543 static void domain_update_iotlb(struct dmar_domain *domain);
546 static unsigned long domain_super_pgsize_bitmap(struct dmar_domain *domain)
563 static void domain_update_iommu_cap(struct dmar_domain *domain)
776 static void domain_flush_cache(struct dmar_domain *domain,
915 static struct dma_pte *pfn_to_dma_pte(struct dmar_domain *domain,
972 static struct dma_pte *dma_pfn_level_pte(struct dmar_domain *domain,
1004 static void dma_pte_clear_range(struct dmar_domain *domain,
1035 static void dma_pte_free_level(struct dmar_domain *domain, int level,
1078 static void dma_pte_free_pagetable(struct dmar_domain *domain,
1102 static void dma_pte_list_pagetables(struct dmar_domain *domain,
1122 static void dma_pte_clear_level(struct dmar_domain *domain, int level,
1169 static void domain_unmap(struct dmar_domain *domain, unsigned long start_pfn,
1346 domain_lookup_dev_info(struct dmar_domain *domain,
1365 static void domain_update_iotlb(struct dmar_domain *domain)
1469 static void iommu_flush_dev_iotlb(struct dmar_domain *domain,
1499 struct dmar_domain *domain, u64 addr,
1516 struct dmar_domain *domain,
1578 struct dmar_domain *domain,
1593 struct dmar_domain *dmar_domain = to_dmar_domain(domain);
1597 xa_for_each(&dmar_domain->iommu_array, idx, info) {
1599 u16 did = domain_id_iommu(dmar_domain, iommu);
1601 if (dmar_domain->use_first_level)
1602 domain_flush_pasid_iotlb(iommu, dmar_domain, 0, -1, 0);
1608 iommu_flush_dev_iotlb(dmar_domain, 0, MAX_AGAW_PFN_WIDTH);
1761 static struct dmar_domain *alloc_domain(unsigned int type)
1763 struct dmar_domain *domain;
1781 static int domain_attach_iommu(struct dmar_domain *domain,
1831 static void domain_detach_iommu(struct dmar_domain *domain,
1862 static void domain_exit(struct dmar_domain *domain)
1926 static int domain_context_mapping_one(struct dmar_domain *domain,
2068 struct dmar_domain *domain;
2084 domain_context_mapping(struct dmar_domain *domain, struct device *dev)
2118 static inline int hardware_largepage_caps(struct dmar_domain *domain,
2150 static void switch_to_super_page(struct dmar_domain *domain,
2183 __domain_mapping(struct dmar_domain *domain, unsigned long iov_pfn,
2332 struct dmar_domain *domain,
2371 static int iommu_domain_identity_map(struct dmar_domain *domain,
2386 static int md_domain_init(struct dmar_domain *domain, int guest_width);
2445 static int dmar_domain_attach_device(struct dmar_domain *domain,
3938 struct dmar_domain *domain = info->domain;
3990 static int md_domain_init(struct dmar_domain *domain, int guest_width)
4027 struct dmar_domain *dmar_domain;
4035 dmar_domain = alloc_domain(type);
4036 if (!dmar_domain) {
4037 pr_err("Can't allocate dmar_domain\n");
4040 if (md_domain_init(dmar_domain, DEFAULT_DOMAIN_ADDRESS_WIDTH)) {
4042 domain_exit(dmar_domain);
4046 domain = &dmar_domain->domain;
4049 __DOMAIN_MAX_ADDR(dmar_domain->gaw);
4073 struct dmar_domain *dmar_domain = to_dmar_domain(domain);
4081 if (dmar_domain->force_snooping && !ecap_sc_support(iommu->ecap))
4089 if (dmar_domain->max_addr > (1LL << addr_width))
4091 dmar_domain->gaw = addr_width;
4096 while (iommu->agaw < dmar_domain->agaw) {
4099 pte = dmar_domain->pgd;
4101 dmar_domain->pgd = phys_to_virt(dma_pte_addr(pte));
4104 dmar_domain->agaw--;
4130 struct dmar_domain *dmar_domain = to_dmar_domain(domain);
4138 if (dmar_domain->set_pte_snp)
4142 if (dmar_domain->max_addr < max_addr) {
4146 end = __DOMAIN_MAX_ADDR(dmar_domain->gaw) + 1;
4150 __func__, dmar_domain->gaw, max_addr);
4153 dmar_domain->max_addr = max_addr;
4158 return __domain_mapping(dmar_domain, iova >> VTD_PAGE_SHIFT,
4188 struct dmar_domain *dmar_domain = to_dmar_domain(domain);
4194 if (unlikely(!pfn_to_dma_pte(dmar_domain, iova >> VTD_PAGE_SHIFT,
4204 domain_unmap(dmar_domain, start_pfn, last_pfn, &gather->freelist);
4206 if (dmar_domain->max_addr == iova + size)
4207 dmar_domain->max_addr = iova;
4233 struct dmar_domain *dmar_domain = to_dmar_domain(domain);
4244 xa_for_each(&dmar_domain->iommu_array, i, info)
4245 iommu_flush_iotlb_psi(info->iommu, dmar_domain,
4255 struct dmar_domain *dmar_domain = to_dmar_domain(domain);
4260 pte = pfn_to_dma_pte(dmar_domain, iova >> VTD_PAGE_SHIFT, &level,
4270 static bool domain_support_force_snooping(struct dmar_domain *domain)
4286 static void domain_set_force_snooping(struct dmar_domain *domain)
4307 struct dmar_domain *dmar_domain = to_dmar_domain(domain);
4310 if (dmar_domain->force_snooping)
4313 spin_lock_irqsave(&dmar_domain->lock, flags);
4314 if (!domain_support_force_snooping(dmar_domain) ||
4315 (!dmar_domain->use_first_level && dmar_domain->has_mappings)) {
4316 spin_unlock_irqrestore(&dmar_domain->lock, flags);
4320 domain_set_force_snooping(dmar_domain);
4321 dmar_domain->force_snooping = true;
4322 spin_unlock_irqrestore(&dmar_domain->lock, flags);
4672 struct dmar_domain *dmar_domain = to_dmar_domain(domain);
4678 xa_for_each(&dmar_domain->iommu_array, i, info)
4679 __mapping_notify_one(info->iommu, dmar_domain, pfn, pages);
4686 struct dmar_domain *dmar_domain;
4704 dmar_domain = to_dmar_domain(domain);
4705 spin_lock_irqsave(&dmar_domain->lock, flags);
4706 list_for_each_entry(curr, &dmar_domain->dev_pasids, link_domain) {
4714 spin_unlock_irqrestore(&dmar_domain->lock, flags);
4716 domain_detach_iommu(dmar_domain, iommu);
4727 struct dmar_domain *dmar_domain = to_dmar_domain(domain);
4747 ret = domain_attach_iommu(dmar_domain, iommu);
4751 if (domain_type_is_si(dmar_domain))
4752 ret = intel_pasid_setup_pass_through(iommu, dmar_domain,
4754 else if (dmar_domain->use_first_level)
4755 ret = domain_setup_first_level(iommu, dmar_domain,
4758 ret = intel_pasid_setup_second_level(iommu, dmar_domain,
4765 spin_lock_irqsave(&dmar_domain->lock, flags);
4766 list_add(&dev_pasid->link_domain, &dmar_domain->dev_pasids);
4767 spin_unlock_irqrestore(&dmar_domain->lock, flags);
4771 domain_detach_iommu(dmar_domain, iommu);