root/include/linux/iommu-helper.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. iommu_device_max_index
  2. iommu_is_span_boundary
  3. iommu_num_pages

   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 static inline int iommu_is_span_boundary(unsigned int index, unsigned int nr,
  19                 unsigned long shift, unsigned long boundary_size)
  20 {
  21         BUG_ON(!is_power_of_2(boundary_size));
  22 
  23         shift = (shift + index) & (boundary_size - 1);
  24         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 static inline unsigned long iommu_num_pages(unsigned long addr,
  34                                             unsigned long len,
  35                                             unsigned long io_page_size)
  36 {
  37         unsigned long size = (addr & (io_page_size - 1)) + len;
  38 
  39         return DIV_ROUND_UP(size, io_page_size);
  40 }
  41 
  42 #endif

/* [<][>][^][v][top][bottom][index][help] */