rheap.h (2578B)
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 19typedef struct _rh_block { 20 struct list_head list; 21 unsigned long start; 22 int size; 23 const char *owner; 24} rh_block_t; 25 26typedef 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 40typedef 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 */ 50extern rh_info_t *rh_create(unsigned int alignment); 51 52/* Destroy a remote heap, created by rh_create() */ 53extern void rh_destroy(rh_info_t * info); 54 55/* Initialize in place a remote info block */ 56extern 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 */ 60extern int rh_attach_region(rh_info_t * info, unsigned long start, int size); 61 62/* Detach a free region */ 63extern 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) */ 66extern 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 */ 70extern unsigned long rh_alloc(rh_info_t * info, int size, const char *owner); 71 72/* Allocate the given size from the given address */ 73extern unsigned long rh_alloc_fixed(rh_info_t * info, unsigned long start, int size, 74 const char *owner); 75 76/* Free the allocated area */ 77extern int rh_free(rh_info_t * info, unsigned long start); 78 79/* Get stats for debugging purposes */ 80extern 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 */ 84extern void rh_dump(rh_info_t * info); 85 86/* Simple dump of remote info block */ 87void rh_dump_blk(rh_info_t *info, rh_block_t *blk); 88 89/* Set owner of taken block */ 90extern int rh_set_owner(rh_info_t * info, unsigned long start, const char *owner); 91 92#endif /* __ASM_PPC_RHEAP_H__ */