root/lib/iommu-helper.c

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

DEFINITIONS

This source file includes following definitions.
  1. iommu_area_alloc

   1 // SPDX-License-Identifier: GPL-2.0
   2 /*
   3  * IOMMU helper functions for the free area management
   4  */
   5 
   6 #include <linux/bitmap.h>
   7 #include <linux/iommu-helper.h>
   8 
   9 unsigned long iommu_area_alloc(unsigned long *map, unsigned long size,
  10                                unsigned long start, unsigned int nr,
  11                                unsigned long shift, unsigned long boundary_size,
  12                                unsigned long align_mask)
  13 {
  14         unsigned long index;
  15 
  16         /* We don't want the last of the limit */
  17         size -= 1;
  18 again:
  19         index = bitmap_find_next_zero_area(map, size, start, nr, align_mask);
  20         if (index < size) {
  21                 if (iommu_is_span_boundary(index, nr, shift, boundary_size)) {
  22                         start = ALIGN(shift + index, boundary_size) - shift;
  23                         goto again;
  24                 }
  25                 bitmap_set(map, index, nr);
  26                 return index;
  27         }
  28         return -1;
  29 }

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