X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Finclude%2Fpalacios%2Fvmm_intr.h;h=cc3b7c9a5142bf13c73faee5fbfea42db9a65324;hb=f44ca084bc46b20de6414920ab3a6fe53688095f;hp=d4543fdf96cb2a94f11ddcbcf0fcd84699b00f6d;hpb=b84c13ec0315404c6b6de8c1d3a7a65ac766a782;p=palacios.git diff --git a/palacios/include/palacios/vmm_intr.h b/palacios/include/palacios/vmm_intr.h index d4543fd..cc3b7c9 100644 --- a/palacios/include/palacios/vmm_intr.h +++ b/palacios/include/palacios/vmm_intr.h @@ -23,9 +23,8 @@ #ifdef __V3VEE__ -#include #include - +#include #define DE_EXCEPTION 0x00 #define DB_EXCEPTION 0x01 @@ -53,10 +52,6 @@ typedef enum {INVALID_INTR, EXTERNAL_IRQ, NMI, EXCEPTION, SOFTWARE_INTR, VIRTUAL struct guest_info; struct v3_interrupt; -/* We need a way to allow the APIC/PIC to decide when they are supposed to receive interrupts... - * Maybe a notification call when they have been turned on, to deliver irqs to them... - * We can rehook the guest raise_irq op, to the appropriate controller - */ struct v3_irq_hook { @@ -65,6 +60,9 @@ struct v3_irq_hook { }; + + + struct v3_intr_state { /* We need to rework the exception state, to handle stacking */ @@ -73,27 +71,23 @@ struct v3_intr_state { uint_t excp_error_code_valid : 1; uint_t excp_error_code; - struct intr_ctrl_ops * controller; - void * controller_state; + struct list_head controller_list; - /* some way to get the [A]PIC intr */ + /* some way to get the [A]PIC intr */ struct v3_irq_hook * hooks[256]; }; -void init_interrupt_state(struct guest_info * info); +void v3_init_interrupt_state(struct guest_info * info); int v3_raise_irq(struct guest_info * info, int irq); - -/*Zheng 07/30/2008*/ int v3_lower_irq(struct guest_info * info, int irq); -/*Zheng 07/30/2008*/ struct intr_ctrl_ops { int (*intr_pending)(void * private_data); @@ -106,16 +100,16 @@ struct intr_ctrl_ops { -void set_intr_controller(struct guest_info * info, struct intr_ctrl_ops * ops, void * state); +void v3_register_intr_controller(struct guest_info * info, struct intr_ctrl_ops * ops, void * state); int v3_raise_exception(struct guest_info * info, uint_t excp); int v3_raise_exception_with_error(struct guest_info * info, uint_t excp, uint_t error_code); -int intr_pending(struct guest_info * info); -uint_t get_intr_number(struct guest_info * info); -intr_type_t get_intr_type(struct guest_info * info); +int v3_intr_pending(struct guest_info * info); +uint_t v3_get_intr_number(struct guest_info * info); +intr_type_t v3_get_intr_type(struct guest_info * info); -int injecting_intr(struct guest_info * info, uint_t intr_num, intr_type_t type); +int v3_injecting_intr(struct guest_info * info, uint_t intr_num, intr_type_t type); /* int start_irq(struct vm_intr * intr);