X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?p=palacios.git;a=blobdiff_plain;f=palacios%2Fsrc%2Fgeekos%2Fvmm_stubs.c;h=c6b76cb7acacf55dc2ea2ea3a00400ed58d8c0bf;hp=0bc48e30f63e0d7a514e6f7d7f974db1ce50fab3;hb=28b1d0ae6db40cb3e1f5a9b3596b625d2f2af0e4;hpb=ace8f0532fa5650c6642a3a7174f3aa19b09095a diff --git a/palacios/src/geekos/vmm_stubs.c b/palacios/src/geekos/vmm_stubs.c index 0bc48e3..c6b76cb 100644 --- a/palacios/src/geekos/vmm_stubs.c +++ b/palacios/src/geekos/vmm_stubs.c @@ -1,6 +1,6 @@ #include #include - +#include void * Identity(void *addr) { return addr; }; @@ -44,3 +44,41 @@ void * VMM_Malloc(unsigned int size) { void VMM_Free(void * addr) { Free(addr); } + + + + +struct guest_info * irq_map[256]; + + +static void pic_intr_handler(struct Interrupt_State * state) { + Begin_IRQ(state); + + irq_map[state->intNum]->vm_ops.raise_irq(irq_map[state->intNum], state->intNum, state->errorCode); + + // End_IRQ(state); +} + + +int hook_irq_stub(struct guest_info * info, int irq) { + if (irq_map[irq]) { + return -1; + } + + irq_map[irq] = info; + Install_IRQ(irq, pic_intr_handler); + Enable_IRQ(irq); + return 0; +} + + +int ack_irq(int irq) { + End_IRQ_num(irq); + return 0; +} + + +void Init_Stubs() { + memset(irq_map, 0, sizeof(struct guest_info *) * 256); + +}