blob: ce88adc60ee20bc2fe9f05634de6f64a1f0722a0 [file] [log] [blame]
Wedson Almeida Filho987c0ff2018-06-20 16:34:38 +01001#ifndef _VM_H
2#define _VM_H
3
Andrew Scull18c78fc2018-08-20 12:57:41 +01004#include "hf/cpu.h"
5#include "hf/mm.h"
Wedson Almeida Filho987c0ff2018-06-20 16:34:38 +01006
Wedson Almeida Filho2f94ec12018-07-26 16:00:48 +01007enum rpc_state {
8 rpc_state_idle,
9 rpc_state_pending,
10 rpc_state_inflight,
11};
12
13struct rpc {
14 enum rpc_state state;
15 int16_t recv_bytes;
16 void *recv;
17 const void *send;
18 struct vcpu *recv_waiter;
19};
20
Wedson Almeida Filho987c0ff2018-06-20 16:34:38 +010021struct vm {
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);
Wedson Almeida Filho987c0ff2018-06-20 16:34:38 +010032
Andrew Scull4f170f52018-07-19 12:58:20 +010033#endif /* _VM_H */