summaryrefslogtreecommitdiffstats
path: root/sys/i386/isa/isa_compat.c
diff options
context:
space:
mode:
authordfr <dfr@FreeBSD.org>1999-04-19 08:42:39 +0000
committerdfr <dfr@FreeBSD.org>1999-04-19 08:42:39 +0000
commite374d062a8229df3c21fc91cfe332ffb6207c8aa (patch)
tree032fb11bfda31f3c3b394188b829dbd3b703589c /sys/i386/isa/isa_compat.c
parent66714352cee7d9a23f3755465f69836dfb494d7a (diff)
downloadFreeBSD-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.c18
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;
OpenPOWER on IntegriCloud