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__ */ 90