1/* 2 * Copyright 2019, Data61 3 * Commonwealth Scientific and Industrial Research Organisation (CSIRO) 4 * ABN 41 687 119 230. 5 * 6 * This software may be distributed and modified according to the terms of 7 * the BSD 2-Clause license. Note that NO WARRANTY is provided. 8 * See "LICENSE_BSD2.txt" for details. 9 * 10 * @TAG(DATA61_BSD) 11 */ 12#pragma once 13 14#include <stdlib.h> 15#include <sel4/sel4.h> 16 17/* An interface for accessing caps of a dataport on the "to" side 18 * of a seL4SharedDataWithCaps connection. 19 */ 20 21typedef seL4_CPtr(*dataport_get_nth_frame_cap_fn)(unsigned int n); 22typedef unsigned int (*dataport_get_id_fn)(void); 23typedef unsigned int (*dataport_get_num_frame_caps_fn)(void); 24typedef seL4_CPtr *(*dataport_get_frame_caps_fn)(void); 25typedef void (*dataport_free_frame_caps_fn)(seL4_CPtr *); 26typedef size_t (*dataport_get_size_fn)(void); 27typedef seL4_CapRights_t (*dataport_get_rights_fn)(void); 28 29typedef struct { 30 dataport_get_nth_frame_cap_fn get_nth_frame_cap; 31 dataport_get_id_fn get_id; 32 dataport_get_num_frame_caps_fn get_num_frame_caps; 33 dataport_get_frame_caps_fn get_frame_caps; 34 dataport_free_frame_caps_fn free_frame_caps; 35 dataport_get_size_fn get_size; 36 dataport_get_rights_fn get_rights; 37} dataport_caps_handle_t; 38 39static inline seL4_CPtr dataport_get_nth_frame_cap(dataport_caps_handle_t *d, unsigned int n) 40{ 41 return d->get_nth_frame_cap(n); 42} 43 44static inline unsigned int dataport_get_id(dataport_caps_handle_t *d) 45{ 46 return d->get_id(); 47} 48 49static inline unsigned int dataport_get_num_frame_caps(dataport_caps_handle_t *d) 50{ 51 return d->get_num_frame_caps(); 52} 53 54static inline seL4_CPtr *dataport_get_frame_caps(dataport_caps_handle_t *d) 55{ 56 return d->get_frame_caps(); 57} 58 59static inline void dataport_free_frame_caps(dataport_caps_handle_t *d, seL4_CPtr *frame_caps) 60{ 61 return d->free_frame_caps(frame_caps); 62} 63 64static inline size_t dataport_get_size(dataport_caps_handle_t *d) 65{ 66 return d->get_size(); 67} 68 69static inline seL4_CapRights_t dataport_get_rights(dataport_caps_handle_t *d) 70{ 71 return d->get_rights(); 72} 73