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
13#pragma once
14
15#include <stdbool.h>
16#include <stddef.h>
17#include <virtqueue.h>
18
19#include <sel4/sel4.h>
20
21typedef struct camkes_msgqueue_sender {
22    bool initialised;
23    virtqueue_driver_t sender_channel;
24    size_t message_size;
25} camkes_msgqueue_sender_t;
26
27typedef struct camkes_msgqueue_receiver {
28    bool initialised;
29    virtqueue_device_t receiver_channel;
30    size_t message_size;
31    int (*poll)(void);
32    void (*wait)(void);
33} camkes_msgqueue_receiver_t;
34
35int camkes_msgqueue_sender_init(int msgqueue_id, camkes_msgqueue_sender_t *sender);
36
37int camkes_msgqueue_receiver_init(int msgqueue_id, camkes_msgqueue_receiver_t *receiver);
38
39int camkes_msgqueue_send(camkes_msgqueue_sender_t *sender, void *message, size_t message_size);
40
41int camkes_msgqueue_poll(camkes_msgqueue_receiver_t *receiver);
42
43int camkes_msgqueue_wait(camkes_msgqueue_receiver_t *receiver);
44
45int camkes_msgqueue_get(camkes_msgqueue_receiver_t *receiver, void *buffer, size_t buffer_size);
46