intr/x86_64: Define ISA_IRQ_CNT; use it consistently instead of magic number
authorSepherosa Ziehau <sephe@dragonflybsd.org>
Wed, 31 Aug 2011 08:37:22 +0000 (16:37 +0800)
committerSepherosa Ziehau <sephe@dragonflybsd.org>
Wed, 31 Aug 2011 09:11:11 +0000 (17:11 +0800)
sys/platform/pc64/acpica5/acpi_madt.c
sys/platform/pc64/apic/ioapic.c
sys/platform/pc64/apic/ioapic_abi.c
sys/platform/pc64/icu/elcr.c
sys/platform/pc64/icu/icu_ipl.h
sys/platform/pc64/isa/isa_intr.h
sys/platform/pc64/x86_64/mptable.c

index 107b013..a1d7f53 100644 (file)
@@ -37,6 +37,7 @@
 #include <sys/kernel.h>
 #include <sys/systm.h>
 
+#include <machine_base/isa/isa_intr.h>
 #include <machine_base/apic/lapic.h>
 #include <machine_base/apic/ioapic.h>
 
@@ -495,8 +496,7 @@ madt_ioapic_probe_callback(void *xarg, const struct acpi_madt_ent *ent)
 
                intsrc_ent = (const struct acpi_madt_intsrc *)ent;
 
