text: /*
   * 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)
   */
  
  #ifndef _LIB_VMM_INTERRUPT_H_
  #define _LIB_VMM_INTERRUPT_H_
  
  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);
  
  /* 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);
  
  #endif
  