Wedson Almeida Filho | 987c0ff | 2018-06-20 16:34:38 +0100 | [diff] [blame] | 1 | #include "vm.h" |
| 2 | |
| 3 | #include "cpu.h" |
| 4 | |
Wedson Almeida Filho | 8700964 | 2018-07-02 10:20:07 +0100 | [diff] [blame^] | 5 | void vm_init(struct vm *vm, uint32_t vcpu_count) |
Wedson Almeida Filho | 987c0ff | 2018-06-20 16:34:38 +0100 | [diff] [blame] | 6 | { |
Wedson Almeida Filho | 8700964 | 2018-07-02 10:20:07 +0100 | [diff] [blame^] | 7 | uint32_t i; |
| 8 | |
| 9 | vm->vcpu_count = vcpu_count; |
Wedson Almeida Filho | 987c0ff | 2018-06-20 16:34:38 +0100 | [diff] [blame] | 10 | |
| 11 | /* Do basic initialization of vcpus. */ |
Wedson Almeida Filho | 8700964 | 2018-07-02 10:20:07 +0100 | [diff] [blame^] | 12 | for (i = 0; i < vcpu_count; i++) |
| 13 | vcpu_init(vm->vcpus + i, vm); |
Wedson Almeida Filho | 987c0ff | 2018-06-20 16:34:38 +0100 | [diff] [blame] | 14 | |
| 15 | arch_vptable_init(&vm->page_table); |
| 16 | } |
| 17 | |
| 18 | /* TODO: Shall we use index or id here? */ |
Wedson Almeida Filho | 8700964 | 2018-07-02 10:20:07 +0100 | [diff] [blame^] | 19 | void vm_start_vcpu(struct vm *vm, size_t index, size_t entry, size_t arg, |
| 20 | bool is_primary) |
Wedson Almeida Filho | 987c0ff | 2018-06-20 16:34:38 +0100 | [diff] [blame] | 21 | { |
| 22 | struct vcpu *vcpu = vm->vcpus + index; |
Wedson Almeida Filho | 8700964 | 2018-07-02 10:20:07 +0100 | [diff] [blame^] | 23 | if (index < vm->vcpu_count) { |
| 24 | arch_regs_init(&vcpu->regs, entry, arg, is_primary); |
| 25 | vcpu_on(vcpu); |
| 26 | } |
Wedson Almeida Filho | 987c0ff | 2018-06-20 16:34:38 +0100 | [diff] [blame] | 27 | } |