blob: af239a0bbe36fca42da766cba598033a858a9784 [file]
/*
* Copyright 2019, Data61, CSIRO (ABN 41 687 119 230)
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#pragma once
#include <stdbool.h>
#include <stddef.h>
#include <virtqueue.h>
#include <sel4/sel4.h>
typedef struct camkes_msgqueue_sender {
bool initialised;
virtqueue_driver_t sender_channel;
size_t message_size;
} camkes_msgqueue_sender_t;
typedef struct camkes_msgqueue_receiver {
bool initialised;
virtqueue_device_t receiver_channel;
size_t message_size;
int (*poll)(void);
void (*wait)(void);
} camkes_msgqueue_receiver_t;
int camkes_msgqueue_sender_init(int msgqueue_id, camkes_msgqueue_sender_t *sender);
int camkes_msgqueue_receiver_init(int msgqueue_id, camkes_msgqueue_receiver_t *receiver);
int camkes_msgqueue_send(camkes_msgqueue_sender_t *sender, void *message, size_t message_size);
int camkes_msgqueue_poll(camkes_msgqueue_receiver_t *receiver);
int camkes_msgqueue_wait(camkes_msgqueue_receiver_t *receiver);
int camkes_msgqueue_get(camkes_msgqueue_receiver_t *receiver, void *buffer, size_t buffer_size);