1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun #ifndef __MM_CMA_H__ 3*4882a593Smuzhiyun #define __MM_CMA_H__ 4*4882a593Smuzhiyun 5*4882a593Smuzhiyun #include <linux/debugfs.h> 6*4882a593Smuzhiyun #include <linux/kobject.h> 7*4882a593Smuzhiyun #include <linux/android_vendor.h> 8*4882a593Smuzhiyun 9*4882a593Smuzhiyun struct cma_kobject { 10*4882a593Smuzhiyun struct kobject kobj; 11*4882a593Smuzhiyun struct cma *cma; 12*4882a593Smuzhiyun }; 13*4882a593Smuzhiyun 14*4882a593Smuzhiyun struct cma { 15*4882a593Smuzhiyun unsigned long base_pfn; 16*4882a593Smuzhiyun unsigned long count; 17*4882a593Smuzhiyun unsigned long *bitmap; 18*4882a593Smuzhiyun unsigned int order_per_bit; /* Order of pages represented by one bit */ 19*4882a593Smuzhiyun struct mutex lock; 20*4882a593Smuzhiyun #ifdef CONFIG_CMA_DEBUGFS 21*4882a593Smuzhiyun struct hlist_head mem_head; 22*4882a593Smuzhiyun spinlock_t mem_head_lock; 23*4882a593Smuzhiyun struct debugfs_u32_array dfs_bitmap; 24*4882a593Smuzhiyun #endif 25*4882a593Smuzhiyun char name[CMA_MAX_NAME]; 26*4882a593Smuzhiyun #ifdef CONFIG_CMA_SYSFS 27*4882a593Smuzhiyun /* the number of CMA page successful allocations */ 28*4882a593Smuzhiyun atomic64_t nr_pages_succeeded; 29*4882a593Smuzhiyun /* the number of CMA page allocation failures */ 30*4882a593Smuzhiyun atomic64_t nr_pages_failed; 31*4882a593Smuzhiyun /* kobject requires dynamic object */ 32*4882a593Smuzhiyun struct cma_kobject *cma_kobj; 33*4882a593Smuzhiyun #endif 34*4882a593Smuzhiyun ANDROID_OEM_DATA_ARRAY(1, 4); 35*4882a593Smuzhiyun }; 36*4882a593Smuzhiyun 37*4882a593Smuzhiyun extern struct cma cma_areas[MAX_CMA_AREAS]; 38*4882a593Smuzhiyun extern unsigned cma_area_count; 39*4882a593Smuzhiyun cma_bitmap_maxno(struct cma * cma)40*4882a593Smuzhiyunstatic inline unsigned long cma_bitmap_maxno(struct cma *cma) 41*4882a593Smuzhiyun { 42*4882a593Smuzhiyun return cma->count >> cma->order_per_bit; 43*4882a593Smuzhiyun } 44*4882a593Smuzhiyun 45*4882a593Smuzhiyun #ifdef CONFIG_CMA_SYSFS 46*4882a593Smuzhiyun void cma_sysfs_account_success_pages(struct cma *cma, unsigned long nr_pages); 47*4882a593Smuzhiyun void cma_sysfs_account_fail_pages(struct cma *cma, unsigned long nr_pages); 48*4882a593Smuzhiyun #else cma_sysfs_account_success_pages(struct cma * cma,unsigned long nr_pages)49*4882a593Smuzhiyunstatic inline void cma_sysfs_account_success_pages(struct cma *cma, 50*4882a593Smuzhiyun unsigned long nr_pages) {}; cma_sysfs_account_fail_pages(struct cma * cma,unsigned long nr_pages)51*4882a593Smuzhiyunstatic inline void cma_sysfs_account_fail_pages(struct cma *cma, 52*4882a593Smuzhiyun unsigned long nr_pages) {}; 53*4882a593Smuzhiyun #endif 54*4882a593Smuzhiyun #endif 55