blob: 7becc6f70e2f7d76c5748ce84a9092b05b121d5b [file] [log] [blame]
/*
* Copyright 2017, 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 GNU General Public License version 2. Note that NO WARRANTY is provided.
* See "LICENSE_GPLv2.txt" for details.
*
* @TAG(DATA61_GPL)
*/
#pragma once
typedef struct vmm_vcpu vmm_vcpu_t;
/* Handler for a guest exit that is triggered when the guest is
* ready to receive interrupts */
int vmm_pending_interrupt_handler(vmm_vcpu_t *vcpu);
/* Request that the guest exist as soon as it is ready to receive
* interrupts */
void wait_for_guest_ready(vmm_vcpu_t *vcpu);
/* inject an exception */
void vmm_inject_exception(vmm_vcpu_t *vcpu, int exception, int has_error, uint32_t error_code);
/* Start an AP vcpu after a sipi with the requested vector */
void vmm_start_ap_vcpu(vmm_vcpu_t *vcpu, unsigned int sipi_vector);
/* Got interrupt(s) from PIC, propagate to relevant vcpu lapic */
void vmm_check_external_interrupt(vmm_t *vmm);
/* inject an interrupt from the lapic on the vcpu, whether or not it is in an exit */
void vmm_vcpu_accept_interrupt(vmm_vcpu_t *vcpu);
/* This function is called when a new interrupt has occured. */
void vmm_have_pending_interrupt(vmm_vcpu_t *vcpu);