svn commit: r215968 - head/sys/dev/usb/net

Pyun YongHyeon yongari at FreeBSD.org
Sun Nov 28 01:43:29 UTC 2010


Author: yongari
Date: Sun Nov 28 01:43:28 2010
New Revision: 215968
URL: http://svn.freebsd.org/changeset/base/215968

Log:
  Introduce new macro AXE_IS_178_FAMILY and AXE_IS_772. Include
  AX88772A and AX88772B for future extension. While here add TX
  buffer size for 178 family controllers.

Modified:
  head/sys/dev/usb/net/if_axe.c
  head/sys/dev/usb/net/if_axereg.h

Modified: head/sys/dev/usb/net/if_axe.c
==============================================================================
--- head/sys/dev/usb/net/if_axe.c	Sun Nov 28 01:18:11 2010	(r215967)
+++ head/sys/dev/usb/net/if_axe.c	Sun Nov 28 01:43:28 2010	(r215968)
@@ -302,7 +302,7 @@ axe_miibus_readreg(device_t dev, int phy
 	axe_cmd(sc, AXE_CMD_MII_OPMODE_HW, 0, 0, NULL);
 
 	val = le16toh(val);
-	if ((sc->sc_flags & AXE_FLAG_772) != 0 && reg == MII_BMSR) {
+	if (AXE_IS_772(sc) && reg == MII_BMSR) {
 		/*
 		 * BMSR of AX88772 indicates that it supports extended
 		 * capability but the extended status register is
@@ -384,7 +384,7 @@ axe_miibus_statchg(device_t dev)
 	val = 0;
 	if ((IFM_OPTIONS(mii->mii_media_active) & IFM_FDX) != 0)
 		val |= AXE_MEDIA_FULL_DUPLEX;
-	if (sc->sc_flags & (AXE_FLAG_178 | AXE_FLAG_772)) {
+	if (AXE_IS_178_FAMILY(sc)) {
 		val |= AXE_178_MEDIA_RX_EN | AXE_178_MEDIA_MAGIC;
 		if ((sc->sc_flags & AXE_FLAG_178) != 0)
 			val |= AXE_178_MEDIA_ENCK;
@@ -700,15 +700,18 @@ axe_attach_post(struct usb_ether *ue)
 		sc->sc_phyno = 0;
 	}
 
-	if (sc->sc_flags & AXE_FLAG_178)
+	if (sc->sc_flags & AXE_FLAG_178) {
 		axe_ax88178_init(sc);
-	else if (sc->sc_flags & AXE_FLAG_772)
+		sc->sc_tx_bufsz = 16 * 1024;
+	} else if (sc->sc_flags & AXE_FLAG_772) {
 		axe_ax88772_init(sc);
+		sc->sc_tx_bufsz = 8 * 1024;
+	}
 
 	/*
 	 * Get station address.
 	 */
-	if (sc->sc_flags & (AXE_FLAG_178 | AXE_FLAG_772))
+	if (AXE_IS_178_FAMILY(sc))
 		axe_cmd(sc, AXE_178_CMD_READ_NODEID, 0, 0, ue->ue_eaddr);
 	else
 		axe_cmd(sc, AXE_172_CMD_READ_NODEID, 0, 0, ue->ue_eaddr);
@@ -819,7 +822,7 @@ axe_bulk_read_callback(struct usb_xfer *
 		err = 0;
 
 		pc = usbd_xfer_get_frame(xfer, 0);
-		if (sc->sc_flags & (AXE_FLAG_772 | AXE_FLAG_178)) {
+		if (AXE_IS_178_FAMILY(sc)) {
 			while (pos < actlen) {
 				if ((pos + sizeof(hdr)) > actlen) {
 					/* too little data */
@@ -916,7 +919,7 @@ tr_setup:
 			if (m->m_pkthdr.len > MCLBYTES) {
 				m->m_pkthdr.len = MCLBYTES;
 			}
-			if (sc->sc_flags & (AXE_FLAG_772 | AXE_FLAG_178)) {
+			if (AXE_IS_178_FAMILY(sc)) {
 
 				hdr.len = htole16(m->m_pkthdr.len);
 				hdr.ilen = ~hdr.len;
@@ -955,7 +958,7 @@ tr_setup:
 
 			m_freem(m);
 
-			if (sc->sc_flags & (AXE_FLAG_772 | AXE_FLAG_178)) {
+			if (AXE_IS_178_FAMILY(sc)) {
 				if (pos > (AXE_BULK_BUF_SIZE - MCLBYTES - sizeof(hdr))) {
 					/* send out frame(s) */
 					break;
@@ -1034,16 +1037,16 @@ axe_init(struct usb_ether *ue)
 	axe_reset(sc);
 
 	/* Set MAC address. */
-	if (sc->sc_flags & (AXE_FLAG_178 | AXE_FLAG_772))
+	if (AXE_IS_178_FAMILY(sc))
 		axe_cmd(sc, AXE_178_CMD_WRITE_NODEID, 0, 0, IF_LLADDR(ifp));
 	else
 		axe_cmd(sc, AXE_172_CMD_WRITE_NODEID, 0, 0, IF_LLADDR(ifp));
 
 	/* Set transmitter IPG values */
-	if (sc->sc_flags & (AXE_FLAG_178 | AXE_FLAG_772)) {
+	if (AXE_IS_178_FAMILY(sc))
 		axe_cmd(sc, AXE_178_CMD_WRITE_IPG012, sc->sc_ipgs[2],
 		    (sc->sc_ipgs[1] << 8) | (sc->sc_ipgs[0]), NULL);
-	} else {
+	else {
 		axe_cmd(sc, AXE_172_CMD_WRITE_IPG0, 0, sc->sc_ipgs[0], NULL);
 		axe_cmd(sc, AXE_172_CMD_WRITE_IPG1, 0, sc->sc_ipgs[1], NULL);
 		axe_cmd(sc, AXE_172_CMD_WRITE_IPG2, 0, sc->sc_ipgs[2], NULL);
@@ -1051,7 +1054,7 @@ axe_init(struct usb_ether *ue)
 
 	/* Enable receiver, set RX mode */
 	rxmode = (AXE_RXCMD_MULTICAST | AXE_RXCMD_ENABLE);
-	if (sc->sc_flags & (AXE_FLAG_178 | AXE_FLAG_772)) {
+	if (AXE_IS_178_FAMILY(sc)) {
 #if 0
 		rxmode |= AXE_178_RXCMD_MFB_2048;	/* chip default */
 #else

Modified: head/sys/dev/usb/net/if_axereg.h
==============================================================================
--- head/sys/dev/usb/net/if_axereg.h	Sun Nov 28 01:18:11 2010	(r215967)
+++ head/sys/dev/usb/net/if_axereg.h	Sun Nov 28 01:43:28 2010	(r215968)
@@ -203,12 +203,22 @@ struct axe_softc {
 	int			sc_flags;
 #define	AXE_FLAG_LINK		0x0001
 #define	AXE_FLAG_772		0x1000	/* AX88772 */
-#define	AXE_FLAG_178		0x2000	/* AX88178 */
+#define	AXE_FLAG_772A		0x2000	/* AX88772A */
+#define	AXE_FLAG_772B		0x4000	/* AX88772B */
+#define	AXE_FLAG_178		0x8000	/* AX88178 */
 
 	uint8_t			sc_ipgs[3];
 	uint8_t			sc_phyaddrs[2];
+	int			sc_tx_bufsz;
 };
 
+#define	AXE_IS_178_FAMILY(sc)						  \
+	((sc)->sc_flags & (AXE_FLAG_772 | AXE_FLAG_772A | AXE_FLAG_772B | \
+	AXE_FLAG_178))
+
+#define	AXE_IS_772(sc)							  \
+	((sc)->sc_flags & (AXE_FLAG_772 | AXE_FLAG_772A | AXE_FLAG_772B))
+
 #define	AXE_LOCK(_sc)		mtx_lock(&(_sc)->sc_mtx)
 #define	AXE_UNLOCK(_sc)		mtx_unlock(&(_sc)->sc_mtx)
 #define	AXE_LOCK_ASSERT(_sc, t)	mtx_assert(&(_sc)->sc_mtx, t)


More information about the svn-src-all mailing list