start memory server
This commit is contained in:
parent
6b77ee35e4
commit
f2fb4d5d01
@ -20,6 +20,8 @@
|
|||||||
// define some message types
|
// define some message types
|
||||||
#define RPC_MTYPE_CHILD_ENDPOINT 1UL
|
#define RPC_MTYPE_CHILD_ENDPOINT 1UL
|
||||||
#define RPC_MTYPE_CHILD_ENDPOINT_OK 2UL
|
#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. */
|
/* 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
|
// 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)
|
static void handle_init_recv(void *arg)
|
||||||
{
|
{
|
||||||
errval_t err;
|
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));
|
err = lmp_endpoint_register(init_chan->endpoint, get_default_waitset(), MKCLOSURE(handle_init_recv, init_chan));
|
||||||
if (err_is_fail(err)) {
|
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>
|
#include <aos/core_state.h>
|
||||||
|
|
||||||
/* remote (indirect through a channel) version of ram_alloc, for most domains */
|
/* 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)
|
static errval_t ram_alloc_remote(struct capref *ret, size_t size, size_t alignment)
|
||||||
{
|
{
|
||||||
//TODO(M3): Implement me!
|
errval_t err;
|
||||||
return LIB_ERR_NOT_IMPLEMENTED;
|
// 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;
|
disabled_area->regs[REG_OFFSET(PIC_REGISTER)] = got_base;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// receive messages sent by the child
|
||||||
static void handle_child_recv(void *arg) {
|
static void handle_child_recv(void *arg) {
|
||||||
errval_t err;
|
errval_t err;
|
||||||
struct lmp_chan *init_chan = (struct lmp_chan *)arg;
|
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");
|
USER_PANIC_ERR(err, "Failed to send RPC_MTYPE_CHILD_ENDPOINT_OK");
|
||||||
}
|
}
|
||||||
break;
|
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:
|
default:
|
||||||
USER_PANIC("Unknown rpc message type.");
|
USER_PANIC("Unknown rpc message type.");
|
||||||
break;
|
break;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user