diff options
-rw-r--r-- | firmware/test/memory/config.h | 2 | ||||
-rw-r--r-- | firmware/test/memory/functions.h | 64 | ||||
-rw-r--r-- | firmware/test/memory/makefile | 2 | ||||
-rw-r--r-- | firmware/test/memory/types.h | 48 |
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 | |||
24 | extern void memory_copy (void *target,void const *source,unsigned int count); | 29 | extern void memory_copy (void *target,void const *source,unsigned int count); |
25 | extern void memory_set (void *target,int byte,unsigned int count); | 30 | extern void memory_set (void *target,int byte,unsigned int count); |
26 | extern int memory_release_page (void *); | 31 | |
27 | extern 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 | |||
40 | extern int memory_release_page (void *address); | ||
41 | extern void *memory_allocate_page (int order); | ||
28 | extern void memory_setup (void); | 42 | extern 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 | |||
59 | extern struct memory_slab *memory_grow_cache (struct memory_cache *cache); | ||
60 | extern int memory_shrink_cache (struct memory_cache *cache,int all); | ||
61 | extern struct memory_cache *memory_create_cache (unsigned int size,int align,int flags); | ||
62 | extern int memory_destroy_cache (struct memory_cache *cache); | ||
63 | extern void *memory_cache_allocate (struct memory_cache *cache); | ||
64 | extern 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 | |||
79 | extern void *memory_allocate_small_block (int order); | ||
80 | extern int memory_release_small_block (int order,void *address); | ||
81 | extern void *memory_allocate_block (unsigned int size); | ||
82 | extern int memory_release_block (void *address); | ||
83 | |||
84 | // | ||
85 | ///////////////////////////////////////////////////////////////////// | ||
86 | |||
87 | |||
88 | |||
29 | # ifdef TEST | 89 | # ifdef TEST |
30 | void memory_spy_page (void *address); | 90 | void memory_spy_page (void *address); |
31 | void memory_dump (int order); | 91 | void 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 | ############################################################################# |
18 | ARCH = test | 18 | ARCH = test |
19 | PACKAGE = memory | 19 | PACKAGE = memory |
20 | VERSION = 0.1.0 | 20 | VERSION = 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 | ||
25 | struct memory_free_page | 25 | struct memory_free_page; |
26 | { | 26 | struct memory_free_block; |
27 | struct memory_free_page | 27 | struct memory_slab; |
28 | *less,*more; | 28 | struct memory_cache; |
29 | char | ||
30 | reserved[MEMORY_PAGE_MINIMAL_SIZE - 2*sizeof (struct memory_free_page *)]; | ||
31 | }; | ||
32 | struct memory_free_block | ||
33 | { | ||
34 | struct memory_free_block | ||
35 | *link; | ||
36 | }; | ||
37 | 29 | ||
38 | struct 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 | ||
62 | struct 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 |