home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / src / linux-headers-2.6.17-6 / include / asm-ppc / rheap.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  2.2 KB  |  86 lines

  1. /*
  2.  * include/asm-ppc/rheap.c
  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.     void *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_t {
  41.     void *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, void *start, int size);
  61.  
  62. /* Detach a free region */
  63. extern void *rh_detach_region(rh_info_t * info, void *start, int size);
  64.  
  65. /* Allocate the given size from the remote heap */
  66. extern void *rh_alloc(rh_info_t * info, int size, const char *owner);
  67.  
  68. /* Allocate the given size from the given address */
  69. extern void *rh_alloc_fixed(rh_info_t * info, void *start, int size,
  70.                 const char *owner);
  71.  
  72. /* Free the allocated area */
  73. extern int rh_free(rh_info_t * info, void *start);
  74.  
  75. /* Get stats for debugging purposes */
  76. extern int rh_get_stats(rh_info_t * info, int what, int max_stats,
  77.             rh_stats_t * stats);
  78.  
  79. /* Simple dump of remote heap info */
  80. extern void rh_dump(rh_info_t * info);
  81.  
  82. /* Set owner of taken block */
  83. extern int rh_set_owner(rh_info_t * info, void *start, const char *owner);
  84.  
  85. #endif                /* __ASM_PPC_RHEAP_H__ */
  86.