progress
This commit is contained in:
parent
fbbb2ae5b2
commit
fb5e35287d
@ -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.
|
||||
*/
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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)
|
||||
{
|
||||
|
||||
@ -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();
|
||||
|
||||
@ -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();
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user