1*10465441SEvalZero /* 2*10465441SEvalZero * JFFS2 -- Journalling Flash File System, Version 2. 3*10465441SEvalZero * 4*10465441SEvalZero * Copyright (C) 2001-2003 Free Software Foundation, Inc. 5*10465441SEvalZero * 6*10465441SEvalZero * Created by David Woodhouse <[email protected]> 7*10465441SEvalZero * 8*10465441SEvalZero * For licensing information, see the file 'LICENCE' in this directory. 9*10465441SEvalZero * 10*10465441SEvalZero * $Id: malloc-ecos.c,v 1.4 2003/11/26 15:55:35 dwmw2 Exp $ 11*10465441SEvalZero * 12*10465441SEvalZero */ 13*10465441SEvalZero 14*10465441SEvalZero #include <linux/kernel.h> 15*10465441SEvalZero #include <cyg/hal/drv_api.h> 16*10465441SEvalZero #include "nodelist.h" 17*10465441SEvalZero 18*10465441SEvalZero #if !defined(CYGNUM_FS_JFFS2_RAW_NODE_REF_CACHE_POOL_SIZE) 19*10465441SEvalZero # define CYGNUM_FS_JFFS2_RAW_NODE_REF_CACHE_POOL_SIZE 0 20*10465441SEvalZero #endif 21*10465441SEvalZero jffs2_alloc_full_dirent(int namesize)22*10465441SEvalZerostruct jffs2_full_dirent *jffs2_alloc_full_dirent(int namesize) 23*10465441SEvalZero { 24*10465441SEvalZero return rt_malloc(sizeof(struct jffs2_full_dirent) + namesize); 25*10465441SEvalZero } 26*10465441SEvalZero jffs2_free_full_dirent(struct jffs2_full_dirent * x)27*10465441SEvalZerovoid jffs2_free_full_dirent(struct jffs2_full_dirent *x) 28*10465441SEvalZero { 29*10465441SEvalZero rt_free(x); 30*10465441SEvalZero } 31*10465441SEvalZero jffs2_alloc_full_dnode(void)32*10465441SEvalZerostruct jffs2_full_dnode *jffs2_alloc_full_dnode(void) 33*10465441SEvalZero { 34*10465441SEvalZero return rt_malloc(sizeof(struct jffs2_full_dnode)); 35*10465441SEvalZero } 36*10465441SEvalZero jffs2_free_full_dnode(struct jffs2_full_dnode * x)37*10465441SEvalZerovoid jffs2_free_full_dnode(struct jffs2_full_dnode *x) 38*10465441SEvalZero { 39*10465441SEvalZero rt_free(x); 40*10465441SEvalZero } 41*10465441SEvalZero jffs2_alloc_raw_dirent(void)42*10465441SEvalZerostruct jffs2_raw_dirent *jffs2_alloc_raw_dirent(void) 43*10465441SEvalZero { 44*10465441SEvalZero return rt_malloc(sizeof(struct jffs2_raw_dirent)); 45*10465441SEvalZero } 46*10465441SEvalZero jffs2_free_raw_dirent(struct jffs2_raw_dirent * x)47*10465441SEvalZerovoid jffs2_free_raw_dirent(struct jffs2_raw_dirent *x) 48*10465441SEvalZero { 49*10465441SEvalZero rt_free(x); 50*10465441SEvalZero } 51*10465441SEvalZero jffs2_alloc_raw_inode(void)52*10465441SEvalZerostruct jffs2_raw_inode *jffs2_alloc_raw_inode(void) 53*10465441SEvalZero { 54*10465441SEvalZero return rt_malloc(sizeof(struct jffs2_raw_inode)); 55*10465441SEvalZero } 56*10465441SEvalZero jffs2_free_raw_inode(struct jffs2_raw_inode * x)57*10465441SEvalZerovoid jffs2_free_raw_inode(struct jffs2_raw_inode *x) 58*10465441SEvalZero { 59*10465441SEvalZero rt_free(x); 60*10465441SEvalZero } 61*10465441SEvalZero jffs2_alloc_tmp_dnode_info(void)62*10465441SEvalZerostruct jffs2_tmp_dnode_info *jffs2_alloc_tmp_dnode_info(void) 63*10465441SEvalZero { 64*10465441SEvalZero return rt_malloc(sizeof(struct jffs2_tmp_dnode_info)); 65*10465441SEvalZero } 66*10465441SEvalZero jffs2_free_tmp_dnode_info(struct jffs2_tmp_dnode_info * x)67*10465441SEvalZerovoid jffs2_free_tmp_dnode_info(struct jffs2_tmp_dnode_info *x) 68*10465441SEvalZero { 69*10465441SEvalZero rt_free(x); 70*10465441SEvalZero } 71*10465441SEvalZero jffs2_alloc_node_frag(void)72*10465441SEvalZerostruct jffs2_node_frag *jffs2_alloc_node_frag(void) 73*10465441SEvalZero { 74*10465441SEvalZero return rt_malloc(sizeof(struct jffs2_node_frag)); 75*10465441SEvalZero } 76*10465441SEvalZero jffs2_free_node_frag(struct jffs2_node_frag * x)77*10465441SEvalZerovoid jffs2_free_node_frag(struct jffs2_node_frag *x) 78*10465441SEvalZero { 79*10465441SEvalZero rt_free(x); 80*10465441SEvalZero } 81*10465441SEvalZero 82*10465441SEvalZero #if CYGNUM_FS_JFFS2_RAW_NODE_REF_CACHE_POOL_SIZE == 0 83*10465441SEvalZero jffs2_create_slab_caches(void)84*10465441SEvalZeroint jffs2_create_slab_caches(void) 85*10465441SEvalZero { 86*10465441SEvalZero return 0; 87*10465441SEvalZero } 88*10465441SEvalZero jffs2_destroy_slab_caches(void)89*10465441SEvalZerovoid jffs2_destroy_slab_caches(void) 90*10465441SEvalZero { 91*10465441SEvalZero } 92*10465441SEvalZero jffs2_alloc_raw_node_ref(void)93*10465441SEvalZerostruct jffs2_raw_node_ref *jffs2_alloc_raw_node_ref(void) 94*10465441SEvalZero { 95*10465441SEvalZero return rt_malloc(sizeof(struct jffs2_raw_node_ref)); 96*10465441SEvalZero } 97*10465441SEvalZero jffs2_free_raw_node_ref(struct jffs2_raw_node_ref * x)98*10465441SEvalZerovoid jffs2_free_raw_node_ref(struct jffs2_raw_node_ref *x) 99*10465441SEvalZero { 100*10465441SEvalZero rt_free(x); 101*10465441SEvalZero } 102*10465441SEvalZero 103*10465441SEvalZero #else // CYGNUM_FS_JFFS2_RAW_NODE_REF_CACHE_POOL_SIZE == 0 104*10465441SEvalZero 105*10465441SEvalZero static struct jffs2_raw_node_ref 106*10465441SEvalZero rnr_pool[CYGNUM_FS_JFFS2_RAW_NODE_REF_CACHE_POOL_SIZE] __attribute__ ((aligned (4))), 107*10465441SEvalZero * first = NULL; 108*10465441SEvalZero static cyg_drv_mutex_t mutex; 109*10465441SEvalZero jffs2_create_slab_caches(void)110*10465441SEvalZeroint jffs2_create_slab_caches(void) 111*10465441SEvalZero { 112*10465441SEvalZero struct jffs2_raw_node_ref * p; 113*10465441SEvalZero cyg_drv_mutex_init(&mutex); 114*10465441SEvalZero for ( 115*10465441SEvalZero p = rnr_pool; 116*10465441SEvalZero p < rnr_pool + CYGNUM_FS_JFFS2_RAW_NODE_REF_CACHE_POOL_SIZE - 1; 117*10465441SEvalZero p++ 118*10465441SEvalZero ) 119*10465441SEvalZero p->next_phys = p + 1; 120*10465441SEvalZero rnr_pool[CYGNUM_FS_JFFS2_RAW_NODE_REF_CACHE_POOL_SIZE - 1].next_phys = NULL; 121*10465441SEvalZero first = &rnr_pool[0]; 122*10465441SEvalZero return 0; 123*10465441SEvalZero } 124*10465441SEvalZero jffs2_destroy_slab_caches(void)125*10465441SEvalZerovoid jffs2_destroy_slab_caches(void) 126*10465441SEvalZero { 127*10465441SEvalZero } 128*10465441SEvalZero jffs2_alloc_raw_node_ref(void)129*10465441SEvalZerostruct jffs2_raw_node_ref *jffs2_alloc_raw_node_ref(void) 130*10465441SEvalZero { 131*10465441SEvalZero struct jffs2_raw_node_ref * p; 132*10465441SEvalZero 133*10465441SEvalZero cyg_drv_mutex_lock(&mutex); 134*10465441SEvalZero p = first; 135*10465441SEvalZero if (p != NULL) 136*10465441SEvalZero first = p->next_phys; 137*10465441SEvalZero cyg_drv_mutex_unlock(&mutex); 138*10465441SEvalZero return p; 139*10465441SEvalZero } 140*10465441SEvalZero jffs2_free_raw_node_ref(struct jffs2_raw_node_ref * x)141*10465441SEvalZerovoid jffs2_free_raw_node_ref(struct jffs2_raw_node_ref *x) 142*10465441SEvalZero { 143*10465441SEvalZero cyg_drv_mutex_lock(&mutex); 144*10465441SEvalZero x->next_phys = first; 145*10465441SEvalZero first = x; 146*10465441SEvalZero cyg_drv_mutex_unlock(&mutex); 147*10465441SEvalZero } 148*10465441SEvalZero 149*10465441SEvalZero #endif // CYGNUM_FS_JFFS2_RAW_NODE_REF_CACHE_POOL_SIZE == 0 150*10465441SEvalZero jffs2_alloc_inode_cache(void)151*10465441SEvalZerostruct jffs2_inode_cache *jffs2_alloc_inode_cache(void) 152*10465441SEvalZero { 153*10465441SEvalZero struct jffs2_inode_cache *ret = rt_malloc(sizeof(struct jffs2_inode_cache)); 154*10465441SEvalZero D1(printk(KERN_DEBUG "Allocated inocache at %p\n", ret)); 155*10465441SEvalZero return ret; 156*10465441SEvalZero } 157*10465441SEvalZero jffs2_free_inode_cache(struct jffs2_inode_cache * x)158*10465441SEvalZerovoid jffs2_free_inode_cache(struct jffs2_inode_cache *x) 159*10465441SEvalZero { 160*10465441SEvalZero D1(printk(KERN_DEBUG "Freeing inocache at %p\n", x)); 161*10465441SEvalZero rt_free(x); 162*10465441SEvalZero } 163*10465441SEvalZero 164