#include <linux/cma.h>
#include <linux/debugfs.h>
#include <linux/dma-map-ops.h>
#include <linux/dma-direct.h>
#include <linux/init.h>
#include <linux/genalloc.h>
#include <linux/set_memory.h>
#include <linux/slab.h>
#include <linux/workqueue.h>
static struct gen_pool *atomic_pool_dma __ro_after_init;
static unsigned long pool_size_dma;
static struct gen_pool *atomic_pool_dma32 __ro_after_init;
static unsigned long pool_size_dma32;
static struct gen_pool *atomic_pool_kernel __ro_after_init;
static unsigned long pool_size_kernel;
static size_t atomic_pool_size;
static struct work_struct atomic_pool_work;
static int __init early_coherent_pool(char *p)
{ … }
early_param(…);
static void __init dma_atomic_pool_debugfs_init(void)
{ … }
static void dma_atomic_pool_size_add(gfp_t gfp, size_t size)
{ … }
static bool cma_in_zone(gfp_t gfp)
{ … }
static int atomic_pool_expand(struct gen_pool *pool, size_t pool_size,
gfp_t gfp)
{ … }
static void atomic_pool_resize(struct gen_pool *pool, gfp_t gfp)
{ … }
static void atomic_pool_work_fn(struct work_struct *work)
{ … }
static __init struct gen_pool *__dma_atomic_pool_init(size_t pool_size,
gfp_t gfp)
{ … }
static int __init dma_atomic_pool_init(void)
{ … }
postcore_initcall(dma_atomic_pool_init);
static inline struct gen_pool *dma_guess_pool(struct gen_pool *prev, gfp_t gfp)
{ … }
static struct page *__dma_alloc_from_pool(struct device *dev, size_t size,
struct gen_pool *pool, void **cpu_addr,
bool (*phys_addr_ok)(struct device *, phys_addr_t, size_t))
{ … }
struct page *dma_alloc_from_pool(struct device *dev, size_t size,
void **cpu_addr, gfp_t gfp,
bool (*phys_addr_ok)(struct device *, phys_addr_t, size_t))
{ … }
bool dma_free_from_pool(struct device *dev, void *start, size_t size)
{ … }