The sensible default polarity is active-low for level-triggered
interrupts whereas it is active-high for edge-triggered ones. We do
this correctly when the BIOS explicitly tells us that it wants
defaults. But we also should do it when the BIOS gives us no
information. Fortunately this is easy.
jcs@ needs this for his i2c touchpad stuff.
ok?
Index: i386/i386/ioapic.c
===================================================================
RCS file: /cvs/src/sys/arch/i386/i386/ioapic.c,v
retrieving revision 1.37
diff -u -p -r1.37 ioapic.c
--- i386/i386/ioapic.c 8 Sep 2015 07:12:56 -0000 1.37
+++ i386/i386/ioapic.c 7 Jan 2016 21:01:57 -0000
@@ -448,7 +448,7 @@ apic_set_redir(struct ioapic_softc *sc,
redlo |= IOAPIC_REDLO_LEVEL;
else
redlo &= ~IOAPIC_REDLO_LEVEL;
- if (map != NULL && ((map->flags & 3) == MPS_INTPO_DEF)) {
+ if (map == NULL || ((map->flags & 3) == MPS_INTPO_DEF)) {
if (pp->ip_type == IST_LEVEL)
redlo |= IOAPIC_REDLO_ACTLO;
else
Index: amd64/amd64/ioapic.c
===================================================================
RCS file: /cvs/src/sys/arch/amd64/amd64/ioapic.c,v
retrieving revision 1.23
diff -u -p -r1.23 ioapic.c
--- amd64/amd64/ioapic.c 14 Mar 2015 03:38:46 -0000 1.23
+++ amd64/amd64/ioapic.c 7 Jan 2016 21:01:57 -0000
@@ -429,7 +429,7 @@ apic_set_redir(struct ioapic_softc *sc,
redlo |= IOAPIC_REDLO_LEVEL;
else
redlo &= ~IOAPIC_REDLO_LEVEL;
- if (map != NULL && ((map->flags & 3) == MPS_INTPO_DEF)) {
+ if (map == NULL || ((map->flags & 3) == MPS_INTPO_DEF)) {
if (pp->ip_type == IST_LEVEL)
redlo |= IOAPIC_REDLO_ACTLO;
else