182 |
{ |
{ |
183 |
struct memp *memp; |
struct memp *memp; |
184 |
void *mem; |
void *mem; |
185 |
|
#ifdef SYS_LIGHTWEIGHT_PROT |
186 |
|
SYS_ARCH_DECL_PROTECT(old_level); |
187 |
|
#endif |
188 |
|
|
189 |
LWIP_ASSERT("memp_malloc: type < MEMP_MAX", type < MEMP_MAX); |
LWIP_ASSERT("memp_malloc: type < MEMP_MAX", type < MEMP_MAX); |
190 |
|
|
191 |
|
#ifdef SYS_LIGHTWEIGHT_PROT |
192 |
|
SYS_ARCH_PROTECT(old_level); |
193 |
|
#else /* SYS_LIGHTWEIGHT_PROT */ |
194 |
|
sys_sem_wait(mutex); |
195 |
|
#endif /* SYS_LIGHTWEIGHT_PROT */ |
196 |
|
|
197 |
memp = memp_tab[type]; |
memp = memp_tab[type]; |
198 |
|
|
199 |
if (memp != NULL) { |
if (memp != NULL) { |
205 |
lwip_stats.memp[type].max = lwip_stats.memp[type].used; |
lwip_stats.memp[type].max = lwip_stats.memp[type].used; |
206 |
} |
} |
207 |
#endif /* MEMP_STATS */ |
#endif /* MEMP_STATS */ |
208 |
|
#ifdef SYS_LIGHTWEIGHT_PROT |
209 |
|
SYS_ARCH_UNPROTECT(old_level); |
210 |
|
#else /* SYS_LIGHTWEIGHT_PROT */ |
211 |
|
sys_sem_signal(mutex); |
212 |
|
#endif /* SYS_LIGHTWEIGHT_PROT */ |
213 |
LWIP_ASSERT("memp_malloc: memp properly aligned", |
LWIP_ASSERT("memp_malloc: memp properly aligned", |
214 |
((u32_t)MEM_ALIGN((u8_t *)memp + sizeof(struct memp)) % MEM_ALIGNMENT) == 0); |
((u32_t)MEM_ALIGN((u8_t *)memp + sizeof(struct memp)) % MEM_ALIGNMENT) == 0); |
215 |
|
|
222 |
#ifdef MEMP_STATS |
#ifdef MEMP_STATS |
223 |
++lwip_stats.memp[type].err; |
++lwip_stats.memp[type].err; |
224 |
#endif /* MEMP_STATS */ |
#endif /* MEMP_STATS */ |
|
return NULL; |
|
|
} |
|
|
} |
|
|
/*-----------------------------------------------------------------------------------*/ |
|
|
void * |
|
|
memp_mallocp(memp_t type) |
|
|
{ |
|
|
void *mem; |
|
|
#if SYS_LIGHTWEIGHT_PROT |
|
|
SYS_ARCH_DECL_PROTECT(old_level); |
|
|
SYS_ARCH_PROTECT(old_level); |
|
|
#else /* SYS_LIGHTWEIGHT_PROT */ |
|
|
sys_sem_wait(mutex); |
|
|
#endif /* SYS_LIGHTWEIGHT_PROT */ |
|
|
|
|
|
mem = memp_malloc(type); |
|
|
|
|
225 |
#if SYS_LIGHTWEIGHT_PROT |
#if SYS_LIGHTWEIGHT_PROT |
226 |
SYS_ARCH_UNPROTECT(old_level); |
SYS_ARCH_UNPROTECT(old_level); |
227 |
#else /* SYS_LIGHTWEIGHT_PROT */ |
#else /* SYS_LIGHTWEIGHT_PROT */ |
228 |
sys_sem_signal(mutex); |
sys_sem_signal(mutex); |
229 |
#endif /* SYS_LIGHTWEIGHT_PROT */ |
#endif /* SYS_LIGHTWEIGHT_PROT */ |
230 |
return mem; |
return NULL; |
231 |
|
} |
232 |
} |
} |
233 |
/*-----------------------------------------------------------------------------------*/ |
/*-----------------------------------------------------------------------------------*/ |
234 |
void |
void |
235 |
memp_free(memp_t type, void *mem) |
memp_free(memp_t type, void *mem) |
236 |
{ |
{ |
237 |
struct memp *memp; |
struct memp *memp; |
238 |
|
#ifdef SYS_LIGHTWEIGHT_PROT |
239 |
|
SYS_ARCH_DECL_PROTECT(old_level); |
240 |
|
#endif /* SYS_LIGHTWEIGHT_PROT */ |
241 |
|
|
242 |
if (mem == NULL) { |
if (mem == NULL) { |
243 |
return; |
return; |
244 |
} |
} |
245 |
memp = (struct memp *)((u8_t *)mem - sizeof(struct memp)); |
memp = (struct memp *)((u8_t *)mem - sizeof(struct memp)); |
246 |
|
|
247 |
|
#ifdef SYS_LIGHTWEIGHT_PROT |
248 |
|
SYS_ARCH_PROTECT(old_level); |
249 |
|
#else /* SYS_LIGHTWEIGHT_PROT */ |
250 |
|
sys_sem_wait(mutex); |
251 |
|
#endif /* SYS_LIGHTWEIGHT_PROT */ |
252 |
|
|
253 |
#ifdef MEMP_STATS |
#ifdef MEMP_STATS |
254 |
lwip_stats.memp[type].used--; |
lwip_stats.memp[type].used--; |
255 |
#endif /* MEMP_STATS */ |
#endif /* MEMP_STATS */ |
259 |
|
|
260 |
LWIP_ASSERT("memp sanity", memp_sanity()); |
LWIP_ASSERT("memp sanity", memp_sanity()); |
261 |
|
|
|
return; |
|
|
} |
|
|
/*-----------------------------------------------------------------------------------*/ |
|
|
void |
|
|
memp_freep(memp_t type, void *mem) |
|
|
{ |
|
|
#if SYS_LIGHTWEIGHT_PROT |
|
|
SYS_ARCH_DECL_PROTECT(old_level); |
|
|
SYS_ARCH_PROTECT(old_level); |
|
|
#else /* SYS_LIGHTWEIGHT_PROT */ |
|
|
sys_sem_wait(mutex); |
|
|
#endif /* SYS_LIGHTWEIGHT_PROT */ |
|
|
|
|
|
memp_free(type, mem); |
|
|
|
|
262 |
#if SYS_LIGHTWEIGHT_PROT |
#if SYS_LIGHTWEIGHT_PROT |
263 |
SYS_ARCH_UNPROTECT(old_level); |
SYS_ARCH_UNPROTECT(old_level); |
264 |
#else /* SYS_LIGHTWEIGHT_PROT */ |
#else /* SYS_LIGHTWEIGHT_PROT */ |
265 |
sys_sem_signal(mutex); |
sys_sem_signal(mutex); |
266 |
#endif /* SYS_LIGHTWEIGHT_PROT */ |
#endif /* SYS_LIGHTWEIGHT_PROT */ |
|
|
|
267 |
} |
} |
268 |
/*-----------------------------------------------------------------------------------*/ |
/*-----------------------------------------------------------------------------------*/ |