linux/include/linux/genalloc.h
<<
>>
Prefs
   1/*
   2 * Basic general purpose allocator for managing special purpose memory
   3 * not managed by the regular kmalloc/kfree interface.
   4 * Uses for this includes on-device special memory, uncached memory
   5 * etc.
   6 *
   7 * This source code is licensed under the GNU General Public License,
   8 * Version 2.  See the file COPYING for more details.
   9 */
  10
  11
  12/*
  13 *  General purpose special memory pool descriptor.
  14 */
  15struct gen_pool {
  16        rwlock_t lock;
  17        struct list_head chunks;        /* list of chunks in this pool */
  18        int min_alloc_order;            /* minimum allocation order */
  19};
  20
  21/*
  22 *  General purpose special memory pool chunk descriptor.
  23 */
  24struct gen_pool_chunk {
  25        spinlock_t lock;
  26        struct list_head next_chunk;    /* next chunk in pool */
  27        unsigned long start_addr;       /* starting address of memory chunk */
  28        unsigned long end_addr;         /* ending address of memory chunk */
  29        unsigned long bits[0];          /* bitmap for allocating memory chunk */
  30};
  31
  32extern struct gen_pool *gen_pool_create(int, int);
  33extern int gen_pool_add(struct gen_pool *, unsigned long, size_t, int);
  34extern void gen_pool_destroy(struct gen_pool *);
  35extern unsigned long gen_pool_alloc(struct gen_pool *, size_t);
  36extern void gen_pool_free(struct gen_pool *, unsigned long, size_t);
  37