Merge remote-tracking branch 'regulator/fix/qcom-spmi' into regulator-linus
[sfrench/cifs-2.6.git] / include / linux / iommu-helper.h
1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef _LINUX_IOMMU_HELPER_H
3 #define _LINUX_IOMMU_HELPER_H
4
5 #include <linux/kernel.h>
6
7 static inline unsigned long iommu_device_max_index(unsigned long size,
8                                                    unsigned long offset,
9                                                    u64 dma_mask)
10 {
11         if (size + offset > dma_mask)
12                 return dma_mask - offset + 1;
13         else
14                 return size;
15 }
16
17 extern int iommu_is_span_boundary(unsigned int index, unsigned int nr,
18                                   unsigned long shift,
19                                   unsigned long boundary_size);
20 extern unsigned long iommu_area_alloc(unsigned long *map, unsigned long size,
21                                       unsigned long start, unsigned int nr,
22                                       unsigned long shift,
23                                       unsigned long boundary_size,
24                                       unsigned long align_mask);
25
26 static inline unsigned long iommu_num_pages(unsigned long addr,
27                                             unsigned long len,
28                                             unsigned long io_page_size)
29 {
30         unsigned long size = (addr & (io_page_size - 1)) + len;
31
32         return DIV_ROUND_UP(size, io_page_size);
33 }
34
35 #endif