X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Finclude%2Fpalacios%2Fvmm.h;h=b9e3feabecc7565f53b7b39d40cdba001b86a21e;hb=da3c25c59f558869da8c2d91b28e32d977f33ea9;hp=10d001e963ea47f3fafdef302b62b08226b792ac;hpb=d172c2b8434d7731d757b9fac20d59f562ff9df0;p=palacios.releases.git diff --git a/palacios/include/palacios/vmm.h b/palacios/include/palacios/vmm.h index 10d001e..b9e3fea 100644 --- a/palacios/include/palacios/vmm.h +++ b/palacios/include/palacios/vmm.h @@ -124,6 +124,25 @@ #endif //!__V3VEE__ +// +// +// This is the interrupt state that the VMM's interrupt handlers need to see +// +struct vmm_intr_state { + uint_t irq; + uint_t error; + + uint_t should_ack; // Should the vmm ack this interrupt, or will + // the host OS do it? + + // This is the value given when the interrupt is hooked. + // This will never be NULL + void *opaque; +}; + +void deliver_interrupt_to_vmm(struct vmm_intr_state *state); + + /* This will contain function pointers that provide OS services */ struct vmm_os_hooks { void (*print_info)(const char * format, ...); @@ -139,7 +158,12 @@ struct vmm_os_hooks { void *(*paddr_to_vaddr)(void *addr); void *(*vaddr_to_paddr)(void *addr); - int (*hook_interrupt)(struct guest_info * info, int irq); + // int (*hook_interrupt)(int irq, vmm_intr_handler handler, uint_t opaque); + + int (*hook_interrupt)(struct guest_info *s, int irq); + + int (*hook_interrupt_new)(uint_t irq, void *opaque); + int (*ack_irq)(int irq); @@ -161,8 +185,7 @@ struct vmm_ctrl_ops { int (*start_guest)(struct guest_info * info); // int (*stop_vm)(uint_t vm_id); - - + int (*has_nested_paging)(); };