blob: 8f727480c0d05135a39132798b9dd65238c1f65b [file] [edit]
/* SPDX-License-Identifier: GPL-2.0 */
#ifndef __GCMA_H__
#define __GCMA_H__
#include <linux/types.h>
#ifdef CONFIG_GCMA
enum gcma_stat_type {
ALLOCATED_PAGE,
STORED_PAGE,
LOADED_PAGE,
EVICTED_PAGE,
CACHED_PAGE,
DISCARDED_PAGE,
TOTAL_PAGE,
NUM_OF_GCMA_STAT,
};
#ifdef CONFIG_GCMA_SYSFS
u64 gcma_stat_get(enum gcma_stat_type type);
#else
static inline u64 gcma_stat_get(enum gcma_stat_type type) { return 0; }
#endif
/*
* NOTE: allocated pages are still marked reserved and when freeing them
* the caller should ensure they are isolated and not referenced by anyone
* other than the caller.
*/
extern void gcma_alloc_range(unsigned long start_pfn, unsigned long end_pfn,
gfp_t gfp);
extern void gcma_free_range(unsigned long start_pfn, unsigned long end_pfn);
extern int register_gcma_area(const char *name, phys_addr_t base,
phys_addr_t size);
#else
static inline void gcma_alloc_range(unsigned long start_pfn,
unsigned long end_pfn,
gfp_t gfp) {}
static inline void gcma_free_range(unsigned long start_pfn,
unsigned long end_pfn) {}
static inline int register_gcma_area(const char *name, phys_addr_t base,
phys_addr_t size) { return -EINVAL; }
#endif
#endif