diff options
author | dfr <dfr@FreeBSD.org> | 1999-04-19 08:42:39 +0000 |
---|---|---|
committer | dfr <dfr@FreeBSD.org> | 1999-04-19 08:42:39 +0000 |
commit | e374d062a8229df3c21fc91cfe332ffb6207c8aa (patch) | |
tree | 032fb11bfda31f3c3b394188b829dbd3b703589c /sys/i386/isa/isa_compat.c | |
parent | 66714352cee7d9a23f3755465f69836dfb494d7a (diff) | |
download | FreeBSD-src-e374d062a8229df3c21fc91cfe332ffb6207c8aa.zip FreeBSD-src-e374d062a8229df3c21fc91cfe332ffb6207c8aa.tar.gz |
Fix some confusion between physical and virtual addresses when recording
the driver's choice of memory window.
Diffstat (limited to 'sys/i386/isa/isa_compat.c')
-rw-r--r-- | sys/i386/isa/isa_compat.c | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/sys/i386/isa/isa_compat.c b/sys/i386/isa/isa_compat.c index 86ef5c5..b85b34e 100644 --- a/sys/i386/isa/isa_compat.c +++ b/sys/i386/isa/isa_compat.c @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: isa_compat.c,v 1.1 1999/04/16 21:22:23 peter Exp $ + * $Id: isa_compat.c,v 1.2 1999/04/17 09:56:35 bde Exp $ */ #include <sys/param.h> @@ -35,6 +35,11 @@ #include <machine/bus.h> #include <sys/rman.h> +#include <machine/vmparam.h> +#include <vm/vm.h> +#include <vm/pmap.h> +#include <machine/pmap.h> + #include <machine/resource.h> #include <isa/isavar.h> #include <i386/isa/isa_compat.h> @@ -152,11 +157,13 @@ isa_compat_probe(device_t dev) */ if (dvp->id_driver->probe) { int portsize; + void *maddr; isa_compat_alloc_resources(dev, &res); if (res.memory) - dvp->id_maddr = rman_get_virtual(res.memory); + maddr = rman_get_virtual(res.memory); else - dvp->id_maddr = 0; + maddr = 0; + dvp->id_maddr = maddr; portsize = dvp->id_driver->probe(dvp); isa_compat_release_resources(dev, &res); if (portsize != 0) { @@ -168,8 +175,9 @@ isa_compat_probe(device_t 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 != (void *) isa_get_maddr(dev)) - isa_set_maddr(dev, (int) dvp->id_maddr); + if (dvp->id_maddr != maddr) + isa_set_maddr(dev, + (int) dvp->id_maddr - KERNBASE); if (dvp->id_msize != isa_get_msize(dev)) isa_set_msize(dev, dvp->id_msize); return 0; |