Lines Matching refs:domain
284 #define for_each_domain_iommu(idx, domain) \ argument
286 if (domain->iommu_refcnt[idx])
324 static void domain_exit(struct dmar_domain *domain);
325 static void domain_remove_dev_info(struct dmar_domain *domain);
328 static int intel_iommu_attach_device(struct iommu_domain *domain,
330 static phys_addr_t intel_iommu_iova_to_phys(struct iommu_domain *domain,
476 struct dmar_domain *domain) in set_iommu_domain() argument
490 domains[did & 0xff] = domain; in set_iommu_domain()
529 static inline int domain_type_is_si(struct dmar_domain *domain) in domain_type_is_si() argument
531 return domain->domain.type == IOMMU_DOMAIN_IDENTITY; in domain_type_is_si()
534 static inline bool domain_use_first_level(struct dmar_domain *domain) in domain_use_first_level() argument
536 return domain->flags & DOMAIN_FLAG_USE_FIRST_LEVEL; in domain_use_first_level()
539 static inline int domain_pfn_supported(struct dmar_domain *domain, in domain_pfn_supported() argument
542 int addr_width = agaw_to_width(domain->agaw) - VTD_PAGE_SHIFT; in domain_pfn_supported()
581 struct intel_iommu *domain_get_iommu(struct dmar_domain *domain) in domain_get_iommu() argument
586 if (WARN_ON(!iommu_is_dma_domain(&domain->domain))) in domain_get_iommu()
589 for_each_domain_iommu(iommu_id, domain) in domain_get_iommu()
604 static void domain_update_iommu_coherency(struct dmar_domain *domain) in domain_update_iommu_coherency() argument
611 domain->iommu_coherency = true; in domain_update_iommu_coherency()
613 for_each_domain_iommu(i, domain) { in domain_update_iommu_coherency()
616 domain->iommu_coherency = false; in domain_update_iommu_coherency()
627 domain->iommu_coherency = false; in domain_update_iommu_coherency()
661 static int domain_update_iommu_superpage(struct dmar_domain *domain, in domain_update_iommu_superpage() argument
675 if (domain && domain_use_first_level(domain)) { in domain_update_iommu_superpage()
691 static int domain_update_device_node(struct dmar_domain *domain) in domain_update_device_node() argument
698 if (list_empty(&domain->devices)) in domain_update_device_node()
701 list_for_each_entry(info, &domain->devices, link) { in domain_update_device_node()
719 static void domain_update_iotlb(struct dmar_domain *domain);
722 static unsigned long domain_super_pgsize_bitmap(struct dmar_domain *domain) in domain_super_pgsize_bitmap() argument
730 if (domain->iommu_superpage == 1) in domain_super_pgsize_bitmap()
732 else if (domain->iommu_superpage == 2) in domain_super_pgsize_bitmap()
739 static void domain_update_iommu_cap(struct dmar_domain *domain) in domain_update_iommu_cap() argument
741 domain_update_iommu_coherency(domain); in domain_update_iommu_cap()
742 domain->iommu_snooping = domain_update_iommu_snooping(NULL); in domain_update_iommu_cap()
743 domain->iommu_superpage = domain_update_iommu_superpage(domain, NULL); in domain_update_iommu_cap()
749 if (domain->nid == NUMA_NO_NODE) in domain_update_iommu_cap()
750 domain->nid = domain_update_device_node(domain); in domain_update_iommu_cap()
759 if (domain_use_first_level(domain)) in domain_update_iommu_cap()
760 domain->domain.geometry.aperture_end = __DOMAIN_MAX_ADDR(domain->gaw - 1); in domain_update_iommu_cap()
762 domain->domain.geometry.aperture_end = __DOMAIN_MAX_ADDR(domain->gaw); in domain_update_iommu_cap()
764 domain->domain.pgsize_bitmap |= domain_super_pgsize_bitmap(domain); in domain_update_iommu_cap()
765 domain_update_iotlb(domain); in domain_update_iommu_cap()
951 static void domain_flush_cache(struct dmar_domain *domain, in domain_flush_cache() argument
954 if (!domain->iommu_coherency) in domain_flush_cache()
1006 struct dmar_domain *domain; in pgtable_walk() local
1010 if (!info || !info->domain) { in pgtable_walk()
1016 domain = info->domain; in pgtable_walk()
1017 level = agaw_to_level(domain->agaw); in pgtable_walk()
1018 parent = domain->pgd; in pgtable_walk()
1112 static struct dma_pte *pfn_to_dma_pte(struct dmar_domain *domain, in pfn_to_dma_pte() argument
1116 int level = agaw_to_level(domain->agaw); in pfn_to_dma_pte()
1119 BUG_ON(!domain->pgd); in pfn_to_dma_pte()
1121 if (!domain_pfn_supported(domain, pfn)) in pfn_to_dma_pte()
1125 parent = domain->pgd; in pfn_to_dma_pte()
1140 tmp_page = alloc_pgtable_page(domain->nid); in pfn_to_dma_pte()
1145 domain_flush_cache(domain, tmp_page, VTD_PAGE_SIZE); in pfn_to_dma_pte()
1147 if (domain_use_first_level(domain)) { in pfn_to_dma_pte()
1149 if (iommu_is_dma_domain(&domain->domain)) in pfn_to_dma_pte()
1156 domain_flush_cache(domain, pte, sizeof(*pte)); in pfn_to_dma_pte()
1172 static struct dma_pte *dma_pfn_level_pte(struct dmar_domain *domain, in dma_pfn_level_pte() argument
1177 int total = agaw_to_level(domain->agaw); in dma_pfn_level_pte()
1180 parent = domain->pgd; in dma_pfn_level_pte()
1204 static void dma_pte_clear_range(struct dmar_domain *domain, in dma_pte_clear_range() argument
1211 BUG_ON(!domain_pfn_supported(domain, start_pfn)); in dma_pte_clear_range()
1212 BUG_ON(!domain_pfn_supported(domain, last_pfn)); in dma_pte_clear_range()
1218 first_pte = pte = dma_pfn_level_pte(domain, start_pfn, 1, &large_page); in dma_pte_clear_range()
1229 domain_flush_cache(domain, first_pte, in dma_pte_clear_range()
1235 static void dma_pte_free_level(struct dmar_domain *domain, int level, in dma_pte_free_level() argument
1254 dma_pte_free_level(domain, level - 1, retain_level, in dma_pte_free_level()
1266 domain_flush_cache(domain, pte, sizeof(*pte)); in dma_pte_free_level()
1278 static void dma_pte_free_pagetable(struct dmar_domain *domain, in dma_pte_free_pagetable() argument
1283 BUG_ON(!domain_pfn_supported(domain, start_pfn)); in dma_pte_free_pagetable()
1284 BUG_ON(!domain_pfn_supported(domain, last_pfn)); in dma_pte_free_pagetable()
1287 dma_pte_clear_range(domain, start_pfn, last_pfn); in dma_pte_free_pagetable()
1290 dma_pte_free_level(domain, agaw_to_level(domain->agaw), retain_level, in dma_pte_free_pagetable()
1291 domain->pgd, 0, start_pfn, last_pfn); in dma_pte_free_pagetable()
1294 if (start_pfn == 0 && last_pfn == DOMAIN_MAX_PFN(domain->gaw)) { in dma_pte_free_pagetable()
1295 free_pgtable_page(domain->pgd); in dma_pte_free_pagetable()
1296 domain->pgd = NULL; in dma_pte_free_pagetable()
1306 static struct page *dma_pte_list_pagetables(struct dmar_domain *domain, in dma_pte_list_pagetables() argument
1322 freelist = dma_pte_list_pagetables(domain, level - 1, in dma_pte_list_pagetables()
1330 static struct page *dma_pte_clear_level(struct dmar_domain *domain, int level, in dma_pte_clear_level() argument
1353 freelist = dma_pte_list_pagetables(domain, level - 1, pte, freelist); in dma_pte_clear_level()
1361 freelist = dma_pte_clear_level(domain, level - 1, in dma_pte_clear_level()
1371 domain_flush_cache(domain, first_pte, in dma_pte_clear_level()
1380 static struct page *domain_unmap(struct dmar_domain *domain, in domain_unmap() argument
1385 BUG_ON(!domain_pfn_supported(domain, start_pfn)); in domain_unmap()
1386 BUG_ON(!domain_pfn_supported(domain, last_pfn)); in domain_unmap()
1390 freelist = dma_pte_clear_level(domain, agaw_to_level(domain->agaw), in domain_unmap()
1391 domain->pgd, 0, start_pfn, last_pfn, in domain_unmap()
1395 if (start_pfn == 0 && last_pfn == DOMAIN_MAX_PFN(domain->gaw)) { in domain_unmap()
1396 struct page *pgd_page = virt_to_page(domain->pgd); in domain_unmap()
1400 domain->pgd = NULL; in domain_unmap()
1575 iommu_support_dev_iotlb (struct dmar_domain *domain, struct intel_iommu *iommu, in iommu_support_dev_iotlb() argument
1585 list_for_each_entry(info, &domain->devices, link) in iommu_support_dev_iotlb()
1596 static void domain_update_iotlb(struct dmar_domain *domain) in domain_update_iotlb() argument
1603 list_for_each_entry(info, &domain->devices, link) in domain_update_iotlb()
1612 list_for_each_entry(sinfo, &domain->subdevices, link_domain) { in domain_update_iotlb()
1621 domain->has_iotlb_device = has_iotlb_device; in domain_update_iotlb()
1666 domain_update_iotlb(info->domain); in iommu_enable_dev_iotlb()
1685 domain_update_iotlb(info->domain); in iommu_disable_dev_iotlb()
1713 static void iommu_flush_dev_iotlb(struct dmar_domain *domain, in iommu_flush_dev_iotlb() argument
1720 if (!domain->has_iotlb_device) in iommu_flush_dev_iotlb()
1724 list_for_each_entry(info, &domain->devices, link) in iommu_flush_dev_iotlb()
1727 list_for_each_entry(sinfo, &domain->subdevices, link_domain) { in iommu_flush_dev_iotlb()
1735 struct dmar_domain *domain, in domain_flush_piotlb() argument
1738 u16 did = domain->iommu_did[iommu->seq_id]; in domain_flush_piotlb()
1740 if (domain->default_pasid) in domain_flush_piotlb()
1741 qi_flush_piotlb(iommu, did, domain->default_pasid, in domain_flush_piotlb()
1744 if (!list_empty(&domain->devices)) in domain_flush_piotlb()
1749 struct dmar_domain *domain, in iommu_flush_iotlb_psi() argument
1755 u16 did = domain->iommu_did[iommu->seq_id]; in iommu_flush_iotlb_psi()
1762 if (domain_use_first_level(domain)) { in iommu_flush_iotlb_psi()
1763 domain_flush_piotlb(iommu, domain, addr, pages, ih); in iommu_flush_iotlb_psi()
1784 iommu_flush_dev_iotlb(domain, addr, mask); in iommu_flush_iotlb_psi()
1789 struct dmar_domain *domain, in __mapping_notify_one() argument
1796 if (cap_caching_mode(iommu->cap) && !domain_use_first_level(domain)) in __mapping_notify_one()
1797 iommu_flush_iotlb_psi(iommu, domain, pfn, pages, 0, 1); in __mapping_notify_one()
1802 static void intel_flush_iotlb_all(struct iommu_domain *domain) in intel_flush_iotlb_all() argument
1804 struct dmar_domain *dmar_domain = to_dmar_domain(domain); in intel_flush_iotlb_all()
1947 if (!info->dev || !info->domain) in disable_dmar_iommu()
2008 struct dmar_domain *domain; in alloc_domain() local
2010 domain = alloc_domain_mem(); in alloc_domain()
2011 if (!domain) in alloc_domain()
2014 memset(domain, 0, sizeof(*domain)); in alloc_domain()
2015 domain->nid = NUMA_NO_NODE; in alloc_domain()
2017 domain->flags |= DOMAIN_FLAG_USE_FIRST_LEVEL; in alloc_domain()
2018 domain->has_iotlb_device = false; in alloc_domain()
2019 INIT_LIST_HEAD(&domain->devices); in alloc_domain()
2020 INIT_LIST_HEAD(&domain->subdevices); in alloc_domain()
2022 return domain; in alloc_domain()
2026 static int domain_attach_iommu(struct dmar_domain *domain, in domain_attach_iommu() argument
2035 domain->iommu_refcnt[iommu->seq_id] += 1; in domain_attach_iommu()
2036 if (domain->iommu_refcnt[iommu->seq_id] == 1) { in domain_attach_iommu()
2042 domain->iommu_refcnt[iommu->seq_id] -= 1; in domain_attach_iommu()
2047 set_iommu_domain(iommu, num, domain); in domain_attach_iommu()
2049 domain->iommu_did[iommu->seq_id] = num; in domain_attach_iommu()
2050 domain->nid = iommu->node; in domain_attach_iommu()
2052 domain_update_iommu_cap(domain); in domain_attach_iommu()
2058 static void domain_detach_iommu(struct dmar_domain *domain, in domain_detach_iommu() argument
2066 domain->iommu_refcnt[iommu->seq_id] -= 1; in domain_detach_iommu()
2067 if (domain->iommu_refcnt[iommu->seq_id] == 0) { in domain_detach_iommu()
2068 num = domain->iommu_did[iommu->seq_id]; in domain_detach_iommu()
2072 domain_update_iommu_cap(domain); in domain_detach_iommu()
2073 domain->iommu_did[iommu->seq_id] = 0; in domain_detach_iommu()
2091 static void domain_exit(struct dmar_domain *domain) in domain_exit() argument
2095 domain_remove_dev_info(domain); in domain_exit()
2097 if (domain->pgd) { in domain_exit()
2100 freelist = domain_unmap(domain, 0, in domain_exit()
2101 DOMAIN_MAX_PFN(domain->gaw), NULL); in domain_exit()
2105 free_domain_mem(domain); in domain_exit()
2157 static int domain_context_mapping_one(struct dmar_domain *domain, in domain_context_mapping_one() argument
2162 u16 did = domain->iommu_did[iommu->seq_id]; in domain_context_mapping_one()
2171 if (hw_pass_through && domain_type_is_si(domain)) in domain_context_mapping_one()
2177 BUG_ON(!domain->pgd); in domain_context_mapping_one()
2232 info = iommu_support_dev_iotlb(domain, iommu, bus, devfn); in domain_context_mapping_one()
2238 struct dma_pte *pgd = domain->pgd; in domain_context_mapping_one()
2248 for (agaw = domain->agaw; agaw > iommu->agaw; agaw--) { in domain_context_mapping_one()
2255 info = iommu_support_dev_iotlb(domain, iommu, bus, devfn); in domain_context_mapping_one()
2307 struct dmar_domain *domain; member
2317 return domain_context_mapping_one(data->domain, data->iommu, in domain_context_mapping_cb()
2323 domain_context_mapping(struct dmar_domain *domain, struct device *dev) in domain_context_mapping() argument
2337 return domain_context_mapping_one(domain, iommu, table, in domain_context_mapping()
2340 data.domain = domain; in domain_context_mapping()
2381 static inline int hardware_largepage_caps(struct dmar_domain *domain, in hardware_largepage_caps() argument
2389 support = domain->iommu_superpage; in hardware_largepage_caps()
2413 static void switch_to_super_page(struct dmar_domain *domain, in switch_to_super_page() argument
2423 pte = pfn_to_dma_pte(domain, start_pfn, &level); in switch_to_super_page()
2426 dma_pte_free_pagetable(domain, start_pfn, in switch_to_super_page()
2430 for_each_domain_iommu(i, domain) in switch_to_super_page()
2431 iommu_flush_iotlb_psi(g_iommus[i], domain, in switch_to_super_page()
2444 __domain_mapping(struct dmar_domain *domain, unsigned long iov_pfn, in __domain_mapping() argument
2453 BUG_ON(!domain_pfn_supported(domain, iov_pfn + nr_pages - 1)); in __domain_mapping()
2460 if (domain_use_first_level(domain)) { in __domain_mapping()
2472 largepage_lvl = hardware_largepage_caps(domain, iov_pfn, in __domain_mapping()
2475 pte = pfn_to_dma_pte(domain, iov_pfn, &largepage_lvl); in __domain_mapping()
2491 switch_to_super_page(domain, iov_pfn, end_pfn, largepage_lvl); in __domain_mapping()
2532 domain_flush_cache(domain, first_pte, in __domain_mapping()
2559 if (hw_pass_through && domain_type_is_si(info->domain)) in domain_context_clear_one()
2562 did_old = info->domain->iommu_did[iommu->seq_id]; in domain_context_clear_one()
2597 static void domain_remove_dev_info(struct dmar_domain *domain) in domain_remove_dev_info() argument
2603 list_for_each_entry_safe(info, tmp, &domain->devices, link) in domain_remove_dev_info()
2621 return info->domain; in find_domain()
2640 struct dmar_domain *domain, in domain_setup_first_level() argument
2644 struct dma_pte *pgd = domain->pgd; in domain_setup_first_level()
2652 for (agaw = domain->agaw; agaw > iommu->agaw; agaw--) { in domain_setup_first_level()
2667 if (domain->domain.type == IOMMU_DOMAIN_UNMANAGED) in domain_setup_first_level()
2671 domain->iommu_did[iommu->seq_id], in domain_setup_first_level()
2684 struct dmar_domain *domain) in dmar_insert_one_dev_info() argument
2711 info->domain = domain; in dmar_insert_one_dev_info()
2747 found = info2->domain; in dmar_insert_one_dev_info()
2760 ret = domain_attach_iommu(domain, iommu); in dmar_insert_one_dev_info()
2769 list_add(&info->link, &domain->devices); in dmar_insert_one_dev_info()
2786 if (hw_pass_through && domain_type_is_si(domain)) in dmar_insert_one_dev_info()
2787 ret = intel_pasid_setup_pass_through(iommu, domain, in dmar_insert_one_dev_info()
2789 else if (domain_use_first_level(domain)) in dmar_insert_one_dev_info()
2790 ret = domain_setup_first_level(iommu, domain, dev, in dmar_insert_one_dev_info()
2793 ret = intel_pasid_setup_second_level(iommu, domain, in dmar_insert_one_dev_info()
2803 if (dev && domain_context_mapping(domain, dev)) { in dmar_insert_one_dev_info()
2809 return domain; in dmar_insert_one_dev_info()
2812 static int iommu_domain_identity_map(struct dmar_domain *domain, in iommu_domain_identity_map() argument
2820 dma_pte_clear_range(domain, first_vpfn, last_vpfn); in iommu_domain_identity_map()
2822 return __domain_mapping(domain, first_vpfn, in iommu_domain_identity_map()
2827 static int md_domain_init(struct dmar_domain *domain, int guest_width);
2885 static int domain_add_dev_info(struct dmar_domain *domain, struct device *dev) in domain_add_dev_info() argument
2895 ndomain = dmar_insert_one_dev_info(iommu, bus, devfn, dev, domain); in domain_add_dev_info()
2896 if (ndomain != domain) in domain_add_dev_info()
4570 struct dmar_domain *domain; in __dmar_remove_one_dev_info() local
4580 domain = info->domain; in __dmar_remove_one_dev_info()
4595 domain_detach_iommu(domain, iommu); in __dmar_remove_one_dev_info()
4613 static int md_domain_init(struct dmar_domain *domain, int guest_width) in md_domain_init() argument
4618 domain->gaw = guest_width; in md_domain_init()
4620 domain->agaw = width_to_agaw(adjust_width); in md_domain_init()
4622 domain->iommu_coherency = false; in md_domain_init()
4623 domain->iommu_snooping = false; in md_domain_init()
4624 domain->iommu_superpage = 0; in md_domain_init()
4625 domain->max_addr = 0; in md_domain_init()
4628 domain->pgd = alloc_pgtable_page(domain->nid); in md_domain_init()
4629 if (!domain->pgd) in md_domain_init()
4631 domain_flush_cache(domain, domain->pgd, PAGE_SIZE); in md_domain_init()
4638 struct iommu_domain *domain; in intel_iommu_domain_alloc() local
4655 domain = &dmar_domain->domain; in intel_iommu_domain_alloc()
4656 domain->geometry.aperture_start = 0; in intel_iommu_domain_alloc()
4657 domain->geometry.aperture_end = in intel_iommu_domain_alloc()
4659 domain->geometry.force_aperture = true; in intel_iommu_domain_alloc()
4661 return domain; in intel_iommu_domain_alloc()
4663 return &si_domain->domain; in intel_iommu_domain_alloc()
4671 static void intel_iommu_domain_free(struct iommu_domain *domain) in intel_iommu_domain_free() argument
4673 if (domain != &si_domain->domain) in intel_iommu_domain_free()
4674 domain_exit(to_dmar_domain(domain)); in intel_iommu_domain_free()
4682 is_aux_domain(struct device *dev, struct iommu_domain *domain) in is_aux_domain() argument
4687 domain->type == IOMMU_DOMAIN_UNMANAGED; in is_aux_domain()
4691 lookup_subdev_info(struct dmar_domain *domain, struct device *dev) in lookup_subdev_info() argument
4695 if (!list_empty(&domain->subdevices)) { in lookup_subdev_info()
4696 list_for_each_entry(sinfo, &domain->subdevices, link_domain) { in lookup_subdev_info()
4705 static int auxiliary_link_device(struct dmar_domain *domain, in auxiliary_link_device() argument
4709 struct subdev_domain_info *sinfo = lookup_subdev_info(domain, dev); in auxiliary_link_device()
4719 sinfo->domain = domain; in auxiliary_link_device()
4722 list_add(&sinfo->link_domain, &domain->subdevices); in auxiliary_link_device()
4728 static int auxiliary_unlink_device(struct dmar_domain *domain, in auxiliary_unlink_device() argument
4732 struct subdev_domain_info *sinfo = lookup_subdev_info(domain, dev); in auxiliary_unlink_device()
4749 static int aux_domain_add_dev(struct dmar_domain *domain, in aux_domain_add_dev() argument
4760 if (domain->default_pasid <= 0) { in aux_domain_add_dev()
4771 domain->default_pasid = pasid; in aux_domain_add_dev()
4775 ret = auxiliary_link_device(domain, dev); in aux_domain_add_dev()
4793 ret = domain_attach_iommu(domain, iommu); in aux_domain_add_dev()
4798 if (domain_use_first_level(domain)) in aux_domain_add_dev()
4799 ret = domain_setup_first_level(iommu, domain, dev, in aux_domain_add_dev()
4800 domain->default_pasid); in aux_domain_add_dev()
4802 ret = intel_pasid_setup_second_level(iommu, domain, dev, in aux_domain_add_dev()
4803 domain->default_pasid); in aux_domain_add_dev()
4814 domain_detach_iommu(domain, iommu); in aux_domain_add_dev()
4817 auxiliary_unlink_device(domain, dev); in aux_domain_add_dev()
4820 if (list_empty(&domain->subdevices) && domain->default_pasid > 0) in aux_domain_add_dev()
4821 ioasid_put(domain->default_pasid); in aux_domain_add_dev()
4826 static void aux_domain_remove_dev(struct dmar_domain *domain, in aux_domain_remove_dev() argument
4833 if (!is_aux_domain(dev, &domain->domain)) in aux_domain_remove_dev()
4840 if (!auxiliary_unlink_device(domain, dev)) { in aux_domain_remove_dev()
4843 domain->default_pasid, false); in aux_domain_remove_dev()
4844 domain_detach_iommu(domain, iommu); in aux_domain_remove_dev()
4850 if (list_empty(&domain->subdevices) && domain->default_pasid > 0) in aux_domain_remove_dev()
4851 ioasid_put(domain->default_pasid); in aux_domain_remove_dev()
4854 static int prepare_domain_attach_device(struct iommu_domain *domain, in prepare_domain_attach_device() argument
4857 struct dmar_domain *dmar_domain = to_dmar_domain(domain); in prepare_domain_attach_device()
4902 static int intel_iommu_attach_device(struct iommu_domain *domain, in intel_iommu_attach_device() argument
4907 if (domain->type == IOMMU_DOMAIN_UNMANAGED && in intel_iommu_attach_device()
4913 if (is_aux_domain(dev, domain)) in intel_iommu_attach_device()
4925 ret = prepare_domain_attach_device(domain, dev); in intel_iommu_attach_device()
4929 return domain_add_dev_info(to_dmar_domain(domain), dev); in intel_iommu_attach_device()
4932 static int intel_iommu_aux_attach_device(struct iommu_domain *domain, in intel_iommu_aux_attach_device() argument
4937 if (!is_aux_domain(dev, domain)) in intel_iommu_aux_attach_device()
4940 ret = prepare_domain_attach_device(domain, dev); in intel_iommu_aux_attach_device()
4944 return aux_domain_add_dev(to_dmar_domain(domain), dev); in intel_iommu_aux_attach_device()
4947 static void intel_iommu_detach_device(struct iommu_domain *domain, in intel_iommu_detach_device() argument
4953 static void intel_iommu_aux_detach_device(struct iommu_domain *domain, in intel_iommu_aux_detach_device() argument
4956 aux_domain_remove_dev(to_dmar_domain(domain), dev); in intel_iommu_aux_detach_device()
5007 intel_iommu_sva_invalidate(struct iommu_domain *domain, struct device *dev, in intel_iommu_sva_invalidate() argument
5010 struct dmar_domain *dmar_domain = to_dmar_domain(domain); in intel_iommu_sva_invalidate()
5138 static int intel_iommu_map(struct iommu_domain *domain, in intel_iommu_map() argument
5142 struct dmar_domain *dmar_domain = to_dmar_domain(domain); in intel_iommu_map()
5174 static int intel_iommu_map_pages(struct iommu_domain *domain, in intel_iommu_map_pages() argument
5189 ret = intel_iommu_map(domain, iova, paddr, size, prot, gfp); in intel_iommu_map_pages()
5196 static size_t intel_iommu_unmap(struct iommu_domain *domain, in intel_iommu_unmap() argument
5200 struct dmar_domain *dmar_domain = to_dmar_domain(domain); in intel_iommu_unmap()
5220 iommu_iotlb_gather_add_page(domain, gather, iova, size); in intel_iommu_unmap()
5225 static size_t intel_iommu_unmap_pages(struct iommu_domain *domain, in intel_iommu_unmap_pages() argument
5233 return intel_iommu_unmap(domain, iova, size, gather); in intel_iommu_unmap_pages()
5236 static void intel_iommu_tlb_sync(struct iommu_domain *domain, in intel_iommu_tlb_sync() argument
5239 struct dmar_domain *dmar_domain = to_dmar_domain(domain); in intel_iommu_tlb_sync()
5256 static phys_addr_t intel_iommu_iova_to_phys(struct iommu_domain *domain, in intel_iommu_iova_to_phys() argument
5259 struct dmar_domain *dmar_domain = to_dmar_domain(domain); in intel_iommu_iova_to_phys()
5377 struct dmar_domain *domain; in intel_iommu_enable_pasid() local
5382 domain = find_domain(dev); in intel_iommu_enable_pasid()
5383 if (!domain) in intel_iommu_enable_pasid()
5405 domain->iommu_did[iommu->seq_id], in intel_iommu_enable_pasid()
5571 intel_iommu_aux_get_pasid(struct iommu_domain *domain, struct device *dev) in intel_iommu_aux_get_pasid() argument
5573 struct dmar_domain *dmar_domain = to_dmar_domain(domain); in intel_iommu_aux_get_pasid()
5579 static bool intel_iommu_is_attach_deferred(struct iommu_domain *domain, in intel_iommu_is_attach_deferred() argument
5586 intel_iommu_enable_nesting(struct iommu_domain *domain) in intel_iommu_enable_nesting() argument
5588 struct dmar_domain *dmar_domain = to_dmar_domain(domain); in intel_iommu_enable_nesting()
5620 static void intel_iommu_iotlb_sync_map(struct iommu_domain *domain, in intel_iommu_iotlb_sync_map() argument
5623 struct dmar_domain *dmar_domain = to_dmar_domain(domain); in intel_iommu_iotlb_sync_map()