xref: /nrf52832-nimble/rt-thread/components/lwp/lwp_memheap.h (revision 104654410c56c573564690304ae786df310c91fc)
1 /*
2  * Copyright (c) 2006-2018, RT-Thread Development Team
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  *
6  * Change Logs:
7  * Date           Author       Notes
8  * 2018-06-10     Bernard      first version
9  */
10 
11 #ifndef __LWP_MEMHEAP_H__
12 #define __LWP_MEMHEAP_H__
13 
14 #include <stdint.h>
15 #include <rtthread.h>
16 
17 /**
18  * memory item on the heap
19  */
20 struct rt_lwp_memheap_item
21 {
22     rt_uint32_t                 magic;                  /**< magic number for memheap */
23     struct rt_lwp_memheap      *pool_ptr;               /**< point of pool */
24 
25     struct rt_lwp_memheap_item *next;                   /**< next memheap item */
26     struct rt_lwp_memheap_item *prev;                   /**< prev memheap item */
27 
28     struct rt_lwp_memheap_item *next_free;              /**< next free memheap item */
29     struct rt_lwp_memheap_item *prev_free;              /**< prev free memheap item */
30 };
31 
32 /**
33  * Base structure of memory heap object
34  */
35 struct rt_lwp_memheap
36 {
37     struct rt_object        parent;                     /**< inherit from rt_object */
38 
39     void                   *start_addr;                 /**< pool start address and size */
40 
41     rt_uint32_t             pool_size;                  /**< pool size */
42     rt_uint32_t             available_size;             /**< available size */
43     rt_uint32_t             max_used_size;              /**< maximum allocated size */
44 
45     struct rt_lwp_memheap_item *block_list;             /**< used block list */
46     struct rt_lwp_memheap_item *free_list;              /**< free block list */
47     struct rt_lwp_memheap_item  free_header;            /**< free block list header */
48 
49     struct rt_semaphore     lock;                       /**< semaphore lock */
50 
51     rt_list_t mlist;
52 };
53 
54 extern rt_err_t rt_lwp_memheap_init(struct rt_lwp_memheap *memheap, const char *name, void *start_addr, rt_uint32_t size);
55 extern void *rt_lwp_memheap_alloc(struct rt_lwp_memheap *heap, rt_uint32_t size);
56 extern void rt_lwp_memheap_free(void *ptr);
57 extern void *rt_lwp_memheap_realloc(struct rt_lwp_memheap *heap, void *ptr, rt_size_t newsize);
58 extern rt_bool_t rt_lwp_memheap_is_empty(struct rt_lwp_memheap *memheap);
59 extern rt_bool_t rt_lwp_memheap_unavailable_size_get(void);
60 
61 #endif
62