summaryrefslogtreecommitdiff
path: root/firmware/core_alloc.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/core_alloc.c')
-rw-r--r--firmware/core_alloc.c57
1 files changed, 57 insertions, 0 deletions
diff --git a/firmware/core_alloc.c b/firmware/core_alloc.c
new file mode 100644
index 0000000000..75dfc75b86
--- /dev/null
+++ b/firmware/core_alloc.c
@@ -0,0 +1,57 @@
1
2#include <string.h>
3#include "core_alloc.h"
4#include "buflib.h"
5#include "buffer.h"
6
7/* not static so it can be discovered by core_get_data() */
8struct buflib_context core_ctx;
9
10void core_allocator_init(void)
11{
12 buffer_init();
13 size_t size;
14 void *start = buffer_get_buffer(&size);
15 buflib_init(&core_ctx, start, size);
16 buffer_release_buffer(size);
17}
18
19int core_alloc(const char* name, size_t size)
20{
21 return buflib_alloc_ex(&core_ctx, size, name, NULL);
22}
23
24int core_alloc_ex(const char* name, size_t size, struct buflib_callbacks *ops)
25{
26 return buflib_alloc_ex(&core_ctx, size, name, ops);
27}
28
29size_t core_available(void)
30{
31 return buflib_available(&core_ctx);
32}
33
34int core_free(int handle)
35{
36 return buflib_free(&core_ctx, handle);
37}
38
39int core_alloc_maximum(const char* name, size_t *size, struct buflib_callbacks *ops)
40{
41 return buflib_alloc_maximum(&core_ctx, name, size, ops);
42}
43
44bool core_shrink(int handle, void* new_start, size_t new_size)
45{
46 return buflib_shrink(&core_ctx, handle, new_start, new_size);
47}
48
49int core_get_num_blocks(void)
50{
51 return buflib_get_num_blocks(&core_ctx);
52}
53
54void core_print_block_at(int block_num, char* buf, size_t bufsize)
55{
56 buflib_print_block_at(&core_ctx, block_num, buf, bufsize);
57}