/*
 * Copyright 2017, Data61
 * Commonwealth Scientific and Industrial Research Organisation (CSIRO)
 * ABN 41 687 119 230.
 *
 * This software may be distributed and modified according to the terms of
 * the BSD 2-Clause license. Note that NO WARRANTY is provided.
 * See "LICENSE_BSD2.txt" for details.
 *
 * @TAG(DATA61_BSD)
 */

#ifndef _ALLOCMAN_MSPACE_NULL_H_
#define _ALLOCMAN_MSPACE_NULL_H_

/* Implements a null memory manager. This is useful if you are using allocators
   that do not perform any dynamic book keeping */

#include <autoconf.h>
#include <sel4/types.h>
#include <allocman/mspace/mspace.h>
#include <allocman/util.h>
#include <stdlib.h>

static inline void *_mspace_null_alloc(struct allocman *alloc, void *unused, size_t bytes, int *error)
{
    SET_ERROR(error, 1);
    return NULL;
}

static inline void _mspace_null_free(struct allocman *alloc, void *unused, void *ptr, size_t bytes)
{
    /* While this is clearly a bug, we have no nice WARN_ON or other macro for flagging this, so just ignore */
}

static const struct mspace_interface mspace_null_interface = {
    .alloc = _mspace_null_alloc,
    .free = _mspace_null_free,
    .properties = ALLOCMAN_DEFAULT_PROPERTIES,
    .mspace = NULL
};

#endif
