svn commit: r190907 - head/sys/dev/ep

Warner Losh imp at FreeBSD.org
Sat Apr 11 02:47:04 UTC 2009


Author: imp
Date: Sat Apr 11 02:47:03 2009
New Revision: 190907
URL: http://svn.freebsd.org/changeset/base/190907

Log:
  o Report ethernet status for at least 10BaseT media.  Since I don't
    have other media to test against, I've left that media reporting
    unchanged.
  o Enable the TX_PLL when we enable TX.  This is harmless on most
    cards, but required to get the 3c1 CF card working.  Power savings
    could be had by managing this better, but for now it gets my card
    working.

Modified:
  head/sys/dev/ep/if_ep.c
  head/sys/dev/ep/if_epreg.h

Modified: head/sys/dev/ep/if_ep.c
==============================================================================
--- head/sys/dev/ep/if_ep.c	Sat Apr 11 02:39:30 2009	(r190906)
+++ head/sys/dev/ep/if_ep.c	Sat Apr 11 02:47:03 2009	(r190907)
@@ -435,6 +435,7 @@ epinit_locked(struct ep_softc *sc)
 	if (!sc->epb.mii_trans)
 		ep_ifmedia_upd(ifp);
 
+	CSR_WRITE_2(sc, EP_COMMAND, TX_PLL_ENABLE);
 	CSR_WRITE_2(sc, EP_COMMAND, RX_ENABLE);
 	CSR_WRITE_2(sc, EP_COMMAND, TX_ENABLE);
 
@@ -895,8 +896,24 @@ static void
 ep_ifmedia_sts(struct ifnet *ifp, struct ifmediareq *ifmr)
 {
 	struct ep_softc *sc = ifp->if_softc;
+	uint16_t ms;
 
-	ifmr->ifm_active = sc->ifmedia.ifm_media;
+	switch (IFM_SUBTYPE(sc->ifmedia.ifm_media)) {
+	case IFM_10_T:
+		GO_WINDOW(sc, 4);
+		ms = CSR_READ_2(sc, EP_W4_MEDIA_TYPE);
+		GO_WINDOW(sc, 0);
+		ifmr->ifm_status = IFM_AVALID;
+		if (ms & MT_LB) {
+			ifmr->ifm_status |= IFM_ACTIVE;
+			ifmr->ifm_active = IFM_ETHER | IFM_10_T;
+		} else {
+			ifmr->ifm_active = IFM_ETHER | IFM_NONE;
+		}
+	default:
+		ifmr->ifm_active = sc->ifmedia.ifm_media;
+		break;
+	}
 }
 
 static int

Modified: head/sys/dev/ep/if_epreg.h
==============================================================================
--- head/sys/dev/ep/if_epreg.h	Sat Apr 11 02:39:30 2009	(r190906)
+++ head/sys/dev/ep/if_epreg.h	Sat Apr 11 02:47:03 2009	(r190907)
@@ -156,6 +156,7 @@
  * Window 2 registers. Station Address Setup/Read
  */
 /* Read/Write */
+#define EP_W2_PHY_MGMT		0x0c
 #define EP_W2_ALT_EEPROM	0x0a
 #define EP_W2_ADDR_5		0x05
 #define EP_W2_ADDR_4		0x04
@@ -406,6 +407,17 @@
 #define LINKBEAT_ENABLE		0x80
 #define	ENABLE_UTP		(JABBER_GUARD_ENABLE | LINKBEAT_ENABLE)
 #define DISABLE_UTP		0x0
+#define	MT_CSD			0x0004	/* CRC Strip disable */
+#define	MT_SQE			0x0008	/* SQE Enable */
+#define	MT_C0			0x0010	/* Collison */
+#define	MT_CS			0x0020	/* Carrier Sense */
+#define MT_J			0x0200	/* Jabber detected */
+#define MT_PL			0x0400	/* Plarity Inverted */
+#define MT_LB			0x0800	/* Link Beat detected */
+#define MT_SQ			0x1000	/* SQE Present */
+#define MT_IN			0x2000	/* Reserved */
+#define MT_CE			0x4000	/* Coax */
+#define MT_TPE			0x8000
 
 /*
  * Misc defines for various things.


More information about the svn-src-head mailing list