Branch data Line data Source code
1 : : /* SPDX-License-Identifier: GPL-2.0 */ 2 : : #ifndef _LINUX_IOMMU_HELPER_H 3 : : #define _LINUX_IOMMU_HELPER_H 4 : : 5 : : #include <linux/bug.h> 6 : : #include <linux/kernel.h> 7 : : 8 : : static inline unsigned long iommu_device_max_index(unsigned long size, 9 : : unsigned long offset, 10 : : u64 dma_mask) 11 : : { 12 : : if (size + offset > dma_mask) 13 : : return dma_mask - offset + 1; 14 : : else 15 : : return size; 16 : : } 17 : : 18 : 0 : static inline int iommu_is_span_boundary(unsigned int index, unsigned int nr, 19 : : unsigned long shift, unsigned long boundary_size) 20 : : { 21 [ # # # # ]: 0 : BUG_ON(!is_power_of_2(boundary_size)); 22 : : 23 : 0 : shift = (shift + index) & (boundary_size - 1); 24 : 0 : return shift + nr > boundary_size; 25 : : } 26 : : 27 : : extern unsigned long iommu_area_alloc(unsigned long *map, unsigned long size, 28 : : unsigned long start, unsigned int nr, 29 : : unsigned long shift, 30 : : unsigned long boundary_size, 31 : : unsigned long align_mask); 32 : : 33 : 0 : static inline unsigned long iommu_num_pages(unsigned long addr, 34 : : unsigned long len, 35 : : unsigned long io_page_size) 36 : : { 37 : 0 : unsigned long size = (addr & (io_page_size - 1)) + len; 38 : : 39 [ # # ]: 0 : return DIV_ROUND_UP(size, io_page_size); 40 : : } 41 : : 42 : : #endif