xref: /nrf52832-nimble/rt-thread/components/dfs/filesystems/jffs2/src/malloc-ecos.c (revision 104654410c56c573564690304ae786df310c91fc)
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*10465441SEvalZero struct 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*10465441SEvalZero void 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*10465441SEvalZero struct 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*10465441SEvalZero void 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*10465441SEvalZero struct 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*10465441SEvalZero void 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*10465441SEvalZero struct 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*10465441SEvalZero void 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*10465441SEvalZero struct 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*10465441SEvalZero void 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*10465441SEvalZero struct 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*10465441SEvalZero void 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*10465441SEvalZero int jffs2_create_slab_caches(void)
85*10465441SEvalZero {
86*10465441SEvalZero 	return 0;
87*10465441SEvalZero }
88*10465441SEvalZero 
jffs2_destroy_slab_caches(void)89*10465441SEvalZero void jffs2_destroy_slab_caches(void)
90*10465441SEvalZero {
91*10465441SEvalZero }
92*10465441SEvalZero 
jffs2_alloc_raw_node_ref(void)93*10465441SEvalZero struct 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*10465441SEvalZero void 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*10465441SEvalZero int 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*10465441SEvalZero void jffs2_destroy_slab_caches(void)
126*10465441SEvalZero {
127*10465441SEvalZero }
128*10465441SEvalZero 
jffs2_alloc_raw_node_ref(void)129*10465441SEvalZero struct 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*10465441SEvalZero void 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*10465441SEvalZero struct 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*10465441SEvalZero void 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