summaryrefslogtreecommitdiff
path: root/firmware/test/memory
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/test/memory')
-rw-r--r--firmware/test/memory/config.h2
-rw-r--r--firmware/test/memory/functions.h64
-rw-r--r--firmware/test/memory/makefile2
-rw-r--r--firmware/test/memory/types.h48
4 files changed, 68 insertions, 48 deletions
diff --git a/firmware/test/memory/config.h b/firmware/test/memory/config.h
index cb3b75f09b..a373ed6b63 100644
--- a/firmware/test/memory/config.h
+++ b/firmware/test/memory/config.h
@@ -22,6 +22,6 @@
22#ifndef __LIBRARY_MEMORY_CONFIG_H__ 22#ifndef __LIBRARY_MEMORY_CONFIG_H__
23# define __LIBRARY_MEMORY_CONFIG_H__ 23# define __LIBRARY_MEMORY_CONFIG_H__
24# define PACKAGE_NAME "memory" 24# define PACKAGE_NAME "memory"
25# define PACKAGE_VERSION "0.1.0" 25# define PACKAGE_VERSION "0.1.1"
26# define MEMORY_PAGE_USE_SPLAY_TREE 1 26# define MEMORY_PAGE_USE_SPLAY_TREE 1
27#endif \ No newline at end of file 27#endif \ No newline at end of file
diff --git a/firmware/test/memory/functions.h b/firmware/test/memory/functions.h
index e0f6aeac97..c856a934cf 100644
--- a/firmware/test/memory/functions.h
+++ b/firmware/test/memory/functions.h
@@ -21,11 +21,71 @@
21#endif 21#endif
22# ifndef __LIBRARY_MEMORY_FUNCTIONS_H__ 22# ifndef __LIBRARY_MEMORY_FUNCTIONS_H__
23# define __LIBRARY_MEMORY_FUNCTIONS_H__ 23# define __LIBRARY_MEMORY_FUNCTIONS_H__
24
25/////////////////////////////////////////////////////////////////////
26// MEMORY :
27///////////
28
24extern void memory_copy (void *target,void const *source,unsigned int count); 29extern void memory_copy (void *target,void const *source,unsigned int count);
25extern void memory_set (void *target,int byte,unsigned int count); 30extern void memory_set (void *target,int byte,unsigned int count);
26extern int memory_release_page (void *); 31
27extern void *memory_allocate_page (int); 32/////////////////////////////////////////////////////////////////////
33// MEMORY PAGE :
34////////////////
35//
36// - memory_allocate_page : allocate a page
37// - memory_release_page : release a page
38//
39
40extern int memory_release_page (void *address);
41extern void *memory_allocate_page (int order);
28extern void memory_setup (void); 42extern void memory_setup (void);
43
44//
45/////////////////////////////////////////////////////////////////////
46
47/////////////////////////////////////////////////////////////////////
48// MEMORY SLAB :
49////////////////
50//
51// - memory_grow_cache : allocate a new slab for a cache
52// - memory_shrink_cache : release free slabs from a cache
53// - memory_create_cache : create a new cache of size-fixed blocks
54// - memory_destroy_cache : destroy the cache and release all the slabs
55// - memory_cache_allocate : allocate a block from the cache
56// - memory_cache_release : release a block in the cache
57//
58
59extern struct memory_slab *memory_grow_cache (struct memory_cache *cache);
60extern int memory_shrink_cache (struct memory_cache *cache,int all);
61extern struct memory_cache *memory_create_cache (unsigned int size,int align,int flags);
62extern int memory_destroy_cache (struct memory_cache *cache);
63extern void *memory_cache_allocate (struct memory_cache *cache);
64extern int memory_cache_release (struct memory_cache *cache,void *address);
65
66//
67/////////////////////////////////////////////////////////////////////
68
69///////////////////////////////////////////////////////////////////////////////
70// MEMORY BLOCK :
71/////////////////
72//
73// - memory_allocate_small_block : allocate a small block (no page)
74// - memory_release_small_block : release a small block (no page)
75// - memory_allocate_block : allocate a block (or a page)
76// - memory_release_block : release a block (or a page)
77//
78
79extern void *memory_allocate_small_block (int order);
80extern int memory_release_small_block (int order,void *address);
81extern void *memory_allocate_block (unsigned int size);
82extern int memory_release_block (void *address);
83
84//
85/////////////////////////////////////////////////////////////////////
86
87
88
29# ifdef TEST 89# ifdef TEST
30void memory_spy_page (void *address); 90void memory_spy_page (void *address);
31void memory_dump (int order); 91void memory_dump (int order);
diff --git a/firmware/test/memory/makefile b/firmware/test/memory/makefile
index 2c14b7d0bd..2878500e45 100644
--- a/firmware/test/memory/makefile
+++ b/firmware/test/memory/makefile
@@ -17,7 +17,7 @@
17############################################################################# 17#############################################################################
18ARCH = test 18ARCH = test
19PACKAGE = memory 19PACKAGE = memory
20VERSION = 0.1.0 20VERSION = 0.1.1
21-include ../makefile-vars 21-include ../makefile-vars
22-include ../makefile-rules 22-include ../makefile-rules
23 23
diff --git a/firmware/test/memory/types.h b/firmware/test/memory/types.h
index 09e38682f7..d7a7c3c63e 100644
--- a/firmware/test/memory/types.h
+++ b/firmware/test/memory/types.h
@@ -22,51 +22,11 @@
22#ifndef __LIBRARY_MEMORY_TYPES_H__ 22#ifndef __LIBRARY_MEMORY_TYPES_H__
23# define __LIBRARY_MEMORY_TYPES_H__ 23# define __LIBRARY_MEMORY_TYPES_H__
24 24
25struct memory_free_page 25struct memory_free_page;
26 { 26struct memory_free_block;
27 struct memory_free_page 27struct memory_slab;
28 *less,*more; 28struct memory_cache;
29 char
30 reserved[MEMORY_PAGE_MINIMAL_SIZE - 2*sizeof (struct memory_free_page *)];
31 };
32struct memory_free_block
33 {
34 struct memory_free_block
35 *link;
36 };
37 29
38struct memory_cache
39 {
40 struct memory_cache
41 *less,*more,*same;
42 unsigned int
43 left; // number of free slabs
44 struct memory_slab
45 *used;
46 struct memory_slab
47 *free;
48 struct memory_slab
49 *reap;
50 unsigned int
51 size,original_size;
52 unsigned int
53 page_size;
54 unsigned int
55 blocks_per_slab;
56 int
57 page_order;
58 unsigned int
59 flags;
60 };
61 30
62struct memory_slab
63 {
64 struct memory_slab
65 *less,*more;
66 unsigned int // left == number of free blocks left
67 left;
68 struct memory_free_block
69 *free;
70 };
71 31
72#endif \ No newline at end of file 32#endif \ No newline at end of file