start memory server
This commit is contained in:
parent
6b77ee35e4
commit
f2fb4d5d01
@ -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. */
|
||||
|
||||
@ -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");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -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;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user