This commit is contained in:
Aurel Feer 2022-04-28 14:48:44 +02:00
parent fbbb2ae5b2
commit fb5e35287d
5 changed files with 39 additions and 41 deletions

View File

@ -130,11 +130,6 @@ errval_t aos_rpc_process_get_name(struct aos_rpc *chan, domainid_t pid,
errval_t aos_rpc_process_get_all_pids(struct aos_rpc *chan, errval_t aos_rpc_process_get_all_pids(struct aos_rpc *chan,
domainid_t **pids, size_t *pid_count); domainid_t **pids, size_t *pid_count);
/**
* \brief Get bootinfo from rsp core
*/
errval_t aos_rpc_get_bootinfo(struct aos_rpc * rpc, struct bootinfo_serialized ** ret);
/** /**
* \brief Returns the RPC channel to init. * \brief Returns the RPC channel to init.
*/ */

View File

@ -41,6 +41,12 @@ errval_t do_aos_urpc(
struct capref *ret_cap, size_t *ret_size, uintptr_t *ret0, uintptr_t *ret1 struct capref *ret_cap, size_t *ret_size, uintptr_t *ret0, uintptr_t *ret1
); );
/**
* \brief Get bootinfo from rsp core
*/
errval_t aos_urpc_get_bootinfo(struct aos_urpc * rpc, struct bootinfo_serialized ** ret);
int urpc_client_loop(void *arg); int urpc_client_loop(void *arg);
int urpc_server(void *arg); int urpc_server(void *arg);

View File

@ -351,27 +351,6 @@ aos_rpc_process_get_all_pids(struct aos_rpc *rpc, domainid_t **pids,
return err; return err;
} }
errval_t aos_rpc_get_bootinfo(struct aos_rpc * rpc, struct bootinfo_serialized ** ret)
{
size_t ret_len;
errval_t err;
thread_mutex_lock(&rpc->shared_mem_lock);
err = do_aos_rpc(
rpc, RPC_MTYPE_GET_BOOTINFO,
NULL_CAP, 0, 0, 0,
NULL, &ret_len, NULL, NULL
);
if (err_is_fail(err)) {
thread_mutex_unlock(&rpc->shared_mem_lock);
return err;
}
memcpy(*ret, rpc->shared_mem, ret_len);
thread_mutex_unlock(&rpc->shared_mem_lock);
return SYS_ERR_OK;
}
// We are allowed to change the signature for this one // We are allowed to change the signature for this one
errval_t aos_rpc_init(struct aos_rpc *rpc, struct lmp_chan *chan, void *shared_mem) errval_t aos_rpc_init(struct aos_rpc *rpc, struct lmp_chan *chan, void *shared_mem)
{ {

View File

@ -137,6 +137,25 @@ static void urpc_server_handler(void *arg) {
thread_sem_post(&urpc->sem); thread_sem_post(&urpc->sem);
} }
errval_t aos_urpc_get_bootinfo(struct aos_urpc * rpc, struct bootinfo_serialized ** ret)
{
size_t ret_len;
errval_t err;
err = do_aos_urpc(
rpc, RPC_MTYPE_GET_BOOTINFO,
NULL_CAP, 0, 0, 0,
NULL, &ret_len, NULL, NULL
);
if (err_is_fail(err)) {
return err;
}
*ret = malloc(ret_len);
memcpy(*ret, rpc->shared_mem, ret_len);
return SYS_ERR_OK;
}
int urpc_server(void *arg) { int urpc_server(void *arg) {
struct aos_urpc_server *urpc = arg; struct aos_urpc_server *urpc = arg;
struct waitset *default_ws = get_default_waitset(); struct waitset *default_ws = get_default_waitset();

View File

@ -169,13 +169,13 @@ static errval_t deserialize_bootinfo(struct bootinfo_serialized * serialized, st
size_t bootinfo_size = sizeof(struct bootinfo) + serialized->regions_length * sizeof(struct mem_region); size_t bootinfo_size = sizeof(struct bootinfo) + serialized->regions_length * sizeof(struct mem_region);
struct capref ret_frame; // struct capref ret_frame;
err = frame_alloc(&ret_frame, bootinfo_size, NULL); // err = frame_alloc(&ret_frame, bootinfo_size, NULL);
if (err_is_fail(err)) return err_push(err, LIB_ERR_FRAME_ALLOC); // if (err_is_fail(err)) return err_push(err, LIB_ERR_FRAME_ALLOC);
err = paging_map_frame(get_current_paging_state(), (void **) ret, bootinfo_size, ret_frame); // err = paging_map_frame(get_current_paging_state(), (void **) ret, bootinfo_size, ret_frame);
if (err_is_fail(err)) return err_push(err, LIB_ERR_PMAP_MAP); // if (err_is_fail(err)) return err_push(err, LIB_ERR_PMAP_MAP);
// *ret = malloc(bootinfo_size); *ret = malloc(bootinfo_size);
(*ret)->host_msg = serialized->host_msg; (*ret)->host_msg = serialized->host_msg;
(*ret)->host_msg_bits = serialized->host_msg_bits; (*ret)->host_msg_bits = serialized->host_msg_bits;
@ -222,15 +222,6 @@ app_main(int argc, char *argv[]) {
// - grading_test_early(); // - grading_test_early();
// - grading_test_late(); // - grading_test_late();
struct bootinfo_serialized * bi_ser;
err = aos_rpc_get_bootinfo(aos_rpc_get_init_channel(), &bi_ser);
if (err_is_fail(err)) return err;
err = deserialize_bootinfo(bi_ser, &bi);
if (err_is_fail(err)) return err;
debug_printf("[app_main]: received bootinfo with %d regions\n", bi->regions_length);
// Grading // Grading
grading_setup_app_init(bi); grading_setup_app_init(bi);
@ -254,6 +245,14 @@ app_main(int argc, char *argv[]) {
thread_create(urpc_server, &urpc_to_app_server); thread_create(urpc_server, &urpc_to_app_server);
struct bootinfo_serialized * bi_ser;
err = aos_urpc_get_bootinfo(&urpc_to_bsp, &bi_ser);
if (err_is_fail(err)) return err;
err = deserialize_bootinfo(bi_ser, &bi);
if (err_is_fail(err)) return err;
debug_printf("[app_main]: received bootinfo with %d regions\n", bi->regions_length);
// Grading // Grading
grading_test_late(); grading_test_late();