summaryrefslogtreecommitdiff
path: root/drivers/iommu/iommu.c
diff options
context:
space:
mode:
authorMitchel Humpherys <mitchelh@codeaurora.org>2015-05-01 17:13:21 -0700
committerDavid Keitel <dkeitel@codeaurora.org>2016-03-22 11:12:24 -0700
commitb9aa392f2baa3171fc4f0f9c11ee123d4a7d3b80 (patch)
treed8bad02e34e8339e19eb36f3c158bc33d6e4f99d /drivers/iommu/iommu.c
parent66c6b1c4f56423581c005658a368a32b59261b6e (diff)
iommu: export iommu_pgsize
It can be useful in IOMMU drivers. Export it. Change-Id: I4c423d256312250f1e33ca8d64dfe1626f008b5e Signed-off-by: Mitchel Humpherys <mitchelh@codeaurora.org>
Diffstat (limited to 'drivers/iommu/iommu.c')
-rw-r--r--drivers/iommu/iommu.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c
index ff9dc5b35375..3af55ad7e308 100644
--- a/drivers/iommu/iommu.c
+++ b/drivers/iommu/iommu.c
@@ -991,8 +991,8 @@ 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,
- unsigned long addr_merge, size_t size)
+size_t iommu_pgsize(unsigned long pgsize_bitmap,
+ unsigned long addr_merge, size_t size)
{
unsigned int pgsize_idx;
size_t pgsize;
@@ -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)