diff --git a/sys/kern/subr_bus.c b/sys/kern/subr_bus.c --- a/sys/kern/subr_bus.c +++ b/sys/kern/subr_bus.c @@ -52,6 +52,9 @@ #include #include #include +#ifdef INTRNG +#include +#endif #include @@ -4378,17 +4381,26 @@ if (error != 0) return (error); - if ((rman_get_flags(r) & RF_UNMAPPED) == 0 && - (type == SYS_RES_MEMORY || type == SYS_RES_IOPORT)) { - error = BUS_MAP_RESOURCE(dev, child, type, r, NULL, &map); - if (error != 0) { - rman_deactivate_resource(r); - return (error); - } + switch (type) { + case SYS_RES_IOPORT: + case SYS_RES_MEMORY: + if ((rman_get_flags(r) & RF_UNMAPPED) == 0) { + error = BUS_MAP_RESOURCE(dev, child, type, r, NULL, &map); + if (error != 0) + break; - rman_set_mapping(r, &map); + rman_set_mapping(r, &map); + } + break; +#ifdef INTRNG + case SYS_RES_IRQ: + error = intr_activate_irq(child, r); + break; +#endif } - return (0); + if (error != 0) + rman_deactivate_resource(r); + return (error); } /** @@ -4417,10 +4429,19 @@ if (error != 0) return (error); - if ((rman_get_flags(r) & RF_UNMAPPED) == 0 && - (type == SYS_RES_MEMORY || type == SYS_RES_IOPORT)) { - rman_get_mapping(r, &map); - BUS_UNMAP_RESOURCE(dev, child, type, r, &map); + switch (type) { + case SYS_RES_IOPORT: + case SYS_RES_MEMORY: + if ((rman_get_flags(r) & RF_UNMAPPED) == 0) { + rman_get_mapping(r, &map); + BUS_UNMAP_RESOURCE(dev, child, type, r, &map); + } + break; +#ifdef INTRNG + case SYS_RES_IRQ: + intr_deactivate_irq(child, r); + break; +#endif } return (0); }