diff options
Diffstat (limited to 'include/asm-powerpc/rheap.h')
-rw-r--r-- | include/asm-powerpc/rheap.h | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/include/asm-powerpc/rheap.h b/include/asm-powerpc/rheap.h new file mode 100644 index 000000000000..172381769cfc --- /dev/null +++ b/include/asm-powerpc/rheap.h | |||
@@ -0,0 +1,89 @@ | |||
1 | /* | ||
2 | * include/asm-ppc/rheap.h | ||
3 | * | ||
4 | * Header file for the implementation of a remote heap. | ||
5 | * | ||
6 | * Author: Pantelis Antoniou <panto@intracom.gr> | ||
7 | * | ||
8 | * 2004 (c) INTRACOM S.A. Greece. This file is licensed under | ||
9 | * the terms of the GNU General Public License version 2. This program | ||
10 | * is licensed "as is" without any warranty of any kind, whether express | ||
11 | * or implied. | ||
12 | */ | ||
13 | |||
14 | #ifndef __ASM_PPC_RHEAP_H__ | ||
15 | #define __ASM_PPC_RHEAP_H__ | ||
16 | |||
17 | #include <linux/list.h> | ||
18 | |||
19 | typedef struct _rh_block { | ||
20 | struct list_head list; | ||
21 | unsigned long start; | ||
22 | int size; | ||
23 | const char *owner; | ||
24 | } rh_block_t; | ||
25 | |||
26 | typedef struct _rh_info { | ||
27 | unsigned int alignment; | ||
28 | int max_blocks; | ||
29 | int empty_slots; | ||
30 | rh_block_t *block; | ||
31 | struct list_head empty_list; | ||
32 | struct list_head free_list; | ||
33 | struct list_head taken_list; | ||
34 | unsigned int flags; | ||
35 | } rh_info_t; | ||
36 | |||
37 | #define RHIF_STATIC_INFO 0x1 | ||
38 | #define RHIF_STATIC_BLOCK 0x2 | ||
39 | |||
40 | typedef struct _rh_stats { | ||
41 | unsigned long start; | ||
42 | int size; | ||
43 | const char *owner; | ||
44 | } rh_stats_t; | ||
45 | |||
46 | #define RHGS_FREE 0 | ||
47 | #define RHGS_TAKEN 1 | ||
48 | |||
49 | /* Create a remote heap dynamically */ | ||
50 | extern rh_info_t *rh_create(unsigned int alignment); | ||
51 | |||
52 | /* Destroy a remote heap, created by rh_create() */ | ||
53 | extern void rh_destroy(rh_info_t * info); | ||
54 | |||
55 | /* Initialize in place a remote info block */ | ||
56 | extern void rh_init(rh_info_t * info, unsigned int alignment, int max_blocks, | ||
57 | rh_block_t * block); | ||
58 | |||
59 | /* Attach a free region to manage */ | ||
60 | extern int rh_attach_region(rh_info_t * info, unsigned long start, int size); | ||
61 | |||
62 | /* Detach a free region */ | ||
63 | extern unsigned long rh_detach_region(rh_info_t * info, unsigned long start, int size); | ||
64 | |||
65 | /* Allocate the given size from the remote heap (with alignment) */ | ||
66 | extern unsigned long rh_alloc_align(rh_info_t * info, int size, int alignment, | ||
67 | const char *owner); | ||
68 | |||
69 | /* Allocate the given size from the remote heap */ | ||
70 | extern unsigned long rh_alloc(rh_info_t * info, int size, const char *owner); | ||
71 | |||
72 | /* Allocate the given size from the given address */ | ||
73 | extern unsigned long rh_alloc_fixed(rh_info_t * info, unsigned long start, int size, | ||
74 | const char *owner); | ||
75 | |||
76 | /* Free the allocated area */ | ||
77 | extern int rh_free(rh_info_t * info, unsigned long start); | ||
78 | |||
79 | /* Get stats for debugging purposes */ | ||
80 | extern int rh_get_stats(rh_info_t * info, int what, int max_stats, | ||
81 | rh_stats_t * stats); | ||
82 | |||
83 | /* Simple dump of remote heap info */ | ||
84 | extern void rh_dump(rh_info_t * info); | ||
85 | |||
86 | /* Set owner of taken block */ | ||
87 | extern int rh_set_owner(rh_info_t * info, unsigned long start, const char *owner); | ||
88 | |||
89 | #endif /* __ASM_PPC_RHEAP_H__ */ | ||