summaryrefslogtreecommitdiffstats
path: root/sys/i386/isa/atpic.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/i386/isa/atpic.c')
-rw-r--r--sys/i386/isa/atpic.c23
1 files changed, 14 insertions, 9 deletions
diff --git a/sys/i386/isa/atpic.c b/sys/i386/isa/atpic.c
index c73e253..9dfaf0c 100644
--- a/sys/i386/isa/atpic.c
+++ b/sys/i386/isa/atpic.c
@@ -156,7 +156,7 @@ static void atpic_eoi_master(struct intsrc *isrc);
static void atpic_eoi_slave(struct intsrc *isrc);
static void atpic_enable_intr(struct intsrc *isrc);
static int atpic_vector(struct intsrc *isrc);
-static void atpic_resume(struct intsrc *isrc);
+static void atpic_resume(struct pic *pic);
static int atpic_source_pending(struct intsrc *isrc);
static int atpic_config_intr(struct intsrc *isrc, enum intr_trigger trig,
enum intr_polarity pol);
@@ -303,18 +303,15 @@ atpic_source_pending(struct intsrc *isrc)
}
static void
-atpic_resume(struct intsrc *isrc)
+atpic_resume(struct pic *pic)
{
- struct atpic_intsrc *ai = (struct atpic_intsrc *)isrc;
- struct atpic *ap = (struct atpic *)isrc->is_pic;
+ struct atpic *ap = (struct atpic *)pic;
- if (ai->at_irq == 0) {
- i8259_init(ap, ap == &atpics[SLAVE]);
+ i8259_init(ap, ap == &atpics[SLAVE]);
#ifndef PC98
- if (ap == &atpics[SLAVE] && elcr_found)
- elcr_resume();
+ if (ap == &atpics[SLAVE] && elcr_found)
+ elcr_resume();
#endif
- }
}
static int
@@ -529,6 +526,14 @@ atpic_init(void *dummy __unused)
int i;
/*
+ * Register our PICs, even if we aren't going to use any of their
+ * pins so that they are suspended and resumed.
+ */
+ if (intr_register_pic(&atpics[0].at_pic) != 0 ||
+ intr_register_pic(&atpics[1].at_pic) != 0)
+ panic("Unable to register ATPICs");
+
+ /*
* If any of the ISA IRQs have an interrupt source already, then
* assume that the APICs are being used and don't register any
* of our interrupt sources. This makes sure we don't accidentally
OpenPOWER on IntegriCloud