mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-28 20:02:17 +00:00
![Andy Shevchenko](/assets/img/avatar_default.png)
kernel.h is being used as a dump for all kinds of stuff for a long time. Here is the attempt to start cleaning it up by splitting out mathematical helpers. At the same time convert users in header and lib folder to use new header. Though for time being include new header back to kernel.h to avoid twisted indirected includes for existing users. [sfr@canb.auug.org.au: fix powerpc build] Link: https://lkml.kernel.org/r/20201029150809.13059608@canb.auug.org.au Link: https://lkml.kernel.org/r/20201028173212.41768-1-andriy.shevchenko@linux.intel.com Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Cc: "Paul E. McKenney" <paulmck@kernel.org> Cc: Trond Myklebust <trond.myklebust@hammerspace.com> Cc: Jeff Layton <jlayton@kernel.org> Cc: Rasmus Villemoes <linux@rasmusvillemoes.dk> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
44 lines
1.1 KiB
C
44 lines
1.1 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
#ifndef _LINUX_IOMMU_HELPER_H
|
|
#define _LINUX_IOMMU_HELPER_H
|
|
|
|
#include <linux/bug.h>
|
|
#include <linux/log2.h>
|
|
#include <linux/math.h>
|
|
#include <linux/types.h>
|
|
|
|
static inline unsigned long iommu_device_max_index(unsigned long size,
|
|
unsigned long offset,
|
|
u64 dma_mask)
|
|
{
|
|
if (size + offset > dma_mask)
|
|
return dma_mask - offset + 1;
|
|
else
|
|
return size;
|
|
}
|
|
|
|
static inline int iommu_is_span_boundary(unsigned int index, unsigned int nr,
|
|
unsigned long shift, unsigned long boundary_size)
|
|
{
|
|
BUG_ON(!is_power_of_2(boundary_size));
|
|
|
|
shift = (shift + index) & (boundary_size - 1);
|
|
return shift + nr > boundary_size;
|
|
}
|
|
|
|
extern unsigned long iommu_area_alloc(unsigned long *map, unsigned long size,
|
|
unsigned long start, unsigned int nr,
|
|
unsigned long shift,
|
|
unsigned long boundary_size,
|
|
unsigned long align_mask);
|
|
|
|
static inline unsigned long iommu_num_pages(unsigned long addr,
|
|
unsigned long len,
|
|
unsigned long io_page_size)
|
|
{
|
|
unsigned long size = (addr & (io_page_size - 1)) + len;
|
|
|
|
return DIV_ROUND_UP(size, io_page_size);
|
|
}
|
|
|
|
#endif
|