/* 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 6
#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)
#define MEM_FLAGS (MEM_ATOMIC | MEM_WAIT | MEM_ERROR)

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

/* This is aligned so that the buf is aligned to the usual kmalloc alignment. */
struct sized_alloc {
	void						*buf;
	size_t						size;
} __attribute__((aligned(KMALLOC_ALIGNMENT)));

/* Allocate a sized_alloc, big enough to hold size bytes.  Free with kfree. */
struct sized_alloc *sized_kzmalloc(size_t size, int flags);
