From 4ecd5d4d7ff401f124805e9605df125c405ea6d6 Mon Sep 17 00:00:00 2001 From: Sepherosa Ziehau Date: Fri, 25 Mar 2011 22:42:02 +0800 Subject: [PATCH] ioapic: Properly log interrupt mode --- sys/kern/subr_bus.c | 32 +++++++++++++++++++++++++++ sys/platform/pc32/acpica5/acpi_madt.c | 4 ++-- sys/platform/pc32/apic/ioapic_abi.c | 32 ++++++++++++++++----------- sys/platform/pc32/apic/mpapic.c | 12 +++++----- sys/platform/pc64/acpica5/acpi_madt.c | 4 ++-- sys/platform/pc64/apic/ioapic_abi.c | 32 ++++++++++++++++----------- sys/platform/pc64/apic/mpapic.c | 12 +++++----- sys/sys/bus.h | 3 +++ 8 files changed, 87 insertions(+), 44 deletions(-) diff --git a/sys/kern/subr_bus.c b/sys/kern/subr_bus.c index 06f94f7d8d..caeaeca9e3 100644 --- a/sys/kern/subr_bus.c +++ b/sys/kern/subr_bus.c @@ -3385,3 +3385,35 @@ bus_data_generation_update(void) { bus_data_generation++; } + +const char * +intr_str_polarity(enum intr_polarity pola) +{ + switch (pola) { + case INTR_POLARITY_LOW: + return "low"; + + case INTR_POLARITY_HIGH: + return "high"; + + case INTR_POLARITY_CONFORM: + return "conform"; + } + return "unknown"; +} + +const char * +intr_str_trigger(enum intr_trigger trig) +{ + switch (trig) { + case INTR_TRIGGER_EDGE: + return "edge"; + + case INTR_TRIGGER_LEVEL: + return "level"; + + case INTR_TRIGGER_CONFORM: + return "conform"; + } + return "unknown"; +} diff --git a/sys/platform/pc32/acpica5/acpi_madt.c b/sys/platform/pc32/acpica5/acpi_madt.c index ba2a6eddcc..a4aa924309 100644 --- a/sys/platform/pc32/acpica5/acpi_madt.c +++ b/sys/platform/pc32/acpica5/acpi_madt.c @@ -607,9 +607,9 @@ madt_ioapic_enum_callback(void *xarg, const struct acpi_madt_ent *ent) return 0; } - MADT_VPRINTF("INTSRC irq %d -> gsi %u %c\n", + MADT_VPRINTF("INTSRC irq %d -> gsi %u %s/%s\n", intsrc_ent->mint_src, intsrc_ent->mint_gsi, - trig == INTR_TRIGGER_EDGE ? 'E' : 'L'); + intr_str_trigger(trig), intr_str_polarity(pola)); ioapic_intsrc(intsrc_ent->mint_src, intsrc_ent->mint_gsi, trig, pola); } else if (ent->me_type == MADT_ENT_IOAPIC) { diff --git a/sys/platform/pc32/apic/ioapic_abi.c b/sys/platform/pc32/apic/ioapic_abi.c index f552d2d7ee..a2488e7547 100644 --- a/sys/platform/pc32/apic/ioapic_abi.c +++ b/sys/platform/pc32/apic/ioapic_abi.c @@ -686,8 +686,10 @@ ioapic_abi_set_irqmap(int irq, int gsi, enum intr_trigger trig, map->im_pola = pola; if (bootverbose) { - kprintf("IOAPIC: irq %d -> gsi %d %c\n", irq, map->im_gsi, - map->im_trig == INTR_TRIGGER_LEVEL ? 'L' : 'E'); + kprintf("IOAPIC: irq %d -> gsi %d %s/%s\n", + irq, map->im_gsi, + intr_str_trigger(map->im_trig), + intr_str_polarity(map->im_pola)); } pin = ioapic_gsi_pin(map->im_gsi); @@ -800,14 +802,14 @@ ioapic_intr_config(int irq, enum intr_trigger trig, enum intr_polarity pola) if (map->im_flags & IOAPIC_IMF_CONF) { if (trig != map->im_trig) { - panic("ioapic_intr_config: trig %c -> %c\n", - map->im_trig == INTR_TRIGGER_EDGE ? 'E' : 'L', - trig == INTR_TRIGGER_EDGE ? 'E' : 'L'); + panic("ioapic_intr_config: trig %s -> %s\n", + intr_str_trigger(map->im_trig), + intr_str_trigger(trig)); } if (pola != map->im_pola) { panic("ioapic_intr_config: pola %s -> %s\n", - map->im_pola == INTR_POLARITY_HIGH ? "hi" : "lo", - pola == INTR_POLARITY_HIGH ? "hi" : "lo"); + intr_str_polarity(map->im_pola), + intr_str_polarity(pola)); } return; } @@ -817,11 +819,13 @@ ioapic_intr_config(int irq, enum intr_trigger trig, enum intr_polarity pola) return; if (bootverbose) { - kprintf("IOAPIC: irq %d, gsi %d %c -> %c\n", irq, map->im_gsi, - map->im_trig == INTR_TRIGGER_LEVEL ? 'L' : 'E', - trig == INTR_TRIGGER_LEVEL ? 'L' : 'E'); + kprintf("IOAPIC: irq %d, gsi %d %s/%s -> %s/%s\n", + irq, map->im_gsi, + intr_str_trigger(map->im_trig), + intr_str_polarity(map->im_pola), + intr_str_trigger(trig), + intr_str_polarity(pola)); } - map->im_trig = trig; map->im_pola = pola; @@ -880,8 +884,10 @@ ioapic_abi_extint_irqmap(int irq) KKASSERT(map->im_gsi >= 0); if (bootverbose) { - kprintf("IOAPIC: irq %d -> extint gsi %d E\n", irq, - map->im_gsi); + kprintf("IOAPIC: irq %d -> extint gsi %d %s/%s\n", + irq, map->im_gsi, + intr_str_trigger(map->im_trig), + intr_str_polarity(map->im_pola)); } pin = ioapic_gsi_pin(map->im_gsi); diff --git a/sys/platform/pc32/apic/mpapic.c b/sys/platform/pc32/apic/mpapic.c index 0ac746d81c..3909627bdb 100644 --- a/sys/platform/pc32/apic/mpapic.c +++ b/sys/platform/pc32/apic/mpapic.c @@ -1349,17 +1349,15 @@ ioapic_intsrc(int irq, int gsi, enum intr_trigger trig, enum intr_polarity pola) } if (int_src->int_trig != trig) { kprintf("IOAPIC: warning intsrc irq %d, trig " - "%c -> %c\n", irq, - int_src->int_trig == INTR_TRIGGER_EDGE - ? 'E' : 'L', - trig == INTR_TRIGGER_EDGE ? 'E' : 'L'); + "%s -> %s\n", irq, + intr_str_trigger(int_src->int_trig), + intr_str_trigger(trig)); } if (int_src->int_pola != pola) { kprintf("IOAPIC: warning intsrc irq %d, pola " "%s -> %s\n", irq, - int_src->int_pola == INTR_POLARITY_HIGH - ? "hi" : "lo", - pola == INTR_POLARITY_HIGH ? "hi" : "lo"); + intr_str_polarity(int_src->int_pola), + intr_str_polarity(pola)); } } int_src->int_gsi = gsi; diff --git a/sys/platform/pc64/acpica5/acpi_madt.c b/sys/platform/pc64/acpica5/acpi_madt.c index 1dd1ef5afa..97372ebeea 100644 --- a/sys/platform/pc64/acpica5/acpi_madt.c +++ b/sys/platform/pc64/acpica5/acpi_madt.c @@ -606,9 +606,9 @@ madt_ioapic_enum_callback(void *xarg, const struct acpi_madt_ent *ent) return 0; } - MADT_VPRINTF("INTSRC irq %d -> gsi %u %c\n", + MADT_VPRINTF("INTSRC irq %d -> gsi %u %s/%s\n", intsrc_ent->mint_src, intsrc_ent->mint_gsi, - trig == INTR_TRIGGER_EDGE ? 'E' : 'L'); + intr_str_trigger(trig), intr_str_polarity(pola)); ioapic_intsrc(intsrc_ent->mint_src, intsrc_ent->mint_gsi, trig, pola); } else if (ent->me_type == MADT_ENT_IOAPIC) { diff --git a/sys/platform/pc64/apic/ioapic_abi.c b/sys/platform/pc64/apic/ioapic_abi.c index 3179356f5e..0e29226157 100644 --- a/sys/platform/pc64/apic/ioapic_abi.c +++ b/sys/platform/pc64/apic/ioapic_abi.c @@ -679,8 +679,10 @@ ioapic_abi_set_irqmap(int irq, int gsi, enum intr_trigger trig, map->im_pola = pola; if (bootverbose) { - kprintf("IOAPIC: irq %d -> gsi %d %c\n", irq, map->im_gsi, - map->im_trig == INTR_TRIGGER_LEVEL ? 'L' : 'E'); + kprintf("IOAPIC: irq %d -> gsi %d %s/%s\n", + irq, map->im_gsi, + intr_str_trigger(map->im_trig), + intr_str_polarity(map->im_pola)); } pin = ioapic_gsi_pin(map->im_gsi); @@ -793,14 +795,14 @@ ioapic_intr_config(int irq, enum intr_trigger trig, enum intr_polarity pola) if (map->im_flags & IOAPIC_IMF_CONF) { if (trig != map->im_trig) { - panic("ioapic_intr_config: trig %c -> %c\n", - map->im_trig == INTR_TRIGGER_EDGE ? 'E' : 'L', - trig == INTR_TRIGGER_EDGE ? 'E' : 'L'); + panic("ioapic_intr_config: trig %s -> %s\n", + intr_str_trigger(map->im_trig), + intr_str_trigger(trig)); } if (pola != map->im_pola) { panic("ioapic_intr_config: pola %s -> %s\n", - map->im_pola == INTR_POLARITY_HIGH ? "hi" : "lo", - pola == INTR_POLARITY_HIGH ? "hi" : "lo"); + intr_str_polarity(map->im_pola), + intr_str_polarity(pola)); } return; } @@ -810,11 +812,13 @@ ioapic_intr_config(int irq, enum intr_trigger trig, enum intr_polarity pola) return; if (bootverbose) { - kprintf("IOAPIC: irq %d, gsi %d %c -> %c\n", irq, map->im_gsi, - map->im_trig == INTR_TRIGGER_LEVEL ? 'L' : 'E', - trig == INTR_TRIGGER_LEVEL ? 'L' : 'E'); + kprintf("IOAPIC: irq %d, gsi %d %s/%s -> %s/%s\n", + irq, map->im_gsi, + intr_str_trigger(map->im_trig), + intr_str_polarity(map->im_pola), + intr_str_trigger(trig), + intr_str_polarity(pola)); } - map->im_trig = trig; map->im_pola = pola; @@ -873,8 +877,10 @@ ioapic_abi_extint_irqmap(int irq) KKASSERT(map->im_gsi >= 0); if (bootverbose) { - kprintf("IOAPIC: irq %d -> extint gsi %d E\n", irq, - map->im_gsi); + kprintf("IOAPIC: irq %d -> extint gsi %d %s/%s\n", + irq, map->im_gsi, + intr_str_trigger(map->im_trig), + intr_str_polarity(map->im_pola)); } pin = ioapic_gsi_pin(map->im_gsi); diff --git a/sys/platform/pc64/apic/mpapic.c b/sys/platform/pc64/apic/mpapic.c index 64d7878ebb..a050742d3d 100644 --- a/sys/platform/pc64/apic/mpapic.c +++ b/sys/platform/pc64/apic/mpapic.c @@ -1411,17 +1411,15 @@ ioapic_intsrc(int irq, int gsi, enum intr_trigger trig, enum intr_polarity pola) } if (int_src->int_trig != trig) { kprintf("IOAPIC: warning intsrc irq %d, trig " - "%c -> %c\n", irq, - int_src->int_trig == INTR_TRIGGER_EDGE - ? 'E' : 'L', - trig == INTR_TRIGGER_EDGE ? 'E' : 'L'); + "%s -> %s\n", irq, + intr_str_trigger(int_src->int_trig), + intr_str_trigger(trig)); } if (int_src->int_pola != pola) { kprintf("IOAPIC: warning intsrc irq %d, pola " "%s -> %s\n", irq, - int_src->int_pola == INTR_POLARITY_HIGH - ? "hi" : "lo", - pola == INTR_POLARITY_HIGH ? "hi" : "lo"); + intr_str_polarity(int_src->int_pola), + intr_str_polarity(pola)); } } int_src->int_gsi = gsi; diff --git a/sys/sys/bus.h b/sys/sys/bus.h index 07c6e39193..515ab939c2 100644 --- a/sys/sys/bus.h +++ b/sys/sys/bus.h @@ -146,6 +146,9 @@ SLIST_HEAD(resource_list, resource_list_entry); #endif /* _KERNEL || _KERNEL_STRUCTURES */ #ifdef _KERNEL +const char *intr_str_polarity(enum intr_polarity); +const char *intr_str_trigger(enum intr_trigger); + /** * devctl hooks. Typically one should use the devctl_notify * hook to send the message. However, devctl_queue_data is also -- 2.41.0