1*bcf1647dSMinchan Kim /* 2*bcf1647dSMinchan Kim * zsmalloc memory allocator 3*bcf1647dSMinchan Kim * 4*bcf1647dSMinchan Kim * Copyright (C) 2011 Nitin Gupta 5*bcf1647dSMinchan Kim * 6*bcf1647dSMinchan Kim * This code is released using a dual license strategy: BSD/GPL 7*bcf1647dSMinchan Kim * You can choose the license that better fits your requirements. 8*bcf1647dSMinchan Kim * 9*bcf1647dSMinchan Kim * Released under the terms of 3-clause BSD License 10*bcf1647dSMinchan Kim * Released under the terms of GNU General Public License Version 2.0 11*bcf1647dSMinchan Kim */ 12*bcf1647dSMinchan Kim 13*bcf1647dSMinchan Kim #ifndef _ZS_MALLOC_H_ 14*bcf1647dSMinchan Kim #define _ZS_MALLOC_H_ 15*bcf1647dSMinchan Kim 16*bcf1647dSMinchan Kim #include <linux/types.h> 17*bcf1647dSMinchan Kim 18*bcf1647dSMinchan Kim /* 19*bcf1647dSMinchan Kim * zsmalloc mapping modes 20*bcf1647dSMinchan Kim * 21*bcf1647dSMinchan Kim * NOTE: These only make a difference when a mapped object spans pages. 22*bcf1647dSMinchan Kim * They also have no effect when PGTABLE_MAPPING is selected. 23*bcf1647dSMinchan Kim */ 24*bcf1647dSMinchan Kim enum zs_mapmode { 25*bcf1647dSMinchan Kim ZS_MM_RW, /* normal read-write mapping */ 26*bcf1647dSMinchan Kim ZS_MM_RO, /* read-only (no copy-out at unmap time) */ 27*bcf1647dSMinchan Kim ZS_MM_WO /* write-only (no copy-in at map time) */ 28*bcf1647dSMinchan Kim /* 29*bcf1647dSMinchan Kim * NOTE: ZS_MM_WO should only be used for initializing new 30*bcf1647dSMinchan Kim * (uninitialized) allocations. Partial writes to already 31*bcf1647dSMinchan Kim * initialized allocations should use ZS_MM_RW to preserve the 32*bcf1647dSMinchan Kim * existing data. 33*bcf1647dSMinchan Kim */ 34*bcf1647dSMinchan Kim }; 35*bcf1647dSMinchan Kim 36*bcf1647dSMinchan Kim struct zs_pool; 37*bcf1647dSMinchan Kim 38*bcf1647dSMinchan Kim struct zs_pool *zs_create_pool(gfp_t flags); 39*bcf1647dSMinchan Kim void zs_destroy_pool(struct zs_pool *pool); 40*bcf1647dSMinchan Kim 41*bcf1647dSMinchan Kim unsigned long zs_malloc(struct zs_pool *pool, size_t size); 42*bcf1647dSMinchan Kim void zs_free(struct zs_pool *pool, unsigned long obj); 43*bcf1647dSMinchan Kim 44*bcf1647dSMinchan Kim void *zs_map_object(struct zs_pool *pool, unsigned long handle, 45*bcf1647dSMinchan Kim enum zs_mapmode mm); 46*bcf1647dSMinchan Kim void zs_unmap_object(struct zs_pool *pool, unsigned long handle); 47*bcf1647dSMinchan Kim 48*bcf1647dSMinchan Kim u64 zs_get_total_size_bytes(struct zs_pool *pool); 49*bcf1647dSMinchan Kim 50*bcf1647dSMinchan Kim #endif 51