summaryrefslogtreecommitdiff
path: root/sys/arch/mvme88k
diff options
context:
space:
mode:
Diffstat (limited to 'sys/arch/mvme88k')
-rw-r--r--sys/arch/mvme88k/dev/if_le.c42
-rw-r--r--sys/arch/mvme88k/dev/if_lereg.h5
2 files changed, 31 insertions, 16 deletions
diff --git a/sys/arch/mvme88k/dev/if_le.c b/sys/arch/mvme88k/dev/if_le.c
index 767935a62f2..b2da2aeeaa2 100644
--- a/sys/arch/mvme88k/dev/if_le.c
+++ b/sys/arch/mvme88k/dev/if_le.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: if_le.c,v 1.2 2003/12/28 19:43:35 miod Exp $ */
+/* $OpenBSD: if_le.c,v 1.3 2003/12/30 21:25:59 miod Exp $ */
/*-
* Copyright (c) 1982, 1992, 1993
@@ -265,6 +265,7 @@ leattach(parent, self, aux)
struct am7990_softc *sc = &lesc->sc_am7990;
struct confargs *ca = aux;
caddr_t addr;
+ int card;
/* Are we the boot device? */
if (ca->ca_paddr == bootaddr)
@@ -273,32 +274,46 @@ leattach(parent, self, aux)
/*
* get the first available etherbuf. MVME376 uses its own dual-ported
* RAM for etherbuf. It is set by dip switches on board. We support
- * the four Motorola address locations, however, the board can be set up
- * at any other address. We must map this space into the extio map.
- * XXX-smurph.
+ * the six Motorola address locations, however, the board can be set up
+ * at any other address.
+ * XXX These physical addresses should be mapped in extio!!!
*/
switch ((int)ca->ca_paddr) {
- case 0xFFFF1200:
- addr = (caddr_t)0xFD6C0000;
+ case 0xffff1200:
+ card = 0;
break;
- case 0xFFFF1400:
- addr = (caddr_t)0xFD700000;
+ case 0xffff1400:
+ card = 1;
break;
- case 0xFFFF1600:
- addr = (caddr_t)0xFD740000;
+ case 0xffff1600:
+ card = 2;
break;
- case 0xFFFFD200:
- addr = (caddr_t)0xFD780000;
+ case 0xffff5400:
+ card = 3;
+ break;
+ case 0xffff5600:
+ card = 4;
+ break;
+ case 0xffffa400:
+ card = 5;
break;
default:
printf(": unsupported address\n");
return;
}
+ addr = (caddr_t)(VLEMEMBASE - (card * VLEMEMSIZE));
+
sc->sc_mem = (void *)mapiodev(addr, VLEMEMSIZE);
if (sc->sc_mem == NULL) {
- printf("\n%s: no more memory in external I/O map",
+ printf("\n%s: no more memory in external I/O map\n",
sc->sc_dev.dv_xname);
+ return;
+ }
+ sc->sc_addr = kvtop((vaddr_t)sc->sc_mem);
+ if (sc->sc_addr == 0L) {
+ printf("\n%s: kvtop() failed!\n", sc->sc_dev.dv_xname);
+ return;
}
lesc->sc_r1 = (void *)ca->ca_vaddr;
@@ -306,7 +321,6 @@ leattach(parent, self, aux)
lesc->sc_vec = ca->ca_vec;
sc->sc_memsize = VLEMEMSIZE;
sc->sc_conf3 = LE_C3_BSWP;
- sc->sc_addr = kvtop((vaddr_t)sc->sc_mem);
sc->sc_hwreset = vlereset;
sc->sc_rdcsr = vlerdcsr;
sc->sc_wrcsr = vlewrcsr;
diff --git a/sys/arch/mvme88k/dev/if_lereg.h b/sys/arch/mvme88k/dev/if_lereg.h
index a32b25b9368..360a1810430 100644
--- a/sys/arch/mvme88k/dev/if_lereg.h
+++ b/sys/arch/mvme88k/dev/if_lereg.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: if_lereg.h,v 1.1 2003/12/27 23:58:11 miod Exp $ */
+/* $OpenBSD: if_lereg.h,v 1.2 2003/12/30 21:25:59 miod Exp $ */
/*-
* Copyright (c) 1982, 1992, 1993
@@ -31,7 +31,8 @@
* @(#)if_lereg.h 8.2 (Berkeley) 10/30/93
*/
-#define VLEMEMSIZE 0x40000
+#define VLEMEMSIZE 0x00040000
+#define VLEMEMBASE 0xfd6c0000
/*
* LANCE registers for MVME376