blob: 8fa6dda829a57c3fc5390443d2c2ffd9f3793952 [file] [log] [blame]
/*
* Copyright 2014, NICTA
*
* 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(NICTA_BSD)
*/
#ifndef _ALLOCMAN_UTSPACE_TRICKLE_H_
#define _ALLOCMAN_UTSPACE_TRICKLE_H_
#include <autoconf.h>
#include <sel4/types.h>
#include <allocman/utspace/utspace.h>
#include <assert.h>
#ifdef CONFIG_KERNEL_STABLE
struct utspace_trickle_node {
cspacepath_t *ut;
size_t offset;
seL4_Word parent_cookie;
size_t bitmap_bits;
size_t bitmap;
struct utspace_trickle_node *next, *prev;
size_t padding;
uintptr_t paddr;
};
compile_time_assert(trickle_struct_size32, sizeof(struct utspace_trickle_node) == 36 || sizeof(size_t) == 8);
compile_time_assert(trickle_struct_size64, sizeof(struct utspace_trickle_node) == 72 || sizeof(size_t) == 4);
typedef struct utspace_trickle {
struct utspace_trickle_node *heads[CONFIG_WORD_SIZE];
} utspace_trickle_t;
void utspace_trickle_create(utspace_trickle_t *trickle);
int _utspace_trickle_add_uts(struct allocman *alloc, void *_trickle, size_t num, const cspacepath_t *uts, size_t *size_bits, uintptr_t *paddr);
seL4_Word _utspace_trickle_alloc(struct allocman *alloc, void *_trickle, size_t size_bits, seL4_Word type, const cspacepath_t *slot, int *error);
void _utspace_trickle_free(struct allocman *alloc, void *_trickle, seL4_Word cookie, size_t size_bits);
uintptr_t _utspace_trickle_paddr(void *_trickle, seL4_Word cookie, size_t size_bits);
static inline utspace_interface_t utspace_trickle_make_interface(utspace_trickle_t *trickle) {
return (utspace_interface_t) {
.alloc = _utspace_trickle_alloc,
.free = _utspace_trickle_free,
.add_uts = _utspace_trickle_add_uts,
.paddr = _utspace_trickle_paddr,
.properties = ALLOCMAN_DEFAULT_PROPERTIES,
.utspace = trickle
};
}
#endif /* CONFIG_KERNEL_STABLE */
#endif