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

#pragma once

#include <ros/common.h>
#include <kref.h>

#define NUM_KMALLOC_CACHES 13
#define KMALLOC_ALIGNMENT 16
#define KMALLOC_SMALLEST (sizeof(struct kmalloc_tag) << 1)
#define KMALLOC_LARGEST KMALLOC_SMALLEST << NUM_KMALLOC_CACHES

void kmalloc_init(void);
void *kmalloc(size_t size, int flags);
void *kmalloc_array(size_t nmemb, size_t size, int flags);
void *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 *krealloc(void *buf, size_t size, int flags);
void *kreallocarray(void *buf, size_t nmemb, size_t size, int flags);
int kmalloc_refcnt(void *buf);
void kmalloc_incref(void *buf);
void kfree(void *buf);
void kmalloc_canary_check(char *str);
void *debug_canary;

#define MEM_ATOMIC				(1 << 1)
#define MEM_WAIT				(1 << 2)
#define MEM_ERROR				(1 << 3)

/* 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;
		size_t num_pages;
		uint64_t unused_force_align;
	};
	struct kref kref;
	uint32_t canary;
	int flags;
};
