blob: f93effa9dbae72e0feb944401b3000316bbe5c0d [file]
/*
* Copyright 2019, Data61
* Commonwealth Scientific and Industrial Research Organisation (CSIRO)
* ABN 41 687 119 230.
*
* This software may be distributed and modified according to the terms of
* the BSD 2-Clause license. Note that NO WARRANTY is provided.
* See "LICENSE_BSD2.txt" for details.
*
* @TAG(DATA61_BSD)
*/
#pragma once
#include <sel4vm/guest_vm.h>
static inline seL4_CPtr vm_get_vcpu_tcb(vm_vcpu_t *vcpu)
{
return vcpu->tcb.tcb.cptr;
}
static inline seL4_CPtr vm_get_vcpu(vm_t *vm, int vcpu_id)
{
if (vcpu_id >= vm->num_vcpus) {
return seL4_CapNull;
}
return vm->vcpus[vcpu_id]->vcpu.cptr;
}
static inline vm_vcpu_t *vm_vcpu_for_target_cpu(vm_t *vm, int target_cpu)
{
for (int i = 0; i < vm->num_vcpus; i++) {
if (vm->vcpus[i]->target_cpu == target_cpu) {
return vm->vcpus[i];
}
}
return NULL;
}
static inline vm_vcpu_t *vm_find_free_unassigned_vcpu(vm_t *vm)
{
for (int i = 0; i < vm->num_vcpus; i++) {
if (vm->vcpus[i]->target_cpu == -1) {
return vm->vcpus[i];
}
}
return NULL;
}
static inline bool is_vcpu_online(vm_vcpu_t *vcpu)
{
return vcpu->vcpu_online;
}
static inline vspace_t *vm_get_vspace(vm_t *vm)
{
return &vm->mem.vm_vspace;
}
static inline vspace_t *vm_get_vmm_vspace(vm_t *vm)
{
return &vm->mem.vmm_vspace;
}