blob: 5389e97c75549fa9a237868820f11d762c29ebe3 [file] [log] [blame]
Andrew Scullfbc938a2018-08-20 14:09:28 +01001#pragma once
Wedson Almeida Filho987c0ff2018-06-20 16:34:38 +01002
Andrew Scull18c78fc2018-08-20 12:57:41 +01003#include "hf/cpu.h"
4#include "hf/mm.h"
Wedson Almeida Filho987c0ff2018-06-20 16:34:38 +01005
Wedson Almeida Filho2f94ec12018-07-26 16:00:48 +01006enum rpc_state {
7 rpc_state_idle,
8 rpc_state_pending,
9 rpc_state_inflight,
10};
11
12struct rpc {
13 enum rpc_state state;
14 int16_t recv_bytes;
15 void *recv;
16 const void *send;
17 struct vcpu *recv_waiter;
18};
19
Wedson Almeida Filho987c0ff2018-06-20 16:34:38 +010020struct vm {
Andrew Scull8c3a63a2018-09-20 13:38:34 +010021 uint32_t id;
Wedson Almeida Filho2f94ec12018-07-26 16:00:48 +010022 struct spinlock lock;
Wedson Almeida Filho87009642018-07-02 10:20:07 +010023 uint32_t vcpu_count;
Wedson Almeida Filho84a30a02018-07-23 20:05:05 +010024 struct vcpu vcpus[MAX_CPUS];
Andrew Scull89a75242018-08-06 17:04:55 +010025 struct mm_ptable ptable;
26 struct rpc rpc;
Wedson Almeida Filho987c0ff2018-06-20 16:34:38 +010027};
28
Wedson Almeida Filho84a30a02018-07-23 20:05:05 +010029bool vm_init(struct vm *vm, uint32_t id, uint32_t vcpu_count);
Andrew Scull89a75242018-08-06 17:04:55 +010030void vm_start_vcpu(struct vm *vm, size_t index, ipaddr_t entry, size_t arg);
Wedson Almeida Filho84a30a02018-07-23 20:05:05 +010031void vm_set_current(struct vm *vm);