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