X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?p=palacios.git;a=blobdiff_plain;f=palacios%2Fsrc%2Fdevices%2F8259a.c;h=7db595f2ad771f859a48f3fa615e4551dce264f4;hp=1608c28b761045cce8ba88113122e8f50bb959bc;hb=1da53ce8f6ab61d298d38cf3f1c4fcd9b1050ce8;hpb=72396466a6eeb253948862b334a8534ab29313fe diff --git a/palacios/src/devices/8259a.c b/palacios/src/devices/8259a.c index 1608c28..7db595f 100644 --- a/palacios/src/devices/8259a.c +++ b/palacios/src/devices/8259a.c @@ -180,12 +180,19 @@ static int pic_get_intr_number(void * private_data) { } - - - +/* The IRQ number is the number returned by pic_get_intr_number(), not the pin number */ static int pic_begin_irq(void * private_data, int irq) { struct pic_internal * state = (struct pic_internal*)private_data; + if ((irq >= state->master_icw2) && (irq <= state->master_icw2 + 7)) { + irq &= 0x7; + } else if ((irq >= state->slave_icw2) && (irq <= state->slave_icw2 + 7)) { + irq &= 0x7; + irq += 8; + } else { + return -1; + } + if (irq <= 7) { if (((state->master_irr & ~(state->master_imr)) >> irq) == 0x01) { state->master_isr |= (0x1 << irq);