ioapic: For limited I/O APIC mixed mode, delivery mode should always be fixed.
authorSepherosa Ziehau <sephe@dragonflybsd.org>
Mon, 21 Mar 2011 16:55:51 +0000 (00:55 +0800)
committerSepherosa Ziehau <sephe@dragonflybsd.org>
Mon, 21 Mar 2011 16:50:32 +0000 (00:50 +0800)
sys/platform/pc32/apic/mpapic.c
sys/platform/pc64/apic/mpapic.c

index 13e8b5a..9cc02d1 100644 (file)
@@ -1437,7 +1437,17 @@ ioapic_pin_prog(void *addr, int pin, int vec,
        select = IOAPIC_REDTBL0 + (2 * pin);
 
        flags = ioapic_read(addr, select) & IOART_RESV;
-       flags |= IOART_INTMSET | IOART_DESTPHY | del_mode;
+       flags |= IOART_INTMSET | IOART_DESTPHY;
+#ifdef foo
+       flags |= del_mode;
+#else
+       /*
+        * We only support limited I/O APIC mixed mode,
+        * so even for ExtINT, we still use "fixed"
+        * delivery mode.
+        */
+       flags |= IOART_DELFIXED;
+#endif
 
        if (del_mode == IOART_DELEXINT) {
                KKASSERT(trig == INTR_TRIGGER_CONFORM &&
index 2857463..73cc70e 100644 (file)
@@ -1499,7 +1499,17 @@ ioapic_pin_prog(void *addr, int pin, int vec,
        select = IOAPIC_REDTBL0 + (2 * pin);
 
        flags = ioapic_read(addr, select) & IOART_RESV;
-       flags |= IOART_INTMSET | IOART_DESTPHY | del_mode;
+       flags |= IOART_INTMSET | IOART_DESTPHY;
+#ifdef foo
+       flags |= del_mode;
+#else
+       /*
+        * We only support limited I/O APIC mixed mode,
+        * so even for ExtINT, we still use "fixed"
+        * delivery mode.
+        */
+       flags |= IOART_DELFIXED;
+#endif
 
        if (del_mode == IOART_DELEXINT) {
                KKASSERT(trig == INTR_TRIGGER_CONFORM &&