Lines Matching refs:iova
58 struct interval_tree_node iova; member
313 static int viommu_add_mapping(struct viommu_domain *vdomain, u64 iova, u64 end, in viommu_add_mapping() argument
324 mapping->iova.start = iova; in viommu_add_mapping()
325 mapping->iova.last = end; in viommu_add_mapping()
329 interval_tree_insert(&mapping->iova, &vdomain->mappings); in viommu_add_mapping()
345 u64 iova, u64 end) in viommu_del_mappings() argument
353 next = interval_tree_iter_first(&vdomain->mappings, iova, end); in viommu_del_mappings()
356 mapping = container_of(node, struct viommu_mapping, iova); in viommu_del_mappings()
357 next = interval_tree_iter_next(node, iova, end); in viommu_del_mappings()
360 if (mapping->iova.start < iova) in viommu_del_mappings()
367 unmapped += mapping->iova.last - mapping->iova.start + 1; in viommu_del_mappings()
386 u64 iova = vdomain->domain.geometry.aperture_start; in viommu_domain_map_identity() local
391 iova = ALIGN(iova, granule); in viommu_domain_map_identity()
398 if (resv_end < iova || resv_start > limit) in viommu_domain_map_identity()
402 if (resv_start > iova) { in viommu_domain_map_identity()
403 ret = viommu_add_mapping(vdomain, iova, resv_start - 1, in viommu_domain_map_identity()
404 (phys_addr_t)iova, flags); in viommu_domain_map_identity()
412 iova = resv_end + 1; in viommu_domain_map_identity()
415 ret = viommu_add_mapping(vdomain, iova, limit, (phys_addr_t)iova, in viommu_domain_map_identity()
422 viommu_del_mappings(vdomain, 0, iova); in viommu_domain_map_identity()
444 mapping = container_of(node, struct viommu_mapping, iova); in viommu_replay_mappings()
448 .virt_start = cpu_to_le64(mapping->iova.start), in viommu_replay_mappings()
449 .virt_end = cpu_to_le64(mapping->iova.last), in viommu_replay_mappings()
791 static int viommu_map_pages(struct iommu_domain *domain, unsigned long iova, in viommu_map_pages() argument
798 u64 end = iova + size - 1; in viommu_map_pages()
809 ret = viommu_add_mapping(vdomain, iova, end, paddr, flags); in viommu_map_pages()
816 .virt_start = cpu_to_le64(iova), in viommu_map_pages()
827 viommu_del_mappings(vdomain, iova, end); in viommu_map_pages()
834 static size_t viommu_unmap_pages(struct iommu_domain *domain, unsigned long iova, in viommu_unmap_pages() argument
844 unmapped = viommu_del_mappings(vdomain, iova, iova + size - 1); in viommu_unmap_pages()
855 .virt_start = cpu_to_le64(iova), in viommu_unmap_pages()
856 .virt_end = cpu_to_le64(iova + unmapped - 1), in viommu_unmap_pages()
864 dma_addr_t iova) in viommu_iova_to_phys() argument
873 node = interval_tree_iter_first(&vdomain->mappings, iova, iova); in viommu_iova_to_phys()
875 mapping = container_of(node, struct viommu_mapping, iova); in viommu_iova_to_phys()
876 paddr = mapping->paddr + (iova - mapping->iova.start); in viommu_iova_to_phys()