-               /* XXX magic number */
-               if (intsrc_ent->mint_src >= 16) {
+               if (intsrc_ent->mint_src >= ISA_IRQ_CNT) {
                        kprintf("madt_ioapic_probe: invalid intsrc irq (%d)\n",
                                intsrc_ent->mint_src);
                        return EINVAL;
@@ -587,7 +587,7 @@ madt_ioapic_enum_callback(void *xarg, const struct acpi_madt_ent *ent)
 
                intsrc_ent = (const struct acpi_madt_intsrc *)ent;
 
-               KKASSERT(intsrc_ent->mint_src < 16);
+               KKASSERT(intsrc_ent->mint_src < ISA_IRQ_CNT);
                if (intsrc_ent->mint_bus != MADT_INT_BUS_ISA)
                        return 0;
 
index 53adbfa..e198b0a 100644 (file)
@@ -33,6 +33,7 @@
 #include <sys/thread2.h>
 
 #include <machine/pmap.h>
+#include <machine_base/isa/isa_intr.h>
 #include <machine_base/icu/icu_var.h>
 #include <machine_base/apic/lapic.h>
 #include <machine_base/apic/ioapic.h>
@@ -61,7 +62,7 @@ struct ioapic_intsrc {
 
 struct ioapic_conf {
        struct ioapic_info_list ioc_list;
-       struct ioapic_intsrc ioc_intsrc[16];    /* XXX magic number */
+       struct ioapic_intsrc ioc_intsrc[ISA_IRQ_CNT];
 };
 
 static int     ioapic_config(void);
@@ -91,8 +92,7 @@ ioapic_config(void)
        register_t ef = 0;
 
        TAILQ_INIT(&ioapic_conf.ioc_list);
-       /* XXX magic number */
-       for (i = 0; i < 16; ++i)
+       for (i = 0; i < ISA_IRQ_CNT; ++i)
                ioapic_conf.ioc_intsrc[i].int_gsi = -1;
 
        probe = 1;
@@ -133,7 +133,7 @@ ioapic_config(void)
        TAILQ_FOREACH(info, &ioapic_conf.ioc_list, io_link)
                info->io_idx = i++;
 
-       if (i > IOAPIC_COUNT_MAX) /* XXX magic number */
+       if (i > IOAPIC_COUNT_MAX)
                panic("ioapic_config: more than 16 I/O APIC\n");
 
        /*
@@ -270,7 +270,7 @@ ioapic_intsrc(int irq, int gsi, enum intr_trigger trig, enum intr_polarity pola)
 {
        struct ioapic_intsrc *int_src;
 
-       KKASSERT(irq < 16);
+       KKASSERT(irq < ISA_IRQ_CNT);
        int_src = &ioapic_conf.ioc_intsrc[irq];
 
        if (gsi == 0) {
@@ -347,7 +347,7 @@ ioapic_gsi_setup(int gsi)
                return;
        }
 
-       for (irq = 0; irq < 16; ++irq) {
+       for (irq = 0; irq < ISA_IRQ_CNT; ++irq) {
                const struct ioapic_intsrc *int_src =
                    &ioapic_conf.ioc_intsrc[irq];
 
@@ -358,13 +358,13 @@ ioapic_gsi_setup(int gsi)
                }
        }
 
-       if (irq == 16) {
+       if (irq == ISA_IRQ_CNT) {
                /*
                 * No explicit IRQ to GSI mapping;
                 * use the default 1:1 mapping
                 */
                irq = gsi;
-               if (irq < 16) {
+               if (irq < ISA_IRQ_CNT) {
                        if (ioapic_conf.ioc_intsrc[irq].int_gsi >= 0) {
                                /*
                                 * This IRQ is mapped to different GSI,
index 5656edf..05f4e83 100644 (file)
@@ -55,6 +55,7 @@
 
 #include <sys/thread2.h>
 
+#include <machine_base/isa/isa_intr.h>
 #include <machine_base/icu/icu.h>
 #include <machine_base/icu/icu_var.h>
 #include <machine_base/apic/ioapic.h>
@@ -739,7 +740,7 @@ ioapic_abi_fixup_irqmap(void)
 {
        int i;
 
-       for (i = 0; i < 16; ++i) {
+       for (i = 0; i < ISA_IRQ_CNT; ++i) {
                struct ioapic_irqmap *map = &ioapic_irqmaps[i];
 
                if (map->im_type == IOAPIC_IMT_UNUSED) {
index e995cd6..fab878c 100644 (file)
@@ -51,6 +51,7 @@
 #include <sys/kernel.h>
 
 #include <machine_base/icu/elcr_var.h>
+#include <machine_base/isa/isa_intr.h>
 
 #define        ELCR_PORT       0x4d0
 #define        ELCR_MASK(irq)  (1 << (irq))
@@ -85,7 +86,7 @@ enum intr_trigger
 elcr_read_trigger(int irq)
 {
        KASSERT(elcr_found, ("%s: no ELCR was found!", __func__));
-       KASSERT(irq <= 15, ("%s: invalid IRQ %u", __func__, irq));
+       KASSERT(irq < ISA_IRQ_CNT, ("%s: invalid IRQ %u", __func__, irq));
        if (elcr_status & ELCR_MASK(irq))
                return (INTR_TRIGGER_LEVEL);
        else
@@ -102,7 +103,7 @@ elcr_write_trigger(int irq, enum intr_trigger trigger)
        int new_status;
 
        KASSERT(elcr_found, ("%s: no ELCR was found!", __func__));
-       KASSERT(irq <= 15, ("%s: invalid IRQ %u", __func__, irq));
+       KASSERT(irq < ISA_IRQ_CNT, ("%s: invalid IRQ %u", __func__, irq));
        if (trigger == INTR_TRIGGER_LEVEL)
                new_status = elcr_status | ELCR_MASK(irq);
        else
@@ -134,10 +135,10 @@ elcr_dump(void)
                int i;
 
                kprintf("ELCR Found.  ISA IRQs programmed as:\n");
-               for (i = 0; i < 16; i++)
+               for (i = 0; i < ISA_IRQ_CNT; i++)
                        kprintf(" %2d", i);
                kprintf("\n");
-               for (i = 0; i < 16; i++)
+               for (i = 0; i < ISA_IRQ_CNT; i++)
                        if (elcr_status & ELCR_MASK(i))
                                kprintf("  L");
                        else
index ee36ffd..36de4d6 100644 (file)
@@ -31,7 +31,9 @@
 #ifndef _ARCH_ICU_ICU_IPL_H_
 #define        _ARCH_ICU_ICU_IPL_H_
 
-#define ICU_HWI_VECTORS        16
+#include <machine_base/isa/isa_intr.h>
+
+#define ICU_HWI_VECTORS        ISA_IRQ_CNT
 #define ICU_HWI_MASK   ((1 << ICU_HWI_VECTORS) - 1)
 
 #ifdef LOCORE
index 6aa66eb..57b523b 100644 (file)
 #ifndef _ARCH_ISA_ISA_INTR_H_
 #define        _ARCH_ISA_ISA_INTR_H_
 
+#define ISA_IRQ_CNT    16
+
+#ifndef LOCORE
 void   isa_defaultirq(void);
 int    isa_nmi(int);
+#endif
 
 #endif /* _ARCH_ISA_ISA_INTR_H_ */
index 5764bfe..b81e51b 100644 (file)
@@ -51,6 +51,7 @@
 #endif
 
 #include <machine/smp.h>
+#include <machine_base/isa/isa_intr.h>
 #include <machine_base/apic/apicreg.h>
 #include <machine/atomic.h>
 #include <machine/cpufunc.h>
@@ -1173,7 +1174,7 @@ mptable_ioapic_probe_callback(void *xarg, const void *pos, int type)
        }
 
        /* XXX magic number */
-       if (ent->src_bus_irq >= 16) {
+       if (ent->src_bus_irq >= ISA_IRQ_CNT) {
                kprintf("mptable_ioapic_probe: invalid ISA irq (%d)\n",
                        ent->src_bus_irq);
                return EINVAL;