| /* | |
| * 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) | |
| */ | |
| #pragma once | |
| #include <autoconf.h> | |
| #include <sel4/types.h> | |
| #include <allocman/cspace/cspace.h> | |
| #include <vka/vka.h> | |
| /* This is a proxy allocator that just passes any allocs/frees to a vka interface */ | |
| static inline cspacepath_t _cspace_vka_make_path(void *_cspace, seL4_CPtr slot) | |
| { | |
| vka_t *vka = (vka_t*)_cspace; | |
| cspacepath_t path; | |
| vka_cspace_make_path(vka, slot, &path); | |
| return path; | |
| } | |
| static int _cspace_vka_alloc(struct allocman *alloc, void *_cspace, cspacepath_t *slot) | |
| { | |
| vka_t *vka = (vka_t*)_cspace; | |
| (void)alloc; | |
| return vka_cspace_alloc_path(vka, slot); | |
| } | |
| static void _cspace_vka_free(struct allocman *alloc, void *_cspace, const cspacepath_t *slot) | |
| { | |
| vka_t *vka = (vka_t*)_cspace; | |
| (void)alloc; | |
| vka_cspace_free(vka, slot->capPtr); | |
| } | |
| /** | |
| * Make a cspace interface from a VKA. It is the responsibility of the caller to ensure | |
| * that this pointer remains valid for as long as this cspace is used | |
| * | |
| * @param vka Allocator to proxy cspace calls to | |
| * @return cspace_interface that can be given to allocman | |
| */ | |
| static inline struct cspace_interface cspace_vka_make_interface(vka_t *vka) { | |
| return (struct cspace_interface){ | |
| .alloc = _cspace_vka_alloc, | |
| .free = _cspace_vka_free, | |
| .make_path = _cspace_vka_make_path, | |
| /* VKA is not guaranteed to recurse */ | |
| .properties = ALLOCMAN_DEFAULT_PROPERTIES, | |
| .cspace = vka | |
| }; | |
| } | |