blob: 05dd2e3cc6900e720e14f932e219c47d6df72bb5 [file] [log] [blame]
Wedson Almeida Filho987c0ff2018-06-20 16:34:38 +01001#include "vm.h"
2
3#include "cpu.h"
4
Wedson Almeida Filho87009642018-07-02 10:20:07 +01005void vm_init(struct vm *vm, uint32_t vcpu_count)
Wedson Almeida Filho987c0ff2018-06-20 16:34:38 +01006{
Wedson Almeida Filho87009642018-07-02 10:20:07 +01007 uint32_t i;
8
9 vm->vcpu_count = vcpu_count;
Wedson Almeida Filho987c0ff2018-06-20 16:34:38 +010010
11 /* Do basic initialization of vcpus. */
Wedson Almeida Filho87009642018-07-02 10:20:07 +010012 for (i = 0; i < vcpu_count; i++)
13 vcpu_init(vm->vcpus + i, vm);
Wedson Almeida Filho987c0ff2018-06-20 16:34:38 +010014
15 arch_vptable_init(&vm->page_table);
16}
17
18/* TODO: Shall we use index or id here? */
Wedson Almeida Filho87009642018-07-02 10:20:07 +010019void vm_start_vcpu(struct vm *vm, size_t index, size_t entry, size_t arg,
20 bool is_primary)
Wedson Almeida Filho987c0ff2018-06-20 16:34:38 +010021{
22 struct vcpu *vcpu = vm->vcpus + index;
Wedson Almeida Filho87009642018-07-02 10:20:07 +010023 if (index < vm->vcpu_count) {
24 arch_regs_init(&vcpu->regs, entry, arg, is_primary);
25 vcpu_on(vcpu);
26 }
Wedson Almeida Filho987c0ff2018-06-20 16:34:38 +010027}