diff --git a/include/aos/aos_rpc.h b/include/aos/aos_rpc.h index cb9d239..c3d47c3 100644 --- a/include/aos/aos_rpc.h +++ b/include/aos/aos_rpc.h @@ -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, 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. */ diff --git a/include/aos/aos_urpc.h b/include/aos/aos_urpc.h index 41ba454..bf354e1 100644 --- a/include/aos/aos_urpc.h +++ b/include/aos/aos_urpc.h @@ -41,6 +41,12 @@ errval_t do_aos_urpc( 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_server(void *arg); diff --git a/lib/aos/aos_rpc.c b/lib/aos/aos_rpc.c index 46e3331..90021b4 100644 --- a/lib/aos/aos_rpc.c +++ b/lib/aos/aos_rpc.c @@ -351,27 +351,6 @@ aos_rpc_process_get_all_pids(struct aos_rpc *rpc, domainid_t **pids, 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 errval_t aos_rpc_init(struct aos_rpc *rpc, struct lmp_chan *chan, void *shared_mem) { diff --git a/lib/aos/aos_urpc.c b/lib/aos/aos_urpc.c index 64e0d61..b597051 100644 --- a/lib/aos/aos_urpc.c +++ b/lib/aos/aos_urpc.c @@ -137,6 +137,25 @@ static void urpc_server_handler(void *arg) { 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) { struct aos_urpc_server *urpc = arg; struct waitset *default_ws = get_default_waitset(); diff --git a/usr/init/main.c b/usr/init/main.c index 6e831db..85ceb7a 100644 --- a/usr/init/main.c +++ b/usr/init/main.c @@ -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); - struct capref ret_frame; - err = frame_alloc(&ret_frame, bootinfo_size, NULL); - if (err_is_fail(err)) return err_push(err, LIB_ERR_FRAME_ALLOC); + // struct capref ret_frame; + // err = frame_alloc(&ret_frame, bootinfo_size, NULL); + // 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); - if (err_is_fail(err)) return err_push(err, LIB_ERR_PMAP_MAP); - // *ret = malloc(bootinfo_size); + // 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); + *ret = malloc(bootinfo_size); (*ret)->host_msg = serialized->host_msg; (*ret)->host_msg_bits = serialized->host_msg_bits; @@ -222,15 +222,6 @@ app_main(int argc, char *argv[]) { // - grading_test_early(); // - 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_setup_app_init(bi); @@ -254,6 +245,14 @@ app_main(int argc, char *argv[]) { 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_test_late();