Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 031e4daf authored by Mitchel Humpherys's avatar Mitchel Humpherys Committed by Matt Wagantall
Browse files

iommu: export iommu_pgsize



It can be useful in IOMMU drivers.  Export it.

Change-Id: I4c423d256312250f1e33ca8d64dfe1626f008b5e
Signed-off-by: default avatarMitchel Humpherys <mitchelh@codeaurora.org>
parent d74a2a0a
Loading
Loading
Loading
Loading
+7 −5
Original line number Diff line number Diff line
@@ -991,7 +991,7 @@ phys_addr_t iommu_iova_to_phys(struct iommu_domain *domain, dma_addr_t iova)
}
EXPORT_SYMBOL_GPL(iommu_iova_to_phys);

static size_t iommu_pgsize(struct iommu_domain *domain,
size_t iommu_pgsize(unsigned long pgsize_bitmap,
		    unsigned long addr_merge, size_t size)
{
	unsigned int pgsize_idx;
@@ -1011,7 +1011,7 @@ static size_t iommu_pgsize(struct iommu_domain *domain,
	pgsize = (1UL << (pgsize_idx + 1)) - 1;

	/* throw away page sizes not supported by the hardware */
	pgsize &= domain->ops->pgsize_bitmap;
	pgsize &= pgsize_bitmap;

	/* make sure we're still sane */
	BUG_ON(!pgsize);
@@ -1052,7 +1052,8 @@ int iommu_map(struct iommu_domain *domain, unsigned long iova,
	pr_debug("map: iova 0x%lx pa %pa size 0x%zx\n", iova, &paddr, size);

	while (size) {
		size_t pgsize = iommu_pgsize(domain, iova | paddr, size);
		size_t pgsize = iommu_pgsize(domain->ops->pgsize_bitmap,
					     iova | paddr, size);

		pr_debug("mapping: iova 0x%lx pa %pa pgsize 0x%zx\n",
			 iova, &paddr, pgsize);
@@ -1106,7 +1107,8 @@ size_t iommu_unmap(struct iommu_domain *domain, unsigned long iova, size_t size)
	 * or we hit an area that isn't mapped.
	 */
	while (unmapped < size) {
		size_t pgsize = iommu_pgsize(domain, iova, size - unmapped);
		size_t pgsize = iommu_pgsize(domain->ops->pgsize_bitmap, iova,
					     size - unmapped);

		unmapped_page = domain->ops->unmap(domain, iova, pgsize);
		if (!unmapped_page)
+2 −0
Original line number Diff line number Diff line
@@ -161,6 +161,8 @@ extern int iommu_attach_device(struct iommu_domain *domain,
			       struct device *dev);
extern void iommu_detach_device(struct iommu_domain *domain,
				struct device *dev);
extern size_t iommu_pgsize(unsigned long pgsize_bitmap,
			   unsigned long addr_merge, size_t size);
extern int iommu_map(struct iommu_domain *domain, unsigned long iova,
		     phys_addr_t paddr, size_t size, int prot);
extern size_t iommu_unmap(struct iommu_domain *domain, unsigned long iova,