blob: 47b1e2a7834e5754c3929eba80569603016f9cc0 [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 {
Wedson Almeida Filho2f94ec12018-07-26 16:00:48 +010021 struct spinlock lock;
Wedson Almeida Filho87009642018-07-02 10:20:07 +010022 uint32_t vcpu_count;
Wedson Almeida Filho84a30a02018-07-23 20:05:05 +010023 struct vcpu vcpus[MAX_CPUS];
Andrew Scull89a75242018-08-06 17:04:55 +010024 struct mm_ptable ptable;
25 struct rpc rpc;
Wedson Almeida Filho987c0ff2018-06-20 16:34:38 +010026};
27
Wedson Almeida Filho84a30a02018-07-23 20:05:05 +010028bool vm_init(struct vm *vm, uint32_t id, uint32_t vcpu_count);
Andrew Scull89a75242018-08-06 17:04:55 +010029void vm_start_vcpu(struct vm *vm, size_t index, ipaddr_t entry, size_t arg);
Wedson Almeida Filho84a30a02018-07-23 20:05:05 +010030void vm_set_current(struct vm *vm);