summaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authorMiod Vallat <miod@cvs.openbsd.org>2014-07-28 18:31:40 +0000
committerMiod Vallat <miod@cvs.openbsd.org>2014-07-28 18:31:40 +0000
commitb57fb5f84ced9975f5181a6b19deacd0e209c1c2 (patch)
tree0418191b7f04a32f16618feb28269fa4265723de /sys
parentf134c1c80c92a897244eb2217c714134ada6489f (diff)
On SPARCbook systems, the ledma device node has a `cable-selection' property
specifying which media the on-board interface uses. We already query it to set up proper register values; extend this to be able to pass a default media to the le(4) child. This makes SPARCbook system default to AUI without needing for a manual media change. tested by sebastia@
Diffstat (limited to 'sys')
-rw-r--r--sys/arch/sparc/dev/dma.c9
-rw-r--r--sys/arch/sparc/dev/dmavar.h5
-rw-r--r--sys/arch/sparc/dev/if_le.c6
3 files changed, 15 insertions, 5 deletions
diff --git a/sys/arch/sparc/dev/dma.c b/sys/arch/sparc/dev/dma.c
index e9805a250aa..351b4b7a5d6 100644
--- a/sys/arch/sparc/dev/dma.c
+++ b/sys/arch/sparc/dev/dma.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: dma.c,v 1.29 2014/05/09 20:15:06 miod Exp $ */
+/* $OpenBSD: dma.c,v 1.30 2014/07/28 18:31:39 miod Exp $ */
/* $NetBSD: dma.c,v 1.46 1997/08/27 11:24:16 bouyer Exp $ */
/*
@@ -32,6 +32,7 @@
#include <sys/kernel.h>
#include <sys/errno.h>
#include <sys/ioctl.h>
+#include <sys/socket.h>
#include <sys/device.h>
#include <sys/malloc.h>
#include <sys/buf.h>
@@ -42,6 +43,9 @@
#include <sparc/sparc/cpuvar.h>
+#include <net/if.h>
+#include <net/if_media.h>
+
#include <scsi/scsi_all.h>
#include <scsi/scsiconf.h>
@@ -157,11 +161,14 @@ dmaattach(parent, self, aux)
char *cabletype = getpropstring(devnode, "cable-selection");
if (strcmp(cabletype, "tpe") == 0) {
sc->sc_regs->csr |= E_TP_AUI;
+ sc->sc_defaultmedia = IFM_ETHER | IFM_10_T;
} else if (strcmp(cabletype, "aui") == 0) {
sc->sc_regs->csr &= ~E_TP_AUI;
+ sc->sc_defaultmedia = IFM_ETHER | IFM_10_5;
} else {
/* assume TP if nothing there */
sc->sc_regs->csr |= E_TP_AUI;
+ sc->sc_defaultmedia = IFM_ETHER | IFM_AUTO;
}
delay(20000); /* manual says we need 20ms delay */
}
diff --git a/sys/arch/sparc/dev/dmavar.h b/sys/arch/sparc/dev/dmavar.h
index 7056b5ae908..7807272c329 100644
--- a/sys/arch/sparc/dev/dmavar.h
+++ b/sys/arch/sparc/dev/dmavar.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: dmavar.h,v 1.7 2006/06/02 20:00:54 miod Exp $ */
+/* $OpenBSD: dmavar.h,v 1.8 2014/07/28 18:31:39 miod Exp $ */
/* $NetBSD: dmavar.h,v 1.11 1996/11/27 21:49:53 pk Exp $ */
/*
@@ -27,7 +27,7 @@
struct dma_softc {
struct device sc_dev; /* us as a device */
struct esp_softc *sc_esp; /* my scsi */
- struct le_softc *sc_le; /* my ethernet */
+ struct le_softc *sc_le; /* my Ethernet */
struct dma_regs *sc_regs; /* the registers */
int sc_active; /* DMA active ? */
u_int sc_rev; /* revision */
@@ -44,6 +44,7 @@ struct dma_softc {
int (*setup)(struct dma_softc *, caddr_t *, size_t *, int, size_t *);
void (*go)(struct dma_softc *);
u_int sc_dmactl;
+ int sc_defaultmedia; /* default Ethernet media */
};
#define DMACSR(sc) (sc->sc_regs->csr)
diff --git a/sys/arch/sparc/dev/if_le.c b/sys/arch/sparc/dev/if_le.c
index 0a9a891aa3e..a310c3cc52f 100644
--- a/sys/arch/sparc/dev/if_le.c
+++ b/sys/arch/sparc/dev/if_le.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: if_le.c,v 1.34 2013/09/24 20:10:49 miod Exp $ */
+/* $OpenBSD: if_le.c,v 1.35 2014/07/28 18:31:39 miod Exp $ */
/* $NetBSD: if_le.c,v 1.50 1997/09/09 20:54:48 pk Exp $ */
/*-
@@ -583,19 +583,21 @@ leattach(struct device *parent, struct device *self, void *aux)
if (lebufchild) {
sc->sc_supmedia = lebufmedia;
sc->sc_nsupmedia = nitems(lebufmedia);
+ sc->sc_defaultmedia = sc->sc_supmedia[sc->sc_nsupmedia - 1];
} else
#endif
#if defined(SUN4M)
if (CPU_ISSUN4M && lesc->sc_dma) {
sc->sc_supmedia = ledmamedia;
sc->sc_nsupmedia = nitems(ledmamedia);
+ sc->sc_defaultmedia = lesc->sc_dma->sc_defaultmedia;
} else
#endif
{
sc->sc_supmedia = lebaremedia;
sc->sc_nsupmedia = nitems(lebaremedia);
+ sc->sc_defaultmedia = sc->sc_supmedia[sc->sc_nsupmedia - 1];
}
- sc->sc_defaultmedia = sc->sc_supmedia[sc->sc_nsupmedia - 1];
am7990_config(&lesc->sc_am7990);