start memory server

This commit is contained in:
Aurel Feer 2022-03-30 16:23:39 +02:00
parent 6b77ee35e4
commit f2fb4d5d01
4 changed files with 28 additions and 3 deletions

View File

@ -20,6 +20,8 @@
// define some message types
#define RPC_MTYPE_CHILD_ENDPOINT 1UL
#define RPC_MTYPE_CHILD_ENDPOINT_OK 2UL
#define RPC_MTYPE_GET_RAM_CAP 3UL
#define RPC_MTYPE_GET_RAM_CAP_OK 4UL
/* An RPC binding, which may be transported over LMP or UMP. */

View File

@ -96,6 +96,7 @@ static int event_init_dispatch_thread(void *arg)
}
// TODO rueegges: putting it here for now. Not sure how to do rcp abstraction yet
// receive messages sent by the init
static void handle_init_recv(void *arg)
{
errval_t err;
@ -129,7 +130,7 @@ static void handle_init_recv(void *arg)
err = lmp_endpoint_register(init_chan->endpoint, get_default_waitset(), MKCLOSURE(handle_init_recv, init_chan));
if (err_is_fail(err)) {
USER_PANIC_ERR(err, "Could not reregister after failed init_chan cap receive");
USER_PANIC_ERR(err, "[handle_init_recv]: Could not register endpoint after receiving message");
}
}

View File

@ -17,10 +17,19 @@
#include <aos/core_state.h>
/* remote (indirect through a channel) version of ram_alloc, for most domains */
// call to the memory server to give us some ram
static errval_t ram_alloc_remote(struct capref *ret, size_t size, size_t alignment)
{
//TODO(M3): Implement me!
return LIB_ERR_NOT_IMPLEMENTED;
errval_t err;
// afeer: hää?
slot_alloc(ret);
// afeer, script page 133: get ram using rpc
struct aos_rpc *memchan = aos_rpc_get_memory_channel();
err = aos_rpc_get_ram_cap(memchan, size, alignment, ret, NULL);
if (err_is_fail(err)) return LIB_ERR_RAM_ALLOC;
return SYS_ERR_OK;
}

View File

@ -47,6 +47,7 @@ static void armv8_set_registers(void *arch_load_info,
disabled_area->regs[REG_OFFSET(PIC_REGISTER)] = got_base;
}
// receive messages sent by the child
static void handle_child_recv(void *arg) {
errval_t err;
struct lmp_chan *init_chan = (struct lmp_chan *)arg;
@ -76,6 +77,18 @@ static void handle_child_recv(void *arg) {
USER_PANIC_ERR(err, "Failed to send RPC_MTYPE_CHILD_ENDPOINT_OK");
}
break;
case RPC_MTYPE_GET_RAM_CAP:
debug_printf("[handle_init_recv]: RPC_MTYPE_GET_RAM_CAP\n");
size_t requested_size = msg.words[1];
struct capref new_ram_cap;
frame_alloc(&new_ram_cap, requested_size, NULL);
err = lmp_chan_send1(init_chan, LMP_FLAG_YIELD | LMP_FLAG_SYNC, NULL_CAP, RPC_MTYPE_GET_RAM_CAP_OK);
if (err_is_fail(err)) {
USER_PANIC_ERR(err, "Failed to send RPC_MTYPE_GET_RAM_CAP_OK");
}
break;
default:
USER_PANIC("Unknown rpc message type.");
break;