diff --git a/sys/i386/isa/isa_compat.c b/sys/i386/isa/isa_compat.c index 43a7ae2a1582..8834931400fb 100644 --- a/sys/i386/isa/isa_compat.c +++ b/sys/i386/isa/isa_compat.c @@ -39,6 +39,7 @@ #include #include #include +#include #include #include @@ -169,21 +170,21 @@ isa_compat_probe(device_t dev) dvp->id_maddr = maddr; portsize = dvp->id_driver->probe(dvp); isa_compat_release_resources(dev, &res); - /* isa_release_resource clobbers the hints - reset them! */ - if (dvp->id_iobase > 0) - isa_set_port(dev, dvp->id_iobase); - if (portsize > 0) - isa_set_portsize(dev, portsize); - if (dvp->id_irq != 0) - isa_set_irq(dev, ffs(dvp->id_irq) - 1); - if (dvp->id_drq != -1) - isa_set_drq(dev, dvp->id_drq); - if (dvp->id_maddr != 0) - isa_set_maddr(dev, (int)kvtop(dvp->id_maddr)); /* XXX */ - if (dvp->id_msize != 0) - isa_set_msize(dev, dvp->id_msize); - if (portsize != 0) + if (portsize != 0) { + if (portsize > 0) + isa_set_portsize(dev, portsize); + if (dvp->id_iobase != isa_get_port(dev)) + isa_set_port(dev, dvp->id_iobase); + if (dvp->id_irq != irqmask(isa_get_irq(dev))) + isa_set_irq(dev, ffs(dvp->id_irq) - 1); + if (dvp->id_drq != isa_get_drq(dev)) + isa_set_drq(dev, dvp->id_drq); + if (dvp->id_maddr != maddr) + isa_set_maddr(dev, (int)kvtop(dvp->id_maddr)); + if (dvp->id_msize != isa_get_msize(dev)) + isa_set_msize(dev, dvp->id_msize); return 0; + } } return ENXIO; }