1/*
2 * Copyright 2019, Data61, CSIRO (ABN 41 687 119 230)
3 *
4 * SPDX-License-Identifier: BSD-2-Clause
5 */
6
7#pragma once
8
9#include <simple/simple.h>
10#include <vka/object.h>
11#include <vka/vka.h>
12#include <rpc.pb.h>
13
14#define SEL4RPC_MSG_MAGIC (0xcafed00d)
15
16struct sel4rpc_env;
17
18typedef int (*sel4rpc_handler_t)(struct sel4rpc_env *env, void *data, RpcMessage *rpcMsg);
19typedef struct sel4rpc_env {
20    vka_t *vka;
21
22    vka_object_t *reply;
23
24    sel4rpc_handler_t handler;
25    void *data;
26
27    simple_t *simple;
28} sel4rpc_server_env_t;
29
30int sel4rpc_server_init(sel4rpc_server_env_t *env, vka_t *vka,
31                        sel4rpc_handler_t handler_func, void *data, vka_object_t *reply, simple_t *simple);
32int sel4rpc_server_recv(sel4rpc_server_env_t *env);
33int sel4rpc_server_reply(sel4rpc_server_env_t *env, int caps, int errorCode, int cookie);
34int sel4rpc_default_handler(sel4rpc_server_env_t *env, UNUSED void *data, RpcMessage *rpcMsg);
35
36