/* Copyright (c) 2009 The Regents of the University of California. 
 * See the COPYRIGHT files at the top of this source tree for full 
 * license information.
 * 
 * Kevin Klues <klueska@cs.berkeley.edu>    
 */

#ifndef ROS_KERN_KMALLOC_H
#define ROS_KERN_KMALLOC_H

#include <ros/common.h>

#define NUM_KMALLOC_CACHES 13
#define KMALLOC_ALIGNMENT 16
#define KMALLOC_SMALLEST 32
#define KMALLOC_LARGEST KMALLOC_SMALLEST << NUM_KMALLOC_CACHES

void kmalloc_init(void);
void* (DALLOC(size) kmalloc)(size_t size, int flags);
void* (DALLOC(size) kzmalloc)(size_t size, int flags);
void *kmalloc_align(size_t size, int flags, size_t align);
void *kzmalloc_align(size_t size, int flags, size_t align);
void* (DALLOC(size) krealloc)(void* buf, size_t size, int flags);
void  (DFREE(addr) kfree)(void *addr);
void kmalloc_canary_check(char *str);
void *debug_canary;

/* Flags to pass to kmalloc */
/* Not implemented yet. Block until it is available. */
#define KMALLOC_WAIT			4

/* Kmalloc tag flags looks like this:
 *
 * +--------------28---------------+-----4------+
 * |       Flag specific data      |    Flags   |
 * +-------------------------------+------------+
 */
#define KMALLOC_TAG_CACHE		1	/* memory came from slabs */
#define KMALLOC_TAG_PAGES		2	/* memory came from page allocator */
#define KMALLOC_TAG_UNALIGN		3	/* not a real tag, jump back by offset */
#define KMALLOC_ALIGN_SHIFT		4	/* max flag is 16 */
#define KMALLOC_FLAG_MASK		((1 << KMALLOC_ALIGN_SHIFT) - 1)

#define KMALLOC_CANARY 0xdeadbabe

/* The kmalloc align/free paths require that flags is at the end of this
 * struct, and that it is not padded. */
struct kmalloc_tag {
	union {
		struct kmem_cache *my_cache WHEN(flags == KMALLOC_TAG_CACHE);
		size_t num_pages WHEN(flags == KMALLOC_TAG_PAGES);
		uint64_t unused_force_align;
	};
	uint32_t canary;
	int flags;
};

#endif //ROS_KERN_KMALLOC_H

