aboutsummaryrefslogtreecommitdiff
path: root/hw/i8259.c
diff options
context:
space:
mode:
authorbellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162>2005-07-23 19:05:37 +0000
committerbellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162>2005-07-23 19:05:37 +0000
commitd592d3033d7bc41db6159e9387591a216e3c46e0 (patch)
tree8f06d19fb1c8d94005c991d8523e62a2d71f145f /hw/i8259.c
parent1ff5c1a68e2784722b66ecc40e30908e87e28a3b (diff)
IOAPIC support (initial patch by Filip Navara)
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1520 c046a42c-6fe2-441c-8c8c-71466251a162
Diffstat (limited to 'hw/i8259.c')
-rw-r--r--hw/i8259.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/hw/i8259.c b/hw/i8259.c
index 1be40c909c..00d5068ea1 100644
--- a/hw/i8259.c
+++ b/hw/i8259.c
@@ -55,6 +55,9 @@ struct PicState2 {
PicState pics[2];
IRQRequestFunc *irq_request;
void *irq_request_opaque;
+ /* IOAPIC callback support */
+ SetIRQFunc *alt_irq_func;
+ void *alt_irq_opaque;
};
#if defined(DEBUG_PIC) || defined (DEBUG_IRQ_COUNT)
@@ -186,6 +189,9 @@ void pic_set_irq_new(void *opaque, int irq, int level)
}
#endif
pic_set_irq1(&s->pics[irq >> 3], irq & 7, level);
+ /* used for IOAPIC irqs */
+ if (s->alt_irq_func)
+ s->alt_irq_func(s->alt_irq_opaque, irq, level);
pic_update_irq(s);
}
@@ -546,3 +552,10 @@ PicState2 *pic_init(IRQRequestFunc *irq_request, void *irq_request_opaque)
s->pics[1].pics_state = s;
return s;
}
+
+void pic_set_alt_irq_func(PicState2 *s, SetIRQFunc *alt_irq_func,
+ void *alt_irq_opaque)
+{
+ s->alt_irq_func = alt_irq_func;
+ s->alt_irq_opaque = alt_irq_opaque;
+}